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 に答える