I am tryin to add an remember me option to my login page. Whenever i try logining and i click on the remember me option, everything works fine. When i do not click on it, it raises this error.
Here is my forms.py
class Signin(forms.Form):
username = forms.CharField(
max_length=9,
widget=forms.TextInput(
attrs={
"id": "input_64",
"name": "q64_typeA",
"data-type": "input-textbox",
"class": "form-textbox validate[required]",
"data-defaultvalue": "",
"size": "20",
"placeholder": "180591001",
"data-component": "textbox",
"aria-labelledby": "label_64",
"required": "",
}
),
)
password = forms.CharField(
max_length=255,
widget=forms.PasswordInput(
attrs={
"id": "first_66",
"name": "q66_name66[first]",
"class": "form-textbox validate[required]",
"data-defaultvalue": "",
"autoComplete": "section-input_66 given-name",
"size": "10",
"data-component": "first",
"aria-labelledby": "label_66 sublabel_66_first",
"required": "",
"placeholder": "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
}
),
)
remember = forms.BooleanField(required=False, initial=False)
views.py
def signin(request):
if request.user.is_authenticated:
return redirect(index)
if request.method == "POST":
form = Signin(request.POST)
if form.is_valid():
username = request.POST["username"]
password = request.POST["password"]
remember = request.POST["remember"]
user = User.objects.filter(username=username).exists()
if user:
get_user = User.objects.filter(username=username)
check_pass = check_password(password, get_user[0].password)
if not check_pass:
messages.error(request, "incorrect password")
return redirect(signin)
else:
login(request, get_user[0])
if not remember:
request.session.set_expiry(0)
return redirect(index)
else:
messages.error(request, "Invalid User")
return redirect(signin)
else:
form = Signin()
return render(request, "accounts/login.html", {"form": form})
here is the error it returns when i do not click on the remember me option.
MultiValueDictKeyError at /signin/
'remember'
Request Method: POST
Request URL: http://localhost:8002/signin/
Django Version: 4.1.2
Exception Type: MultiValueDictKeyError
Exception Value:
'remember'
Exception Location: /home/dubsy/virtualenvs/djangoproject/lib/python3.9/site-packages/django/utils/datastructures.py, line 86, in __getitem__
Raised during: accounts.views.signin
Python Executable: /home/dubsy/virtualenvs/djangoproject/bin/python
Python Version: 3.9.12
Python Path:
['/home/dubsy/virtualenvs/djangoproject/libmain',
'/home/dubsy/anaconda3/lib/python39.zip',
'/home/dubsy/anaconda3/lib/python3.9',
'/home/dubsy/anaconda3/lib/python3.9/lib-dynload',
'/home/dubsy/virtualenvs/djangoproject/lib/python3.9/site-packages']
Server time: Tue, 17 Jan 2023 15:06:24 0100
template
<form action="/signin/" method="post" enctype="multipart/form-data" name="form_230023299150548" id="230023299150548" accept-charset="utf-8" autocomplete="on">
{% csrf_token %}
<div role="main" >
<ul >
<li id="cid_60" data-type="control_head">
<div >
<div >
<h3 id="header_60" data-component="header">SignIn</h3>
</div>
</div>
</li>
<li data-type="control_textbox" id="id_64">
<label id="label_64" for="input_64"> Username
<span >*</span>
</label>
<div id="cid_64" >
{{form.username}}
</div>
</li>
<li data-type="control_fullname" id="id_66">
<label id="label_66" for="first_66">Password
<span >*</span>
</label>
<div id="cid_66" >
<div data-wrapper-react="true">
<span style="vertical-align:top" data-input-type="first">
{{form.password}}
</span>
</div>
</li>
<li data-type="control_fullname" id="id_90">
<label id="label_90" for="first_90">Remember Me
</label>
<div id="cid_90" >
<div data-wrapper-react="true">
<span style="vertical-align:top" data-input-type="first">
{{form.remember}}
</span>
</div>
</li>
<li data-type="control_button" id="id_76">
<div id="cid_76" >
<div data-align="center" ><button id="input_76" type="submit" data-component="button" data-content="">Submit</button></div>
</div>
</li>
</ul>
What i want to achieve is to make the remember me option not required.
CodePudding user response:
Try with get()
method
remember = request.POST.get("remember")