我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据,使用auth模块来进行用户认证,那么需要使用人家django自带的auth_user表来存储用户的信息数据。
模块导入:
from django.contrib import auth
那么有人就有疑问 了,这个auth_user表并不是我们自己在models.py文件中创建的啊,这通过代码怎么操作啊?
其中一个往auth_user表里面添加数据的命令,可以先多添加几个用户,方便后面操作:
python manage.py createsuperuser #要通过这个指令来创建用户,因为这个指令会将你的密码加密。
然后表中就有数据了:这个表里面的数据现在先关注username和password字段就可以了,其他的字段可为空。
user表具有一下字段:
内置的User模型拥有以下的字段: username: 用户名。150个字符以内。可以包含数字和英文字符,以及_、@、+、.和-字符。不能为空,且必须唯一! first_name:歪果仁的first_name,在30个字符以内。可以为空。 last_name:歪果仁的last_name,在150个字符以内。可以为空。 email:邮箱。可以为空。 password:密码。经过哈希过后的密码。 #groups:分组。一个用户可以属于多个分组,一个分组可以拥有多个用户。groups这个字段是跟Group的一个多对多的关系。 #user_permissions:权限。一个用户可以拥有多个权限,一个权限可以被多个用户所有用。和Permission属于一种多对多的关系。 is_staff:是否可以进入到admin的站点。代表是否是员工。这个字段如果不使用admin的话,可以自行忽略,不影响使用 is_active:是否是可用的。对于一些想要删除账号的数据,我们设置这个值为False就可以了,而不是真正的从数据库中删除。 is_superuser:是否是超级管理员。如果是超级管理员,那么拥有整个网站的所有权限。 last_login:上次登录的时间。 date_joined:账号创建的时间。
二、认证流程
1、用户注册
auth 提供的两种创建新用户的方法,需要提供必要参数(username、password)等。
普通用户:create_user()
超级管理员:create_superuser()
from django.contrib.auth.models import User user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...) user_obj = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
注册代码:
# 注册 def register(request): if request.method=="GET": return render(request,"register.html") else: username = request.POST.get("username") password = request.POST.get("password") # 判断用户名是否存在 if User.objects.filter(username=username).exists(): return HttpResponse("用户名已经存在") # 注册用户 User.objects.create_user(username=username,password=password) return redirect("user_login")