• django实现自定义登陆验证


    django实现自定义登陆验证


    • 自定义装饰器函数和类
    •  1 from utils.http import HttpResponseUnauthorized
       2 from django.views import View
       3 
       4 
       5 
       6 
       7 # 登陆校验装饰器   函数视图校验
       8 def login_require(func):
       9     def wrapper(request):
      10 
      11         # 校验session中是否存在login_flag
      12         login_flag = request.session.get('login_flag')
      13 
      14         if not login_flag:
      15             return HttpResponseUnauthorized('用户未登录')
      16 
      17         result = func(request)
      18         return result
      19 
      20     return wrapper
      21 
      22 
      23 # 登陆校验视图类    类视图校验
      24 class LoginRequireMixin(View):
      25     @classmethod
      26     def as_view(cls, **initkwargs):
      27         # 对父类的as_view进行改写并封装
      28         view = super(LoginRequireMixin, cls).as_view(**initkwargs)
      29         return login_require(view)
    • HttpResponseUnauthorized
      1 from django.http import HttpResponse
      2 
      3 
      4 
      5 class HttpResponseUnauthorized(HttpResponse):
      6     status_code = 401
    • 具体使用
    •  1 # 保存成绩
       2 @login_require
       3 def saveScore(request):
       4     if request.method == 'POST':
       5 
       6         open_id = request.POST.get('open_id')
       7         nickName = request.POST.get('nickName')
       8         gameType = request.POST.get('gameType')
       9         spendTime = request.POST.get('spendTime')
      10         ageType = request.POST.get('ageType')
      11 
      12         if not all([open_id, nickName, gameType, spendTime, ageType]):
      13             date = {'success': False, 'info': '请求数据不完整'}
      14             return JsonResponse(date)
      15 
      16         if request.session.get('openId') != open_id:
      17             data = {'success': False, 'info': '请求玩家和使用玩家不一致'}
      18             return JsonResponse(data)
      19 
      20         Score(open_id=open_id, nickName=nickName, gameType=gameType, spendTime=spendTime, ageType=ageType).save()
      21         data = {'success': True, 'info': '保存成功!'}
      22         return JsonResponse(data)
      23 
      24     return HttpResponseForbidden('Method not allowed')
      25 
      26 
      27 # 分类成绩查询
      28 class RankingQuery(LoginRequireMixin):
      29 
      30     def post(self, request):
      31         queryType = request.POST.get('queryType')
      32         offset = request.POST.get('offset')
      33 
      34         if not all([queryType, offset]):
      35             data = {'success': False, 'info': '数据不完整'}
      36             return JsonResponse(data)
      37 
      38         queryTypeRoute = {
      39             'byScore': self.queryByScore
      40         }
      41         if queryType not in queryTypeRoute:
      42             return HttpResponseBadRequest('unsupport queryType')
      43 
      44         func = queryTypeRoute['queryType']
      45         data = func(offset)
      46 
      47         return JsonResponse(data)
  • 相关阅读:
    两个栈实现一个队列
    DacningLinks实现
    boost::implicit_cast
    hibernate查询之Criteria实现分页方法(GROOVY语法)
    VS2015 android 设计器不能可视化问题解决。
    当Eclipse爱上SVN
    你不知道的getComputedStyle
    推荐的软件
    React之表单
    理解javascript中的Function.prototype.bind
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/11120592.html
Copyright © 2020-2023  润新知