0
votes

I am having a problem by getting MultiValueDictKeyError in Django. I am trying to logout user from my website so I made the following codes.

In html

    </li>
            <li class="nav-item mr-3">
              <a href="javascript:{document.getElementById('logout').submit()}" class="nav-link">
              <i class="fas.fa-sign-out-alt"></i>Logout 
              </a>
              <form action="{% url 'logout'%}" method="POST" id="logout">
                {% csrf_token %}
                <input type="hidden">
              </form>
            </li>

Here's my login and logout function in say 'accounts/views.py'

    def login(request):
    # request method
    if request.method == 'POST':
        #Saving the username and password in a variable
        username = request.POST['username']
        password = request.POST['password']

        #checking if the user name and password matches using auth function
        user = auth.authenticate(username=username, password=password)

        # checking if the user is found in Database with user name and password, if found then login
        if user is not None:
            auth.login(request, user)
            messages.success(request, "Welcome to BTRE.")
            return redirect('dashboard')
        # if user name and password do not match with DB. display message and redirect to login page.
        else:
            messages.error(request, "Incorect Username and/or Password. Please type correct user name and password")
            return redirect('login')
    else:
        return render (request, 'accounts/login.html')

def logout(request):
    if request.method == 'POST':
        auth.logout(request)
        messages.success(request,"You are now logged out")
        return redirect('index')

Environment:

Request Method: POST Request URL: http://127.0.0.1:8000/accounts/logout

Django Version: 3.0.2 Python Version: 3.8.1 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'pages.apps.PagesConfig', 'listings.apps.ListingsConfig', 'realtors.apps.RealtorsConfig', 'accounts.apps.AccountsConfig'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback (most recent call last): File "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\utils\datastructures.py", line 76, in getitem list_ = super().getitem(key)

During handling of the above exception ('username'), another exception occurred: File "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\DD\Desktop\btre\accounts\views.py", line 12, in login username = request.POST['username'] File "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\utils\datastructures.py", line 78, in getitem raise MultiValueDictKeyError(key)

Exception Type: MultiValueDictKeyError at /accounts/logout Exception Value: 'username'

1
Sorry. spelled Django wrong in title. :)EeeJay
you can edit your post to change the spelling. Change request.POST['username'] to request.POST.get(username') and for password also.bmons
#Saving the username and password in a variable username = request.POST.get ('username') password = request.POST.get('password')EeeJay
nop. not working. still not logging out the user and redirects to login page and showing error 'ERROR: Incorrect Username and/or Password. Please type correct user name and password". which i made in login functionEeeJay
I think the issue is in html.EeeJay

1 Answers

0
votes
from django.urls import path
from . import views

urlpatterns = [
    path('login', views.login, name ='login'),
    path('logout', views.login, name ='logout'),
    path('register', views.register, name ='register'),
    path('dashboard', views.dashboard , name = 'dashboard')
]

sorry guys for wasting your time. one little error in urls.py causes me a headache for three hours. I appreciate your time guys. Again apologize for wasting your time.