zoukankan      html  css  js  c++  java
  • Django auth模块

    request.user全局可用(前端或后端)

    一、创建超级用户(auth_user)

    createsuperuser

    进入交互界面

    二、author模块

    from django.contrib import auth

    1、authenticate() 验证

    判断 前端输入的用户和密码 是否 存在auth_user表中(可以看成ORM的filter语句并取第一个)

    返回结果:是当前登录对象

    user_obj = auth.authenticate(username=user, password=pwd)

    2、login() 注入

    将当前登录对象注入到request中,方便在其它函数调用该对象

    注入:

    auth.login(request, user_obj)

    调用:

    user_obj = request.user

    注意:user是固定写法,获取当前登录的用户对象

       通过该对象获取值,需要通过auth_user中的字段

    本质:利用session存储对象

    3、logout()

    作用:删除request中的注入对象 和request.session.flush() 相似

    auth.logout(request)

    4、is_authenticated

    作用:判断是否验证通过

    print(request.user.is_authenticated)

    5、login_requierd()

    login_required是装饰器

    from django.contrib.auth.decorators import login_required

    配置setting.py,设置没有登录默认跳转的url

    # 没有登录,默认跳转该url
    LOGIN_URL = url

    6、create_user() 和 create_superuser()

    作用:创建用户

    导入模块

    from django.contrib.auth.models import User

    创建用户对象

    User.objects.create_user(username="tom1", password="@WSX3edc")

    7、check_password(密码)

    作用:判断密码是否相等

        user_obj = User.objects.create_user(username="tom2", password="@WSX3edc")
        ret = user_obj.check_password("@WSX3edc")
        print(ret)

    8、set_password(新密码)

    作用:设置新密码

    注意:别忘记save()

     user_obj.set_password("@WSX1234")
        user_obj.save()

    登录的例子

    views.py

    from django.shortcuts import render, redirect
    from django.contrib import auth
    from django.contrib.auth.decorators import login_required
    from django.contrib.auth.models import User
    # Create your views here.
    
    
    # 登录
    def login(request):
        if request.method == "POST":
            user = request.POST.get("user")
            pwd = request.POST.get("pwd")
            user_obj = auth.authenticate(username=user, password=pwd)
            if user_obj:
                auth.login(request, user_obj)
                return redirect("/index/")
        return render(request, "login.html")
    
    
    @login_required
    # 登录后的页面
    def index(request):
        user_obj = request.user
        print(user_obj.username)
        print(request.user.is_authenticated)
        return render(request, "index.html", {"user": user_obj})
    
    
    # 注销Session,即用户
    def logout(request):
        auth.logout(request)
        return redirect("/login/")
    
    
    # 创建用户
    def reg(request):
        user_obj = User.objects.create_user(username="tom3", password="@WSX31234")
        ret = user_obj.check_password("@WSX3edc")
        print(ret)
        user_obj.set_password("@WSX1234")
        user_obj.save()
        return redirect("/login/")

    三、扩展auth_user的字段

    这里使用继承

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    # Create your models here.
    
    
    class User(AbstractUser):
        phone = models.CharField(max_length=11, default="11111111")
        addr = models.CharField(max_length=64, default="abc")

    配置文件setting.py

    # 继承auth_user的时候,需要设置
    AUTH_USER_MODEL = 'app名.类名r'

    重新运行 makemigrations 和 migrate命令 生成数据表

    若失败

    django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency app01.0001_initial on database 'default'

    本人用的是暴力删除

    求告知更好的方法

    继承auth_user后,需要对注册进行修改

    # 创建用户
    def reg(request):
        user_obj = models.User.objects.create_user(username="tom3", password="@WSX31234")
        ret = user_obj.check_password("@WSX3edc")
        print(ret)
        user_obj.set_password("@WSX1234")
        user_obj.save()
        return redirect("/login/")

      

  • 相关阅读:
    接口文档神器之apidoc
    ApiDoc 后端接口注释文档的使用
    Golang 数组和切片
    go切片展开
    Go的json解析:Marshal与Unmarshal
    golang depth read map
    golang 多级json转map
    GoLang中 json、map、struct 之间的相互转化
    利用delve(dlv)在Visual Code中进行go程序的远程调试-debug方式
    maximum-depth-of-binary-tree——找出数的最大深度
  • 原文地址:https://www.cnblogs.com/wt7018/p/11306457.html
Copyright © 2011-2022 走看看