Django auth应用程序允许无涯教程登录用户并控制他们可以在webapp中执行的操作。 Django具有内置的 User 模型,其中包含名字(first_name),姓氏(last_name),电子邮件(email),用户名(username),密码(password)等字段。 可以使用内置的用户模型,也可以通过建立与 User 模型具有一个 OneToOneField 关系的另一个模型来扩展它。
本教程使用内置的 User 模型和 django.contrib.auth 应用程序的身份验证(authenticate),登录(login)和注销(logout)方法。 django.contrib.auth 是一个内置应用,也已在 settings.py 下列出。以下是用于创建用户注册,登录和注销session会话的模块代码。
from django.db import models from django.contrib.auth.models import User
from django.urls import path from . import views urlpatterns = [ path('', views.index), path('login/', views.signin), path('logout/', views.signout), path('signup/', views.signup), ]
from django.contrib.auth.models import User from django import forms class UserForm(forms.ModelForm): class Meta: model = User fields = ['username', 'password'] class UserRegistrationForm(forms.ModelForm): class Meta: model = User fields = [ 'username', 'password', 'email', 'first_name', 'last_name' ]
from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.contrib.auth import authenticate, login, logout from .forms import UserForm, UserRegistrationForm from django.http import HttpResponse from django.contrib.auth.models import User @login_required def index(request): return render(request, 'index.html', {}) def signin(request): if request.method == "POST": username = request.POST['username'] password = request.POST['password'] user = authenticate( request, username=username, password=password ) if user is None: return HttpResponse("Invalid credentials.") login(request, user) return redirect('/') else: form = UserForm() return render(request, 'login.html', {'form':form}) def signout(request): logout(request) return redirect('/') def signup(request): if request.method=="POST": first_name = request.POST['first_name'] last_name = request.POST['last_name'] username = request.POST['username'] password = request.POST['password'] email = request.POST['email'] newuser = User.objects.create_user( first_name=first_name, last_name=last_name, username=username, password=password, email=email ) try: newuser.save() except: return HttpResponse("Something went wrong.") else: form = UserRegistrationForm() return render(request, 'signup.html', {'form':form})
login_required装饰器使无涯教程可以将所有url请求重定向到 settings.py 下的预定义 LOGIN_URL
LOGIN_URL = '/login/'
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)