当涉及到用户相关功能的时候就可以考虑使用auth模块
特别提醒: 如果使用auth模块就去使用全套的,不是自己写一部分,用别人一部分
在tools里面的run manage.py 点击过后输入终端命令 createsuperuser
先导包 from django.contrip import auth
user_obj = auth.authenticate(username=username, password=password)
在django.user表中校验用户是否存在
如果用户存在就返回一个用户对象,不存在就返回一个None
auth.login(request, user_obj)
保存的是校验用户是否存在时生成的对象
只要保存了用户登录状态,只要有request的地方就可以拿到用户对象(利用session实现,默认会执行一个request.session[键]=值
)
request.user.is_authenticated()
返回值是布尔类型
在保存用户状态时就说过有request的地方就可以拿到用户对象
通过: request.user
拿到对象就可以点取值到对象的一些字段属性
先导入包:
from django.contrib.auth.decoration import login_required
这个就是一个装饰器,有两种配置方法
局部需要指定跳转页面,具体格式如下,优先级最高
@login_required(login_url='/login/')
def home(request):
...
先到settings.py
文件夹下面去添加一个配置
LOGIN_URL='/login/' # 指定没有登陆默认跳转的页面为 login 页面
在添加装饰器(全局不用指定,直接加)
@login_required
def home(request):
...
bool = request.user.check_password(old_password)
返回值是布尔类型
request.user.set_password(new_password)
requset.user.save()
记住使用完set_password的时候一定要执行save,不然是无效操作
先导包
form django.contrib.auth.models import User
这一步操作就是相当于把User这张表取出来
# 创建普通用户
User.objects.create_user(username=username, password=password)
# 创建超级用户(创建超级用户必须要传邮箱参数)
User.objects.create_user(username=username, password=password, email='123@qq.com')
还有一种之前的往数据库里面直接创建一条数据的create
我们是没法和auth一起使用的,因为保存在数据库里面的密码都是经过加密的,使用create
创建的数据中密码是没有经过加密的.
不好用
AbstractUser
AUTH_USER_MODEL = ‘应用名.表名‘
来告诉django要用新建的类来代替auth_user表AUTH_USER_MODEL = ‘应用名.表名‘
(一定要配置)1. models.py
# 先导入包
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
tel = models.IntegerField()
...
注意:
AbstractUser
之后,我们自定义的字段名不能和之前的字段一样使用auth的所有功能
auth_user
表会被删除
,取而代之的是继承了的表存在.原文:https://www.cnblogs.com/xiongchao0823/p/11774156.html