django中的登录和验证错误

时间:2018-03-28 06:59:42

标签: django-models

我是python和django框架的新手。请任何人帮助我,我走错了,我做了简单的注册表和登录,这里注册表工作并存储表格数据数据库,但我无法登录并验证我的用户名和密码。提前谢谢

urls.py

from django.contrib import admin
from django.conf.urls import url
from core import views as core_views
from django.contrib.auth import views as auth_views
urlpatterns = [
url(r'^$', core_views.home, name='home'),
url(r'^signup/$', core_views.signup, name='signup'),
url(r'^login/$', 
 auth_views.LoginView.as_view(template_name='login.html'), 
name='login'),
 url(r'admin/', admin.site.urls),
 ]

forms.py

from django import forms
from .models import Core

 class Registrationform(forms.ModelForm):
       username = forms.CharField(max_length=15,label="Username")
      firstname = forms.CharField(max_length=15,label="Firstname")
      lastname = forms.CharField(max_length=15,label="Lastname")
      email = forms.EmailField(required=True)
      password = forms.CharField 
      (widget=forms.PasswordInput,required=True,label="Password")
     password1 = forms.CharField(widget=forms.PasswordInput, 
     required=True,label="PasswordConfirmation")

    class Meta:
         model=Core
         fields= 
   ("username","firstname","lastname","email","password","password1",)

views.py

   from django.shortcuts import render,redirect
   from .form import Registrationform
   from django.contrib import messages
   from django.contrib.auth import authenticate, login
   def home(request):
       return render(request,'home.html')

  def signup(request):
      if request.method == 'POST':
        form = Registrationform(request.POST)
        if form.is_valid():
           user=form.save()
           username = form.cleaned_data.get('username')
           firstname = form.cleaned_data.get('firstname')
           lastname = form.cleaned_data.get('lastname')
           email = form.cleaned_data.get('email')
           password = form.cleaned_data.get('password')
           user=authenticate(username=username,firstname=firstname,
           lastname=lastname,email=email,password=password)
           login(request,user)
           return render(request,'home')
     else:
          form = Registrationform()

    return render(request, 'signup.html', {'form': form})
  def login(request):
      if request == 'POST' :
         username = request.POST['username']
         password = request.POST['password1']
         user=authenticate(username=username,password=password)
         if user is not None:
            login(request,user)
            return render(request,'home.html')
         else:
            return render(request,"invalid.html")
     else:
        return render(request,'invalid.html')

的login.html

<form method="post" novalidate>
        {% csrf_token %}
        <input type="hidden" name="next" value="{{ next }}">
        {{ form.as_p }}
          <div style="text-align: center;">
        <button type="submit" class="btn btn-dark">Login</button>
      </form>
    </div>
  </div>
    <div class="card-footer text-muted text-center">
      New to myapp?<a href="{% url 'signup' %}"> Sign up</a>
    </div>
  </div>`

1 个答案:

答案 0 :(得分:0)

Django附带了bulit app from django.contrib.auth import login, authenticate from django.contrib.auth.forms import UserCreationForm from django.shortcuts import render, redirect def signup(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): form.save() username = form.cleaned_data.get('username') raw_password = form.cleaned_data.get('password1') user = authenticate(username=username, password=raw_password) login(request, user) return redirect('/') else: form = UserCreationForm() return render(request, 'login.html', {'form': form}) 。我们不需要为User明确编写模型。像下面一样更改你的代码。

{{1}}

参考:
https://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/forms/
https://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/views/
https://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/models/