Home > database >  MultiValueDictKeyError at /signin/
MultiValueDictKeyError at /signin/

Time:01-18

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")
  • Related