Django - 验证(Auth)

Django - 验证(Auth) 首页 / Django入门教程 / Django - 验证(Auth)

Django auth应用程序允许无涯教程登录用户并控制他们可以在webapp中执行的操作。 Django具有内置的 User 模型,其中包含名字(first_name),姓氏(last_name),电子邮件(email),用户名(username),密码(password)等字段。 可以使用内置的用户模型,也可以通过建立与 User 模型具有一个 OneToOneField 关系的另一个模型来扩展它。

Django Auth示例

本教程使用内置的 User 模型和 django.contrib.auth 应用程序的身份验证(authenticate),登录(login)和注销(logout)方法。 django.contrib.auth 是一个内置应用,也已在 settings.py 下列出。以下是用于创建用户注册,登录和注销session会话的模块代码。

models.py

    from django.db import models
    from django.contrib.auth.models import User 

app > urls.py

    from django.urls import path
    from . import views 
    
    urlpatterns = [
        path('', views.index),
        path('login/', views.signin),
        path('logout/', views.signout),
        path('signup/', views.signup),
    ]                                   

forms.py

    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'
    		] 

注册,登录和注销

views.py

    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

login_required装饰器使无涯教程可以将所有url请求重定向到 settings.py 下的预定义 LOGIN_URL

    LOGIN_URL = '/login/'    

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

如何做好一场技术演讲 -〔极客时间〕

许式伟的架构课 -〔许式伟〕

Linux实战技能100讲 -〔尹会生〕

Electron开发实战 -〔邓耀龙〕

分布式数据库30讲 -〔王磊〕

手把手教你玩音乐 -〔邓柯〕

Spark性能调优实战 -〔吴磊〕

编程高手必学的内存知识 -〔海纳〕

后端工程师的高阶面经 -〔邓明〕

好记忆不如烂笔头。留下您的足迹吧 :)