在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始终为空。
答案 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>