我有一个需要用户登录的视图。它将一些数据写入数据库,因此我使用request.method == 'POST'
流程如下:如果用户未登录,则会将其重定向到登录页面。登录后,我使用next
参数将它们重定向到我的初始视图。问题是重定向不再是POST而是GET。
如何将此请求设为POST?我应该使用其他模式来做到这一点吗?
编辑: 这是我的观点:
@login_required
def some_view(request):
if request.method == 'POST':
# Do something
return HttpResponseRedirect('some_url')
答案 0 :(得分:5)
我会按照以下方式做点什么:
def my_view(request):
if not request.user.is_authenticated():
if request.method == "POST":
request.session['post'] = request.POST
redirect_to_login(request.path)
else :
if request.method == "POST":
form = form_class(request.POST, request.FILES)
if form.is_valid():
# DO STUFF
else:
form = form_class(initial=request.session['post'] if 'post' in request.session else {})
基本上,将未经身份验证的帖子数据保存到您的会话中,并将其用作您重定向用户的表单的初始数据。是的,他们将不得不再次审核/点击提交按钮,但我认为这更适合通过表单的is_valid函数自动传递会话字典。
答案 1 :(得分:0)
这是通常的模式:
@login_required
def some_view(request):
if request.method == 'POST':
form = form_class(request.POST, request.FILES)
if form.is_valid():
# process form
return HttpResponseRedirect('some_url')
else:
form = form_class()
return render_to_response('template', {'form':form})
这要求用户登录才能访问该视图。用户登录后,他/她使用GET
方法访问视图。这会向用户显示表单。然后在他使用POST提交表单后,它将被验证。如果表单有效,则返回重定向,如果无效,请注意无效表单将传递给与GET相同的模板,因此允许您显示错误。