使用POST数据进行身份验证后保存表单数据

时间:2013-03-15 17:39:37

标签: django

我有一个需要用户登录的视图。它将一些数据写入数据库,因此我使用request.method == 'POST'

查找表单提交

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

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

编辑: 这是我的观点:

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

2 个答案:

答案 0 :(得分:5)

  1. 您可能不应该让他们发布,直到他们通过身份验证。
  2. 如果您未接受未经身份验证的用户的POST,那么在执行某些提交操作之前,需要用户登录...
  3. 我会按照以下方式做点什么:

    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相同的模板,因此允许您显示错误。