求问,用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,排查不出来是哪儿错了,求大佬指点]
求问,用Django做登录功能时发现一个bug,排查不出来是哪儿错了,求大佬指点

为什么得不到这个GET里的next参数呢?真的不知道哪里错了,百度也找不到有类似的答案,求各位大神解答

最佳答案

file 你这个没有错误吗,单词错了

3年前 评论
Bgods (作者) 3年前
startfall (楼主) 3年前
startfall (楼主) 3年前
Bgods (作者) 3年前
讨论数量: 5

file 你这个没有错误吗,单词错了

3年前 评论
Bgods (作者) 3年前
startfall (楼主) 3年前
startfall (楼主) 3年前
Bgods (作者) 3年前

你都定义了那是一个post请求,为啥还要用request.GET.get()来获取呢?不应该是request.POST.get()嘛。。。

3年前 评论
startfall (楼主) 3年前

我没有写完整,还是再添加一些代码的细节吧,其实我想要完成的就是用户点击用户中心时,判断用户有没有登录的功能,未登录的话就会跳转到登录的页面

3年前 评论

路由那个文件呢

3年前 评论

你 debug 调试时,那个请求是没有参数的,你前端发起的请求,是不是没有这个参数

3年前 评论
startfall (楼主) 3年前
Bgods (作者) 3年前
Bgods (作者) 3年前
Bgods (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!