当前位置:   article > 正文

Django使用中间件实现用户登录功能出现重复跳转的问题及解决方法_django 重复登录问题如何解决

django 重复登录问题如何解决

先看一下出错的代码

  1. # 中间件
  2. class AuthMiddleware(MiddlewareMixin):
  3. def process_request(self, request):
  4. print(request.path)
  5. print(request.session.get('is_log'))
  6. if request.path != '/oa/login':
  7. if request.session.get('is_log'):
  8. return redirect('/oa/dashboard')
  9. else:
  10. return redirect('/oa/login')
  11. else:
  12. return

 

  1. # view
  2. class Login(View):
  3. def get(self, request):
  4. return render(request, 'website/signin.html')
  5. def post(self, request):
  6. res = {'status': 'succ'}
  7. user_name = request.POST.get("name", None)
  8. password = request.POST.get("password", None)
  9. re_log = request.POST.get("remember", None)
  10. if user_name == 'root' and password == '123':
  11. # 设置session
  12. request.session['user'] = user_name
  13. request.session['is_log'] = True
  14. # 如果选择记住状态则保持一周的session信息
  15. if re_log == 1:
  16. request.session.set_expiry(1209600)
  17. res['status'] = 'succ'
  18. else:
  19. res['status'] = '密码错误'
  20. return HttpResponse(json.dumps(res), content_type="application/json")
  21. class Dashboard(View):
  22. def get(self, request):
  23. db = DataBase()
  24. data = db.dashboard()
  25. return render(request, 'website/dashboard.html', {'data': data})

访问效果:

登录成功之后一直出现重复的跳转问题。

我们在来重新审视一下代码:
首先我们登录成功之后访问/oa/dashboard这个页面,然后在中间间的处理过程中由于第一个if判断和第二个if判断都满足导致再次跳转到oa/dashboard页面一直重复。而且在访问其他页面的时候依然是一直跳转dashboard这个页面的,逻辑有误。

解决方法:在验证用户登录之后的session之后直接return掉而不是进行跳转。

  1. class AuthMiddleware(MiddlewareMixin):
  2. def process_request(self, request):
  3. if request.path != '/oa/login':
  4. if request.session.get('is_log'):
  5. return
  6. else:
  7. return redirect('/oa/login')
  8. else:
  9. return

之前逻辑没看清,现在突然发现这个问题好傻逼
 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/592944
推荐阅读
  

闽ICP备14008679号