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

    auth组件

    auth是帮助我们封装了注册,登录,安全验证,修改密码,安全退出于一体的模块,省了我们许多步骤。

    在我们生成表的时候会我们创建一张auth_user表,他是我们使用auth模块存放用户信息的地方。

    使用先导入模块:

    from django.contrib import auth

    登录使用authenticate()来连接auth_user表查找数据来验证前台发来的用户名和密码:

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

    数据比对成功后会有一个返回对象,并且这个对象在视图函数里可以使用,如果有值使用auth.log来设置cookie和session。

            if user_obj:
                    ####设置session
                    auth.login(request, user=user_obj)
                    作用:
                        1. 设置cookie, session
                        2. 生成request.user的对象, 这个对象可以在视图函数中使用 
                        3. request.user这个对象  相当于 request.session

    如果每一个视图函数都要进行身份验证的话,每次都写会烦人的,别人6点下班,你10点,解决这个问题使用装饰器呀。

    装饰器使用方法有两个,1  在函数上方使用装饰器,2  在全局配置验证跳转。两种方式大致上差不多,第二种方式不用再带上跳转的url。

    导入模块包:

    from django.contrib.auth.decorators import login_required

    1 函数上方使用:

    @login_required(login_url='/login/')
                    def index2(request):
                       return HttpResponse('index2')

    2  全局配置跳转,在settings中配置:

    LOGIN_URL = "/login/"

    函数上方使用:

    @login_required
                    def index3(request):
                        return HttpResponse('index3')

    注册

    导入模块:

    from django.contrib.auth.models import User

    向表中添加数据时,可以选择添加为超级用户和普通用户不同之处是超级用户必须填写电子邮箱地址。在表中数据字段上也有身份上的不同

        User.objects.create_superuser(username=username, password=pwd,  email='111@qq.com')
                        User.objects.create_user(username=username, password=pwd)

    具体示例:

    from django.contrib.auth.models import User
                def register(request):
                    if  request.method == 'GET':
                        return render(request, 'register.html')
                    else:
                        username = request.POST.get('username')
                        pwd = request.POST.get('pwd')
    
                        # User.objects.create(username=username, password=pwd)
                        User.objects.create_superuser(username=username, password=pwd,  email='111@qq.com')
                        User.objects.create_user(username=username, password=pwd)
    
                        return HttpResponse('successs')

    修改密码

    这个功能是要基于用户已经登陆成功以后才可以执行的。执行得大致思路为在前台让用户输入原先的密码,和新密码,后台

    先判断旧密码是否与表中的密码一致(request.user.check_password(old_password)),一致后修改成新密码(request.user.set_password),最后这里需要要进行保存(request.user.save)

    示例:

    - 修改密码
                @login_required(login_url='/login/')
                def modify(request):
                    if request.method == 'GET':
                        return render(request, 'modify.html')
                    else:
    
                        old_pwd = request.POST.get('old_pwd')
    
                        res = request.user.check_password(old_pwd)  ### 检测老密码
                        if res:
                            new_pwd = request.POST.get('new_pwd')
                            request.user.set_password(new_pwd)   ### 设置新密码
                            request.user.save()    #### 保存
    
                            return HttpResponse('ok')

    安全退出

    def logout(request):
                    auth.logout(request)
                    return HttpResponse('安全退出')
  • 相关阅读:
    Windows7防火墙服务无法启用怎么办
    asp.net实现md5加密方法详解
    php去除换行(回车换行)的方法
    MySQL函数大全
    php codebase生成随机数
    Tensorflow 的Word2vec demo解析
    深度学习课程部分资料整理
    稀疏矩阵表示
    Faster-rnnlm代码分析3
    Faster-rnnlm代码分析2
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/11222389.html
Copyright © 2011-2022 走看看