1.auth模块
导入auth模块
from django.contrib import auth
1.1 authenticate() :验证用户输入的用户名和密码是否相同
提供用户认证,即验证用户名以及密码是否正确,一般需要username password(django的auth_user自带数据库就有的名字)两个关键字参数
user = authenticate(username='someone',password='somepassword')
1.2 auth.login(request,user) :此函数使用django的session框架给某个已认证的用户附加上session id等信息
auth.login(request,user) # 直接使用
1.3 logout(request): 注销用户,无返回值,当前请求的session信息会在数据路中全部清除
auth.logout(request)
1.4 user对象的is_authenticated() 登录验证,用户登录后才能访问页面,没有登录则跳转到登录页
if not request.user.is_authenticated: return redirect("/login/")
对于此,我们也可以使用django提供的组件装饰器:login_required()
from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...
1.5 创建用户
在django自带的auth_user中创建用户,注意导入方式
from django.contrib.auth.models import User def register(request): User.objects.create(username="luffy",password=123) return redirect("/login/")
1.6 修改密码 set_password()
user = User.objects.get(username='') user.set_password(password='') user.save
2.演示代码
url.py
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path("login/",views.login), path("index/",views.index), path("logout/",views.logout), ]
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <form action="" method="post"> {% csrf_token %} 用户名:<input type="text" name="user"> 密码:<input type="password" name="pwd"> <input type="submit"> </form> <body> </body> </html>
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>Hi, {{ request.user.username }} <a href="/logout/">注销</a></h3> </body> </html>
views.py
登录
rom django.shortcuts import render,redirect # 导入用户认证组件,auth模块 from django.contrib import auth def login(request): if request.method=="POST": user = request.POST.get("user") pwd = request.POST.get("pwd") # 用户验证,一致则返回user对象,否则返回none user = auth.authenticate(username=user,password=pwd) print(user) if user: # 登录成功,则注册session组件,在session中存储信息 auth.login(request,user) return redirect("/index/") return render(request,"login.html")
登录验证
def index(request): # 打印存储在auth_user中的用户id,及姓名 print(request.user.id,request.user.username) # 登录验证,用户登录后才能访问某些页面,没有登录就访问该页面则跳转登录页面 if not request.user.is_authenticated: return redirect("/login/") return render(request, "index.html")
注销
def logout(request): # 注销用户,之前请求的session信息会全部清除 auth.logout(request) return redirect("/login/")