Django auth模块
Posted wt7018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django auth模块相关的知识,希望对你有一定的参考价值。
一、创建超级用户(auth_user)
createsuperuser
进入交互界面
二、author模块
1、authenticate() 验证
判断 前端输入的用户和密码 是否 存在auth_user表中(可以看成ORM的filter语句并取第一个)
返回结果:是当前登录对象
user_obj = auth.authenticate(username=user, password=pwd)
2、login() 注入
将当前登录对象注入到request中,方便在其它函数调用该对象
注入:
auth.login(request, user_obj)
调用:
user_obj = request.user
注意:user是固定写法,获取当前登录的用户对象
通过该对象获取值,需要通过auth_user中的字段
本质:利用session存储对象
3、logout()
作用:删除request中的注入对象 和request.session.flush() 相似
auth.logout(request)
4、is_authenticated
作用:判断是否验证通过
print(request.user.is_authenticated)
5、login_requierd()
login_required是装饰器
from django.contrib.auth.decorators import login_required
配置setting.py,设置没有登录默认跳转的url
# 没有登录,默认跳转该url LOGIN_URL = url
6、create_user() 和 create_superuser()
作用:创建用户
导入模块
from django.contrib.auth.models import User
创建用户对象
User.objects.create_user(username="tom1", password="@WSX3edc")
7、check_password(密码)
作用:判断密码是否相等
user_obj = User.objects.create_user(username="tom2", password="@WSX3edc") ret = user_obj.check_password("@WSX3edc") print(ret)
8、set_password(新密码)
作用:设置新密码
注意:别忘记save()
user_obj.set_password("@WSX1234") user_obj.save()
登录的例子
views.py
from django.shortcuts import render, redirect from django.contrib import auth from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User # Create your views here. # 登录 def login(request): if request.method == "POST": user = request.POST.get("user") pwd = request.POST.get("pwd") user_obj = auth.authenticate(username=user, password=pwd) if user_obj: auth.login(request, user_obj) return redirect("/index/") return render(request, "login.html") @login_required # 登录后的页面 def index(request): user_obj = request.user print(user_obj.username) print(request.user.is_authenticated) return render(request, "index.html", "user": user_obj) # 注销Session,即用户 def logout(request): auth.logout(request) return redirect("/login/") # 创建用户 def reg(request): user_obj = User.objects.create_user(username="tom3", password="@WSX31234") ret = user_obj.check_password("@WSX3edc") print(ret) user_obj.set_password("@WSX1234") user_obj.save() return redirect("/login/")
三、扩展auth_user的字段
这里使用继承
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class User(AbstractUser): phone = models.CharField(max_length=11, default="11111111") addr = models.CharField(max_length=64, default="abc")
配置文件setting.py
# 继承auth_user的时候,需要设置 AUTH_USER_MODEL = ‘app名.类名r‘
重新运行 makemigrations 和 migrate命令 生成数据表
若失败
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency app01.0001_initial on database ‘default‘
本人用的是暴力删除
求告知更好的方法
继承auth_user后,需要对注册进行修改
# 创建用户 def reg(request): user_obj = models.User.objects.create_user(username="tom3", password="@WSX31234") ret = user_obj.check_password("@WSX3edc") print(ret) user_obj.set_password("@WSX1234") user_obj.save() return redirect("/login/")
以上是关于Django auth模块的主要内容,如果未能解决你的问题,请参考以下文章