本篇内容
介绍Django框架提供的auth 认证系统
方法:
方法名 | 备注 |
create_user | 创建用户 |
authenticate | 登录验证 |
login | 记录登录状态 |
logout | 退出用户登录 |
is_authenticated | 判断用户是否登录 |
login_required装饰器 | 进行登录判断 |
引入模块
from django.contrib import auth
登录认证
user = auth.authenticate(username=username, password=pwd)if user is not None:# 将登录的用户封装到request.user# 在中间件中 process_request 中每次都这样子处理# id = request.session.get("user_id") 得到id# user = auth.User.objects.get(id=id)# request.user = userauth.login(request, user=user)return redirect("/index/")
验证通过则返回user,没有则返回None,在 login 函数中将认证通过的用户赋值给 request.user 属性,以及内部的 session 操作。 封装request.user = user
认证装饰器 login_required
from django.contrib.auth.decorators import login_required@login_required def index(request):print(request.user.username)return render(request, "index.html")
需要配置登录视图的url,所以需要在 settings 文件中配置如下:
# 如果没有登录 默认跳转的url LOGIN_URL = "/login/"
创建用户
1.普通用户
from django.contrib.auth.models import User# 加密的user = User.objects.create_user(username="tanglaoer2", password="tanglaoer")user.set_password("tang")user.save()
2.超级用户
user = User.objects.create_superuser(username="tanglaoer2", password="tanglaoer") user.set_password("tang") user.save()
注销
auth.logout(request)
内部相当于 request.session.flush()
扩展自带的auth_user表
1.新建一个表, 一对一关联上面的auth_user表
或者新建一个表,继承的方式
from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):phone = models.CharField(max_length=11)addr = models.CharField(max_length=128)
相当于对默认的 auth_user 表做了扩展, 并且代替 auth_user ,还需要在配置文件 settings 中进行如下配置:
# 如果使用继承的方式 继承auth的models,要在settings.py里面配置 默认用户认证时使用的哪张表 AUTH_USER_MODEL = "app.UserInfo"
auth认证还是使用 auth 只是创建用户的时候改为 用 UserInfo