zoukankan      html  css  js  c++  java
  • auth组件

    auth组件介绍

    auth组件的主要作用就是替我们处理一些登录、注册、验证登录、安全退出的一些功能,

    一旦你使用了系统提供的组件,如果不做任何更改,我们的用户信息都会被存到固定的表中auth-user,

    而表中的字段也是固定的

    auth组件功能

    登录

    from django.contrib import auth
    from django.contrib.auth.models import User
    # 首先导入系统的auth组件和auth组件中user的模型表
    def login(request):
        if request.method == 'GET':
            return render(request,"login.html")
        else:
            username = request.POST.get("username")
            password = request.POST.get("password")
    
            user = auth.authenticate(request, username=username, password=password)
            # 参数传入用户名和密码,他会去系统表中进行查找,有相同的返回对象,没有就返回None
            if user:
                auth.login(request, user)
                # 调用login系统相当于做了以下三部
                #   1.设置session和cookie
                #   2.生成request.user对象,这个对象是可以在函数视图中使用的(详情见auth中间件)
                #   3.request.user 相当于request.session 
                return render(request, "blog.html")

    验证

    # 认证有三种方式
    #   1.在需要认证的函数中认证
    def authority(request):
        is_login = request.user.is_authenticated()
    # 如果已经登录就会返回True  没有就返回False
    
    # 2.通过装饰器把认证失败后跳转的url传入
    from django.contrib.auth.decorators import login_required
    # 导入装饰器
    @login_required(login_url="/test/")
    def authority(request):
        pass
    
    # 3.全局设置url,不用传参
    # 在settings.py 中配置  LOGIN_URL = "/test/"
    @login_required
    def authority(request):
        pass

    注册

    def register(request):
        if request.method == 'GET':
            return render(request, "register.html")
        else:
            username = request.POST.get("username")
            password = request.POST.get("password")
            user = User.objects.filter(username=username).first()
            # 可以通过这种filter查看是否有该用户名的用户
            if user:
                return HttpResponse("用户名已存在")
            else:
                # 创建普通用户账号
                User.objects.create_user(username=username, password=password)
                # 创建超级用户账号
                User.objects.create_superuser(username=username, password=password)
                return HttpResponse("登录去吧")

    修改密码

    @login_required
    def modify(request):
        # 这里时get请求处理,省略
        oldpwd = request.POST.get("oldpwd")
        newpwd = request.POST.get("newpwd")
        # 判断旧密码是否正确
        res = request.user.check_password(oldpwd)
        if res:
            request.user.set_password(newpwd)
            request.user.save()     # 强调:修改完密码一定要保存,不然不会成功
            return HttpResponse("ok")
        return HttpResponse("oldpwd 错误")

    安全退出

    @login_required
    def logout(request):
        auth.logout(request)     # 会把你缓存和数据库中的session都清除掉
        return HttpResponse("退出完成")

    拓展auth表的字段

    1. 创建另一张表和auth表一对一关联

    from django.db import models
    from django.contrib.auth.models import User
    class NewUser(models.Model):
        salary = models.CharField(max_length=32, null=True)
        user = models.OneToOneField(to="User")

    2. 面向对象,继承auth的表模型

    from django.contrib.auth.models import AbstractUser
    
    class NewUser(AbstractUser):
        salary = models.CharField(max_length=32, null=True)
    # 并且需要在settings里设置不使用默认的auth表,而是使用我们自己的表
    # AUTH_USER_MODEL = "app名.models里对应的模型"
    AUTH_USER_MODEL = "app01.NewUser"
  • 相关阅读:
    mysql数据库函数 concat 字段类型转化、字段拼接
    SSH2中的No result defined for action的问题
    导致表单重复提交(两次)的原因--css{url()}与a标签
    详解jar命令打包生成双击即可运行的Java程序
    21IO流 和缓冲流 和处理流
    20File
    19(1)hashmap,hashtable
    IntelliJ IDEA注册码激活
    19映射
    18泛型
  • 原文地址:https://www.cnblogs.com/hesujian/p/11222810.html
Copyright © 2011-2022 走看看