2016-04-01 3 views
1

Ich mache ein Registrierungssystem für meine Django-Website und dieses Registrierungsformular funktioniert nicht. Ich weiß nicht warum, ich fülle das Formular aus und es tut nichts. Es wird nicht auf meine register_success Seite weitergeleitet. Hier ist mein Code, damit Sie das Problem diagnostizieren können.Wie diagnostiziert man ein Django-Registrierungsformular, das scheinbar nichts zu tun hat?

Views.py:

def register_user(request): 
    if request.method == 'post': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register_success') 

    args = {} 
    args.update(csrf(request)) 
    args['form'] = UserCreationForm() 
    print(args) 
    return render_to_response('register.html', args) 


def register_success(request): 
    return render_to_response('register_success.html') 

register.html:

<html> 
<body> 
{% block content %} 
    <h2>Register</h2> 
    <form action="/accounts/register/" method="post">{% csrf_token %} 
     {{ form }} 
     <input type="submit" value="Register"/> 
    </form> 
{% endblock %} 
</body> 
</html> 

Register_success.html:

<html> 
<body> 
{% block content %} 
    <h2>You have registered</h2> 
    <p>Click <a href="/accounts/login/">here</a> to login.</p> 
{% endblock %} 
</body> 
</html> 
+0

Gibt es einen Fehler, den Sie bekommen? – v1k45

Antwort

4

Das Problem ist, dass Sie immer ein leeres Formular zu erstellen. Das bedeutet, dass in Ihrem Formular keine Fehler angezeigt werden.

Sie können dies beheben, indem Sie Ihre Ansicht wie folgt ändern.

from django.shortcuts import render 

def register_user(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register_success') 
    else: 
     form = UserCreationForm() 

    return render(request, 'register.html', {'form': form}) 

Beachten Sie, dass die erste if-Anweisung if request.method == 'POST': sein sollte, wie yedpodtrzitko in ihrer Antwort gesichtet. Ich habe von der veralteten render_to_response zu render gewechselt, was die Dinge vereinfacht. Ich empfehle Ihnen, auch Ihre Erfolgsansicht zu aktualisieren.

def register_success(request): 
    return render(request, 'register_success.html') 
+0

Danke. Alle arbeiten jetzt: D –

2

Der Wert von request.methodPOST sein sollte, nicht post (Groß- vs. klein geschrieben).

Ich würde Ihnen empfehlen, klassenbasierte Ansichten zu verwenden, Sie werden nicht so viel Code schreiben müssen, und es wird synoptischer sein.

+0

Danke. Ja, ich verwende klassenbasierte Ansichten meiner anderen Sichten-Datei. –

Verwandte Themen