用户认证--------------auth模块
其实auth模块本意上也是设置session
用户认证是在你的django中执行了orm的数据库的迁移和生成后就会在你的数据库中自动生成一个用户认证的表 这个表存储的是你auth要提取的信息
首先views中导入下面语句
from django.contrib import auth
django.contrib.auth中提供了许多方法,这里主要介绍其中的三个:
其实你的用户验证的组件会调用你的django中user表 然后对这个表中你要先存数据
from django.contrib.auth.models import User #导入你的dgango中的user表 def adduser(request): User.objects.create_user(username = 'laoliu',password=123456) #运用create_user创建密文密码 return redirect('/login/')
先导入数据库 然后运用create_user进行创建 如果直接使用create创建的是明文密码
如果你的表想用user内的字段 或者很多字段相同 你的表也可以继承auth模块你的models内继承了user表
from django.contrib.auth.models import User 导入
但是你在models内设置好了后你要取settings内设置一段话告诉django你继承了这个表中
settings:
AUTH_USER_MODEL="你的app名.UserInfo"
就是告诉你的django你的app中的models内这个表要继承User表
AUTH_USER_MODEL="once.UserInfo" 告诉django你的once内的models内的UserInfo表要继承
models:
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import User /这个和上面的继承哪一个都可以User也是继承了AbstaactUser表 class UserInfo(AbstractUser): """ 用户信息 """ ....
views:
from django.contrib import auth #导入auth模块
def login(request):
'''
登陆
:param request:
:return:
'''
if request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
user = auth.authenticate(username =user,password=pwd) #自动给你的user表自动校验
if user: #登陆成功
auth.login(request,user) #相当于设置session
return render(request,'login.html')
auth.authenticate:
自动判断模块 可以判断你提交的信息是不是和user表中的内容是否相同
autho.login() 这一步相当于设置session的值
auth.login(request,user) 设置session的值user
设置完成后request.user就是全局的变量了直接可以随意随时随地的使用request.user进行取值
is_authenticated 是来判断你的设置的内容是否有值的
if not request.user.is_authenticated: #相当于如果没有设置session的值 从request.user中没有取到值
你的auth.login(request,'设置的内容')
然后你就可以根据你设置的内容全局去取
auth.login(request,user)
request.user就可以全局去取整个django都可以取到
注销:
autho.logout(request)
注销就相当于session.flush()
实现一个简单的用户登陆注销:
url:
from django.contrib import admin from django.urls import path from one import views urlpatterns = [ path('admin/', admin.site.urls), path('login/',views.login,name = 'login'), path('index/' ,views.index, name='index' ), path('add/',views.adduser, name='add'), path('logout/',views.logout) ]
views:
from django.shortcuts import render,redirect,HttpResponse,reverse # Create your views here. from django.contrib import auth def login(request): if request.method == 'POST': user = request.POST.get('user') pwd = request.POST.get('pwd') # 上面获取到用户名之后会自动的用auth.authenticate来进行验证 # user = auth.authenticate(uaername = user) user = auth.authenticate(username = user,password = pwd) if user: auth.login(request,user) #auth.login返回的是一个全局的变量 这一步就是一个设置session的值 return redirect('/index/') return render(request,'login.html') def index(request): if not request.user.is_authenticated: #相当于如果没有设置session的值 从request.user中没有取到值 return redirect(reverse('/login/')) return render(request,'index.html') def logout(request): auth.logout() #这一步就相当于直接session.flush() return redirect('/login/') from django.contrib.auth.models import User #导入你的dgango中的user表 def adduser(request): User.objects.create_user(username = 'laoliu',password=123456) #运用create_user创建密文密码 return redirect('/login/')
前端:
login:登陆界面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method = 'post'> {% csrf_token %} 用户名 <input type="text" name="user"> 密码: <input type="password" name="pwd"> <input type="submit" value="提交"> </form> </body> </html>
index界面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>{{ request.user.username }}</h3> <a href="/logout/">注销</a> </body> </html>