request.POST.get()为空

时间:2018-06-28 04:22:46

标签: django

在views.py

@login_required(login_url='lab_3:login',redirect_field_name="next")
def myorders(request): 
    pass

我使用login_required重定向到参数为“ next”的登录。

class user_login(View):

    def post(self,request):
        from_order = request.POST.get('next','')
        username = request.POST.get('username','')
        password = request.POST.get('password','')
        user = authenticate(username=username, password=password)

        current_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))

        if user:
            if user.is_active:
                login(request, user)
                request.session['last_login'] = current_time
                request.session.set_expiry(60*60)

                if from_order:
                    order_list = Order.objects.filter(client=user).all()
                    return render(request,'myapp/myorders.html',{
                        'order_list':order_list,
                    })
                return render(request,'myapp/index.html',{
                    'user':user,
                })
            else:
                return HttpResponse('Your account is disabled.')
        else:
            return HttpResponse('Invalid login details.')

    def get(self,request):
        from_order = request.GET.get('next', '')
        return render(request, 'myapp/login.html')

我使用Debug来检查user_login视图,发现request.GET.get()可以从myorders视图获取参数。但是request.POST.get始终为空。

1 个答案:

答案 0 :(得分:2)

这是因为login_required执行简单的重定向到登录页面。它不执行发布请求,并且由于不提供任何发布数据。这就是为什么重定向后登录视图中的request.POST为空。

仍然可以将next GET参数添加到登录网址中,如下所示:/accounts/login/?next=/polls/3/,您可以在request.GET视图中使用login看到它。

要用数据填充request.POST,您应该添加并提交登录表格:

<form action='' method='post'>
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" value="Post data">
</form>