Auth模块:
如果你想用auth模块 那么你就用全套
createsuperuser 创建超级用户 这个超级用户就可以拥有登陆django admin后台管理的权限
Auth模块是Django自带的用户认证模块:
我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。
跟用户相关的功能模块
用户的注册 登陆 验证 修改密码 ...
执行数据库迁移命令之后 会生成很多表 其中的auth_user是一张用户相关的表格
添加数据
createsuperuser 创建超级用户 这个超级用户就可以拥有登陆django admin后台管理的权限
Auth模块常用方法
from django.contrib import auth
from django.contrib import auth user_obj = auth.authenticate(username=username,password=password # 必须要用 因为数据库中的密码字段是密文的 而你获取的用户输入的是明文
auth.login(request,user_obj) # 将用户状态记录到session中
print(request.user.is_authenticated) # 判断用户是否登录 如果是你们用户会返回False
print(request.user) # 如果没有执行auth.login那么拿到的是匿名用户
from django.contrib.auth.decorators import login_required @login_required(login_url='/xxx/') # 局部配置 def index(request) pass # 全局配置 settings文件中 LOGIN_URL = '/xxx/'
request.user.check_password(old_password)
request.user.set_password(new_password) request.user.save() # 修改密码的时候 一定要save保存 否则无法生效
auth.logout(request) # request.session.flush()
User.objects.create(username =username,password=password) # 创建用户名的时候 千万不要再使用create 了 User.objects.create_user(username =username,password=password) # 创建普通用户 User.objects.create_superuser(username =username,password=password,email='[email protected]') # 创建超级用户 邮箱必填
第一种 :使用一对一关系 不考虑
第二种: 使用类的继承
一定要在配置文件中 告诉django
告诉django orm不再使用auth默认的表 而是使用你自定义的表
在setting.py文件中配置
AUTH_USER_MODEL = 'app01.Userinfo' # '应用名.类名'
使用类继承
from django.contrib.auth.models import AbstractUser
class Userinfo(AbstractUser): # 千万不要跟原来表中的字段重复 只能创新 phone = models.BigIntegerField() avatar = models.CharField(max_length=32)
最后执行数据库迁移命令
所有的auth模块功能 全部都基于你创建的表,而不再使用auth_user