求问,用Django做登录功能时发现一个bug,排查不出来是哪儿错了,求大佬指点
我使用了一个装饰器:
def check_login(func):
'''提供重定向登录的功能'''
def wrapper(self, request, *args, **kwargs):
# 利用session判断客户端的登录状态
if request.session.get('is_login', False):
# 已登录,继续使用原来的视图进行处理
return func(self, request, *args, **kwargs)
else:
# 未登录
next = request.get_full_path() # 把当前访问的 url 传递给 /login/
res = redirect('/login/?next=' + next)
return res
return wrapper
然后在登录视图中使用next这个参数:
class LoginView(View):
def get(self, request):
...
def post(self, request):
...
# 用户在登录界面提交的表单
username = request.POST.get('username')
# 数据库查询用户是否存在、进行密码验证
...
# 返回用户点击的界面
next = request.GET.get('next', '/')
# 重定向页面
return redirect(next)
然后这是用户中心界面的视图,使用前面的装饰器:
class LostView(View):
'''管理已挂失物界面'''
@check_login # 添加装饰器,用户未登录不能访问这个界面
def get(self, request):
return render(request, 'user_info.html')
用pycharm也查看了每次跳转后的值,发现这个next一直拿不到,然后登录时的地址栏是这样:
然后debug调试时是这样:
这个是路由文件:
![求问,用Django做登录功能时发现一个bug,排查不出来是哪儿错了,求大佬指点]
为什么得不到这个GET里的next参数呢?真的不知道哪里错了,百度也找不到有类似的答案,求各位大神解答
推荐文章: