Django之Auth模块(创建超级用户)
目录
auth
模块是用于处理用户认证和授权,例如管理用户、处理用户登录、注册、密码重置等操作
创建超级用户
Django默认的admin路由配置
# urls.py
urlpatterns = [
path('admin/', admin.site.urls),
]
创建超级用户
python manage.py createsuperuser
注册账号(邮箱可为空)
依赖于auth_user表完成登录注册功能
前端
<body>
<div class="left-section"></div>
<div class="right-section"></div>
<div class="d1">
<form action="" method="post">
<p>username:<input type="text" name="username"></p>
<p>password:<input type="text" name="password"></p>
<input type="submit" class="btn btn-success">
</form>
</div>
</body>
后端:
auth.authenticate()
:检验用户是否登录
def test(request):
if request.method=='POST':
username = request.POST.get("username")
password = request.POST.get("password")
# 校验获取的用户密码是否存在于auth_user表
user_obj = auth.authenticate(request,username=username,password=password)
print(user_obj) # admin
print(user_obj.username) # admin
print(user_obj.password) # pbkdf2_sha256$260000$hr9ULLzoqpK8mhDtR6i2hM$BsUbjXZ6n7tnGJh3Gob8VnlavhQaD0DFdXPH1xqrCLs
return render(request, 'app01/test.html', locals())
'''
【1】自动查找 auth_user 表
【2】自动给密码加密进行比对
注意事项:
参数必须传入用户名和密码
不能只传入一个用户名(一步就帮助我们筛选出用户数据)
'''
保存用户状态(auth.login()
)
当登录成功时auth.login(request,用户对象)
保存用户状态
只要执行了上面的方法,就可以在任何地方通过request.user
获取当前用户的登录对象
def test(request):
if request.method=='POST':
username = request.POST.get("username")
password = request.POST.get("password")
user_obj = auth.authenticate(request,username=username,password=password)
if user_obj:
auth.login(request,user_obj)
return render(request, 'app01/test.html', locals())
校验装饰器@login_required()
@login_required()是django自带的装饰器
当views函数被该装饰器覆盖时会自动校验自动状态
如果校验失败会重定向到默认的url:
http://127.0.0.1:8000/accounts/login/?next=/app01/test/
校验密码
user.check_password()
参数是要校验的内容
@login_required
是 Django 框架提供的一个装饰器(Decorator),用于限制只有已登录用户才能访问被装饰的视图函数
def test(request):
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
confirm_password = request.POST.get('confirm_password')
# 先校验两次密是否一致
if new_password == confirm_password:
# 校验旧密码是否相同
is_right = request.user.check_password(old_password) # 内部自己加密密码进行比对
# 返回的结果为 True 或者 False
if is_right:
# 修改密码123123
request.user.set_password(confirm_password) # 仅仅在修改对象的属性
# 修改完密码后进行保存数据
request.user.save()
return render(request, 'app01/test.html', locals())
注销
@login_required
def login_out(request):
auth.logout(request) # 清空当前登录用户的数据 ----- request.session.flush()
return redirect('/login/')
注册普通用户
非加密注册
操作auth_user
表写入数据时保存的密码是明文的,没有加密
from django.contrib.auth.models import User
def test(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
confirm_password = request.POST.get('confirm_password')
# 创建普通用户
User.objects.create(username=username, password=confirm_password)
return render(request, 'app01/test.html')
加密注册
- 加密注册的邮箱是必填的
def test(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
confirm_password = request.POST.get('confirm_password')
User.objects._create_user(username=username, password=confirm_password,email='111@qq.com')
return render(request, 'app01/test.html')
代码创建超级用户(了解即可 )
使用代码创建超级用户,邮箱和密码是必填的,而用命令创建可以忽略邮箱
User.objects.create_superuser(username=username, password=password,email=email)