Django 2 - Logg inn Authentication PROBLEM: MultiValueDictKeyError for brukernavn

stemmer
1

Jeg prøver å implementere for første gang autentiseringen for Django.

Jeg skaper innloggings del følger den offisielle guide til Django 2. Men jeg har dette problemet:

Exception Type: MultiValueDictKeyError Exception Value: 'username'

Jeg laget en app som heter kontoer. Innsiden av det, har jeg følgende:

I regnskap / views.py:

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout    
def login(request):
      username = request.POST['username']
      password = request.POST['password']
      user = authenticate(request, username=username, password=password)
      if user is not None:
        return redirect('home')
      else:
        return render(request, accounts/login.html)

Maler / accounts.html:

{% extends 'mysite/base.html' %}

{% block content %}

<h1>Login</h1>
<form method=POST action={% url 'login' %}>
{% csrf_token %}
Username:
<br>
<input type=text name=username />
<br>
Password:
<br />
<input type=password name=password />
<br>
<br>
<input class=btn btn-primary type=submit value=Sign Up! />
</form>

{% endblock %}

I urls.py (av min app står ikke av prosjektet):

from django.urls import path, include
from . import views

urlpatterns = [
    path(signup/, views.signup, name=signup),
    path(login/, views.login, name=login),
    path(logout/, views.logout, name=logout),
]
Publisert på 19/09/2018 klokken 13:33
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Bare sjekk forespørselsmetoden før du gjør autentisering som følge

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout    
def login(request):
  if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
      return redirect('home')
    else:
      return render(request, "accounts/login.html")
  else:
    return render(request, "accounts/login.html")
Svarte 19/09/2018 kl. 13:49
kilden bruker

stemmer
1

def login(request):
    username = request.POST['username']
    ...

Du får feil fordi ditt syn alltid prøver å få usernamefra stillingen data. Men for det første GET-forespørsel, request.POSTvil være tom.

Du bør ikke prøve å skrive din egen innlogging syn som dette. Django kommer med godkjennings utsikt . Du bør bruke dem.

Svarte 19/09/2018 kl. 13:39
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more