auth模块

执行数据库迁移的那两条命令时,即使我们没有建表,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表的操作方法,现在全部用自定义的表均可实现

原文地址:https://www.cnblogs.com/yangzhaon/p/11048786.html