执行数据库迁移的那两条命令时,即使我们没有建表,django是不是也会创建好多张表?我们创建之后去看一下里面的一个叫auth_user表,既然是表,那肯定应该有对应的操作改表的方法
auth_user表记录的添加
创建超级用户(密码是加密的)
createsuperuser
针对表中的数据做用户登录功能
from django.shortcuts import render,HttpResponse # Create your views here. from django.contrib import auth def auth_login(request): if request.method=='POST': username=request.POST.get('username') password=request.POST.get('password') res= auth.authenticate(request,username=username,password=password) print(res) #用户密码都匹配正确返回用户名,匹配不正确返回None if res: #记录用户状态 # 设置session # request.session['name']='jason' auth.login(request,res) #根据对象res生成相应的session return HttpResponse('登录成功') return render(request,'auth_login.html') def auth_index(request): print(request.user.is_authenticated()) #判断当前用户是否登录,登录返回True,没有登录返回False return HttpResponse('登录后才可以查看index页面') # 退出登录,清除本地和服务端的session def auth_logout(request): auth.logout(request) #清除session,相当于request .session.flush() return HttpResponse('退出成功') # 用户注册 #导入用户表 from django.contrib.auth.models import User def auth_register(request): if request.method=='POST': username=request.POST.get('username') password=request.POST.get('password') user_obj= auth.authenticate(request,username=username) if user_obj: return HttpResponse('当前用户:%s已经存在')%username # 使用create创建用户不会加密,create_user创建普通用户会加密;create_superuser创建超级用户,密码会加密 User.objects.create_user(username=username,password=password) return render(request, 'auth_register.html') # 修改密码,输入旧密码,输入新密码 def auth_password(request): if request.method=='POST': print(request.user) #显示当前登录用户名 print(request.user.password) #显示当前登录用户名的加密密码 password=request.POST.get('password') re_password=request.POST.get('re_password') is_res = request.user.check_password(password) print(is_res) if is_res: request.user.set_password(re_password) # 保存写入数据库中 request.user.save() return HttpResponse('密码修改成功') return HttpResponse('原密码输入不正确') return render(request,'auth_password.html')
# auth_login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <form action="" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="password" name="password"></p> <input type="submit"> </form> </body> </html>
# auth_password.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>修改密码</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <form action="" method="post"> {% csrf_token %} <p>原密码:<input type="password" name="password"></p> <p>新密码:<input type="password" name="re_password"></p> <input type="submit"> </form> </body> </html>
# auth_register.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户注册</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <h1>用户注册</h1> <form action="" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="password" name="password"></p> <input type="submit"> </form> </body> </html>
获取用户点击访问指定路径之前的路径
# 加载模块 from django.contrib.auth.decorators import login_required @login_required(login_url='/auth_login/') #跳转到auth_login页面 def auth_index(request): print(request.user.is_authenticated()) # 判断当前用户是否登录,登录返回True,没有登录返回False return HttpResponse('登录后才可以查看index页面')
@login_required #默认跳转的/login/页面 def auth_register(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user_obj = auth.authenticate(request, username=username) if user_obj: return HttpResponse('当前用户:%s已经存在') % username # 使用create创建用户不会加密,create_user创建普通用户会加密;create_superuser创建超级用户,密码会加密 User.objects.create_user(username=username, password=password) return render(request, 'auth_register.html')
自定义模型表应用auth功能(修改之前的功能表,添加新的字段,产生新的表)
如何扩张auth_user表?
一对一关联(不推荐)
from django.contrib.auth.model import User class UserDetail(models.Models): phone = models.CharField(max_length=11) user = models.OnoToOneField(to=User)
面向对象的继承
# 在models.py
from django.contrib.auth.models import User,AbstractUser class UserInfo(AbstractUser): #AbstractUser继承user表的所有字段 phone = models.CharField(max_length=32) #添加新的字段
# 需要在配置文件settings.py中,指定我不再使用默认的auth_user表而是使用我自己创建的Userinfo表
AUTH_USER_MODEL = "app名.models里面对应的模型表名"
"""
自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了。
库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现