2017-12-03 22 views
1

djangoの認証フォームUserCreationFormを使用してフォームを作成しますが、内部に 'action'がなくても動作します。それはなぜ機能するのですか?フォームに「アクション」は必要ないのはなぜですか? UserCreationForm

views.py

def sign_up(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      username = form.cleaned_data.get('username') 
      password = form.cleaned_data.get('password1') 
      user = authenticate(username=username, password=password) 
      login(request, user) 
      return redirect('contacts:index') 
    else: 
     form = UserCreationForm() 
    return render(request, 'account/signup.html', {'form': form}) 

sgnup.html

<h2>Sign up</h2> 
<form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit">Sign up!</button> 
</form> 

答えて

3

デフォルトでは、ブラウザは、現在のURLにフォームを掲載しますので。したがって、あなたのビューとポストビューを取得する場合、同じURLを共有するだけで動作します。

POSTとGETで同じビューを使用しているので、明らかです。

+0

ありがとうございます。もう一つ質問があります。古いブラウザでも動作しますか?(IE5-8など)実際には「行動」を明確に定義する方が良いでしょうか? –

+1

うわー、その古い... :-)確かに、アクションを追加するには、それは傷つくことはありません。 HTML4では、 'action'属性は必須であり、有効なURIでなければなりません。そうでなければ、動作は正式には定義されていません。私はアクションとして空の文字列が長い時間、ほとんどのブラウザで現在のURLに落ちたと思うが、私はIE5 - 8に自分の賭けを配置しないだろう。 – dirkgroten

1

@dirkgrotenが述べたように、HTML5では、あなたのような場合はアクション指定なしでフォームアクションを指定する必要はありません。フォームは現在のURLにポストされます。

関連する問題