zoukankan      html  css  js  c++  java
  • Auth模块

    一.Auth模块是干什么的

    它是Django自带的一个强大的用户认证的模块,用户系统相关的功能,注册登录,用户认证,注销,修改密码.

    二.Auth模块常用的有哪些方法?

    介绍方法之前先写一个功能通过功能来更好的认识Auth模块

    创建炒鸡用户,用来登陆django admin的后台管理

    createsuperuser
    
    

    密码输入大于8位,Django中创建用户的时候默认的密码字节数量是大于8位的.

    模块导入

    from django.contrip import auth
    

    搭建好html文件

    登录

    先放完整代码

    from django.shortcuts import render.HttpResponse,redirect
    from djang.contrip import auth
    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            # models.User.objects.filter(username=username,password=password).first()
            # user_obj = auth.authenticate(username=username,password=password)
            # user_obj = auth.authenticate(username=username)
            # is_alive = User.objects.filter(username=username)
            #
            # print(is_alive)
            # print(is_alive.first().password)
            """
            该方法会有一个返回值  当条件存在的情况下 返回就是数据对象本身
            条件不满足 直接返回None
            """
            # if user_obj:
            #     print(user_obj)
            #     print(user_obj.username)
            #     print(user_obj.password)
            #     # 一定要记录用户状态 才算真正的用户登录
            #     # request.session['user'] = user_obj
            #     auth.login(request,user_obj)
            #     """该方法会主动帮你操作session表 并且只要执行了该方法
            #     你就可以在任何位置通过request.user获取到当前登录的用户对象
            #     """
            #     old_path = request.GET.get('next')
            #     if old_path:
            #         return redirect(old_path)
            #     else:
            #         return redirect('/home/')
        return render(request,'login.html')
            
    

    1.authenticate()认证

    提供用户认证功能,直接去数据找真实数据验证跟用户输入的用户名以及密码是否正确,如果认证成功则返回一个数据对象,认证失败就返回None.一般需要username,password两个关键字参数

    配置{% csrf_token %}即可

    2.login(request,user) 保存登录状态

    改函数接受request,以及经过认证后的存在user对象,这个函数会在后端为这个用户生成相关的session数据. 而知执行完之后只要能拿到request的地方都能通过request.user获取到当前登录用户的对象.

    3.is_authenticated()

    判断当前的用户是否通过了认证.

    4.logout(request)退出登录

    该函数没有返回值,调用这个函数,请求的session信息会全部清除,而且使用这个函数也不会报错.

    from django.contrib.auth import logout
    
    def logout_view(request):
        logout(request)
        # Redirect to a success page.
    

    5.login_required()校验装饰器

    装饰器工具,快捷给FBV视图添加登录校验.

    在用户没有登陆的情况下跳转的url有全局配置和局部配置

    1. 在装饰器括号内通过login_url参数局部指定跳转url

    2. 全局配置的话,用户没有登录的情况下,所有的视图统一跳转到一个url配置文件中

    form django.contrip.decorators import login_required
    #@login_required(login_url='/xxx/') # 局部配置
    @login_required# 全局配置
    def my_view(request):
        ...
    

    CBV视图添加登录校验

    from django.contrib.auth.decorators import login_required
    from django.utils.decorators import method_decorator
    
    class Home(views.View):
    
        @method_decorator(login_required)
        def get(self, request):
            return render(request, 'home.html')
    

    6.check_password(password) 与set_password(password='') 检验设置密码

    检验密码是否正确的方法,返回bool值

    rt = user.check_password()
    

    修改密码,设置完一定要保存密码(新密码也可以为对象)

    user.set_password(password=new_password)
    user.save()
    

    7.用户注册

    from djang.contrip.auth.models import User

    使用create会密码直接存成明文

    User.objects.create(username=username,password=password)

    创建普通用户是加密的

    User.objects.create_user(username=username,password=password)
    

    创建炒鸡用户,邮箱必须填写

            User.objects.create_superuser(username=username,password=password,email='123321@qq.com')  
    

    三.User对象的属性

    username,password

    is_staff : 用户是否拥有网站的管理权限.

    is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录

    四.扩展默认表auth_user的字段

    虽然django自带的auth模块很好用,但是他默认创建的auth_user表我们不能对其进行操作,那么怎么才能既可以使用auth简便的功能又可以进行表内字段的修改,扩展呢?

    这时候我们就应该想到使用继承,类的三大特性之一.操作如下

    继承

    • 写一个默认类继承原来的auth_user类(自定义的表中字段不能跟原有的字段冲突)

    • 告诉Django使用新建的类(在settings配置文件中)替代auth_user表

  • 相关阅读:
    UVA 12697 Minimal Subarray Length
    学渣乱搞系列之后缀数组
    HDU 3518 Boring counting
    NYOJ 832 合并游戏
    如何在SAP里创建configurable material物料主数据
    在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩
    使用SAP C4C rule editor动态控制UI上某个按钮是否显示
    ABAP SICF服务和Java Servlet的比较
    一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍
    Java实现的有道云笔记图片批量下载工具
  • 原文地址:https://www.cnblogs.com/jhpy/p/11774039.html
Copyright © 2011-2022 走看看