2016-08-17 10 views
1

Nach der erfolgreichen Registrierung wird der Benutzer auf die Vorlage 'registration_done.html' umgeleitet.Django Registrierung | Verhalten ändern

Gibt es eine Möglichkeit, dieses Verhalten zu ändern, um den Benutzer auf die Registrierungsseite umzuleiten und eine Nachricht anzuzeigen?

Ich habe versucht, diese Code unten auch verschiedene Möglichkeiten, um es zu ändern, sondern haben verschiedene Arten von Fehlern in verschiedenen Fällen.

urls.py

url(r'^register/$', 
     views.register, 
     { 
      'success_url': '/accounts/register/?success=true' 
     }, 
     name='register'), 

view.py

def register(request): 
    if request.method == 'POST': 
     user_form = UserRegistrationForm(request.POST) 
     if user_form.is_valid(): 
      # Create a new user object but avoid saving it yet 
      new_user = user_form.save(commit=False) 
      # Set the chosen password 
      new_user.set_password(user_form.cleaned_data['password']) 
      # Save the User object 
      new_user.save() 
      success = request.GET.get('success', None) 
      return render(request, {'new_user': new_user, 'success': success}) 
    else: 
     user_form = UserRegistrationForm() 
    return render(request, 'account/register.html', {'user_form': user_form}) 

registration.html:

{% if success %} 
     <p>{% trans 'Successfull registration!' %}</p> 
{% endif %} 

Was ich falsch hast du ?!

Fehler:

Traceback (most recent call last): 
    File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
TypeError: register() got an unexpected keyword argument 'success_url' 
[18/Aug/2016 14:17:55] "GET /en/account/register/ HTTP/1.1" 500 59886 
+0

Was sind die Fehler? –

+0

Mit Code, den Sie in der Post sehen können, habe ich diesen Fehler 'TypeError at/account/register/ register() bekam ein unerwartetes Keyword-Argument 'success_url'' aber gibt es irgendwelche guten Möglichkeiten, meine Aufgabe zu machen ?! Wie denkst du?! –

+0

hier ist, was ein Stack-Trace aussieht wie https://camo.githubusercontent.com/b26cf0dfe73d3bbf2e74fcae277c0b667930366f/687474703a2f2f692e696d6775722e636f6d2f326749644f4e352e706e67 –

Antwort

1

Sie versuchen die kwarg success_url auf Ihre Funktion register

Ihre Funktion register(request) nur ein Argument akzeptiert weitergeben müssen: 'Antrag'.

So können Sie ein zweites Argument akzeptieren, sagen success_url, wie so

def register(request, success_url): 
    ... 

Aber es hat keinen Sinn zu tun, dass, wenn success_url eine Konstante ist. In diesem Fall definiert es einfach Ihre Registerfunktion

def register(request): 
    success_url = 'foo' 

Ein weiterer Punkt ist, dass Sie reverse that url wollen, anstatt hart Code es.

Auch ich bin nicht sicher, warum Sie diese nutzen möchte:

success = request.GET.get('success', None) 

Jeder Benutzer ihren eigenen Erfolg Variable in der GET-Anfrage einreichen konnten. Erwarten Sie das von einem Formular? Sieht wie eine Sicherheitslücke aus, wenn der Benutzer nur sagen kann, dass in request.GET erfolgreich war.

Momentan rendern Sie tatsächlich keine Vorlage für den Erfolg, weil Ihnen ein Vorlagenname/-pfad von Ihrem ersten render Aufruf fehlt.

Also entweder eine Vorlage hinzufügen oder sie auf eine andere Seite umleiten.

+0

Nun, es ist natürlich traurig.Ich habe versucht, zur Registrierungsseite nach dem erfolgreichen Register umzuleiten, aber Formular ist verschwunden, aber ich habe Nachricht. Erscheint merkwürdig. –

+0

Wie hast du versucht umzuleiten? –

+0

Ich habe versucht, mit diesem einen 'Rendern Rendern (Anfrage,' account/register_done.html ', {' new_user ': new_user,' Erfolg ': Erfolg}) ' –

Verwandte Themen