2017-12-03 11 views
1

Ich erstelle ein Formular mit Django Auth Formulare UserCreationForm und es funktioniert ohne 'Aktion' innerhalb. Warum funktioniert es?Warum benötigt ein Formular keine Aktion? 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> 

Antwort

3

Da Ihr Browser das Formular an die aktuelle URL wird standardmäßig veröffentlichen. Wenn Ihre Ansichts- und Beitragsansicht die gleiche URL enthält, funktioniert sie einfach.

Und das ist natürlich hier der Fall, da Sie die gleiche Ansicht für POST und GET verwenden.

+0

Vielen Dank. Ich habe noch eine Frage. Funktioniert es auf alten Browsern (wie IE5-8). Oder in der Praxis besser "Aktion" klar definieren? –

+1

wow, das alte ... :-) Um sicher zu sein, füge die Aktion hinzu, es wird nicht weh tun. In HTML4 ist das Attribut 'action' obligatorisch und sollte ein gültiger URI sein, andernfalls ist das Verhalten offiziell undefiniert. Ich denke eine leere Zeichenfolge als Aktion ist in den meisten Browsern für eine lange Zeit auf die aktuelle URL zurückgegangen, aber ich würde meine Wetten nicht auf IE5-8 machen. – dirkgroten

1

Wie von @dirkgroten gesagt, ist es in HTML5 nicht zwingend erforderlich, Formularaktion in solchen Fällen wie bei Ihnen anzugeben, ohne dass eine Aktion angegeben wurde. Das Formular wird an die aktuelle URL gesendet.