1

我有一个需要用户登录的视图。它将一些数据写入数据库,因此我使用以下方式查找表单提交request.method == 'POST'

流程是这样的:如果用户没有登录,他们会被重定向到登录页面。next登录后,我使用参数将它们重定向到我的初始视图。问题是重定向不再是 POST 而是 GET。

如何将此请求设为 POST?我应该使用其他模式来做到这一点吗?

编辑:这是我的看法:

@login_required
def some_view(request):
    if request.method == 'POST':
        # Do something
        return HttpResponseRedirect('some_url')
4

2 回答 2

5
  1. 在他们通过身份验证之前,您可能不应该让他们发布。
  2. 如果您必须接受来自未经身份验证的用户的 POST,但需要用户在执行某些提交操作之前登录...

我会按照以下方式做一些事情:

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 函数自动传递会话字典更可取。

于 2013-03-15T17:58:50.810 回答
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 相同的模板,因此允许您显示错误。

于 2013-03-15T17:49:54.267 回答