Reputation: 49
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
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