zoukankan      html  css  js  c++  java
  • django自定义实现登录验证-更新版

    django自定义实现登录验证


    • django内置的登录验证必须让开发者使用django内置的User模块,这会让开发者再某些方面被限制住
    • 下面的模块是我自己自定义实现的django验证,使用方式和django的一样
    •  1 from django.http import HttpResponse
       2 from django.shortcuts import redirect
       3 from django.conf import settings
       4 from django.views import View
       5 
       6 
       7 class HttpResponseUnauthorized(HttpResponse):
       8     status_code = 401
       9 
      10 
      11 def login(request, user):
      12     request.session['login'] = user.id
      13 
      14 
      15 def logout(request):
      16     request.session.flush()
      17 
      18 
      19 def login_required(func):
      20     """
      21     对需要登录的视图函数进行验证
      22     @login_required
      23     def your_view(request, *args, **kwargs):
      24         ''''''
      25     """
      26 
      27     def wrapper(*args, **kwargs):
      28         request = args[0]
      29         is_login = request.session.get('login')
      30 
      31         if not is_login:
      32             redirect_url = '%s?next=%s' % (settings.LOGIN_URL, request.path)
      33             return redirect(redirect_url)
      34         else:
      35             result = func(*args, **kwargs)
      36             return result
      37 
      38     return wrapper
      39 
      40 
      41 class LoginRequired(View):
      42     """
      43     对需要登录的类视图进行验证
      44     class YouView(LoginRequired):
      45         ''''''
      46     """
      47 
      48     @classmethod
      49     def as_view(cls, **initkwargs):
      50         view = super(LoginRequired, cls).as_view()
      51         return login_required(view)
    • 当验证用户名密码成功后,使用login登入一个用户,将request,和登录后的user对象(model的实例)传进去, 即可记录下当前用户的登录状态
    • 退出用户直接将session清除即可。
    • 对于函数视图,用装饰器对函数视图进行装饰:
      • 判断当前的请求request里面的session有没有被login生成一个key为'login'的值:
        • 如果没有则跳转到登录页面
        • 有则进行正常访问
    • 类视图调用的是as_view方法,可以在urls里面对该url对应的类视图的as_view用login_required进行调用,这种方法比较繁琐,代码可读性查
    • 对于类视图,因为类视图最后都要调用as_view方法,可以重新写一个类来继承View,重写View的as_view方法。
      • 调用父类的as_view方法,将返回的view对象用login_required进行调用,最后实现了类方法的验证
  • 相关阅读:
    如何降低微服务测试成本?我的经验之谈
    Serverless 在 SaaS 领域的最佳实践
    技术干货 | “选图预览并上传”的场景如何解?全网最全方案汇总来了
    SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台
    DTCC 2020 | 阿里云王涛:阿里巴巴电商数据库上云实践
    中值滤波算法 C
    python logger.debug_python中的logger模块讲解
    唯一值
    接触jeecgBoot低代码开发
    php数字操作
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/11188169.html
Copyright © 2011-2022 走看看