用户认证--------------auth模块
auth模块要让自己的用户表继承auth一定要在setting里面写上AUTH_USER_MODEL="app名字.用户表名"
其实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创建的是明文密码
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) ]
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>
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>
<!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>