求问,用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

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

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

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

3年前 评论

路由那个文件呢

3年前 评论

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

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

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

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

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