Liu Harry
Liu Harry

Reputation: 49

request.POST.get() is empty

In views.py

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

I used login_required to redirect to login with parameter "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')

I used Debug to check the user_login view and I find request.GET.get() can get the parameter from myorders view. But the request.POST.get is always empty.

Upvotes: 1

Views: 1486

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47354

This is because login_required perform simple redirection to login page. It's not perform post request and since doesn't provide any POST data. That's why request.POST in your login view is empty after redirection.

It's can add next GET argument nevertheless to the login url like this: /accounts/login/?next=/polls/3/ which you can see using request.GET in your login view.

To populate request.POST with data you should add and submit login form:

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

Upvotes: 1

Related Questions