2016-03-19 7 views
0

Diese Frage könnte zu einem Duplikat und/oder zu langweilig erscheinen. Ich habe bereits this, this, this, this und this Fragen & Antworten gelesen. Aber konnte keine Lösung finden, passt zu meinem Problem.Die Ansicht gab None zurück (kein HttpResponse-Objekt zurückgegeben)

Ich bin neu in Django Framework. Um es zu lernen, möchte ich einen einfachen Blog erstellen. Wenn der Benutzer klickt Register Taste (nach erforderlichen Felder ausfüllen), folgende Fehler ausgelöst:

Valueerror bei/user/register/Die Ansicht user.views.register hat nicht return ein Httpresponse-Objekt. Es gab stattdessen keine zurück.

views.py

def register(request): 
    """ 
    Registers new user. 
    """ 
    if request.POST: 
     if request.method == 'POST': 
      personal_info = UserFormModel(request.POST) 
      if personal_info.is_valid(): 
       email = personal_info.cleaned_data['email'] 
       username = personal_info.cleaned_data['username'] 
       if User.objects.filter(email=email).exists(): 
        return HttpResponse('email error') 
       elif User.objects.filter(username=username).exists(): 
        return HttpResponse('username error') 
       else: 
        return HttpResponse('saved') 
    else: 
     personal_info = UserFormModel() 
     return render_to_response('user/registration.html', 
          { 
           'title': 'Registration', 
           'username_error': 'Sorry, someone already has that username.', 
           'personal_info': personal_info, 
          }, 
          context_instance=RequestContext(request)) 

Bei Bedarf kann ich alle Dateien Inhalte teilen.

Jeder hilfreiche Kommentar oder Antwort wäre willkommen.

+1

Was bedeutet die Ansicht Rückkehr, wenn 'personal_info.is_valid()' nicht wahr ist? –

+0

Was passiert, wenn personal_info nicht gültig ist? – snakecharmerb

+0

Ich vergaß fangen, dass :) Danke :) –

Antwort

0

In Zeile if personal_info.is_valid():

wenn persönliche Daten nicht gültig ist, wird es keine Rückkehr. (Rückkehr nichts)

einen anderen Zustand hinzuzufügen, da Sie keinen Fall umgehen.

if personal_info.is_valid(): 
    # code here 
else: 
    return HttpResponse('personal info provided not valid') 

Eines der besseren Möglichkeiten, Situationen wie diese zu behandeln aus nicht auftritt, ist ein Wörterbuch für Statusmeldung zu halten und Ergebnis zu Beginn der Funktion initialisiert und kehren nur an einer einzigen Stelle statt an mehreren der Rückkehr Orte und speichern Ergebnis in result_dict.

result_dict = {'status': False}

und kehren immer am Ende der Funktion

return HttpResponse(json.dumps(result_dict))

diese Weise werden Sie nie einen Fall bei der Rückkehr Werte verfehlen.

So Schluss Code sollte wie folgt aussehen

def register(request): 
    """ 
    Registers new user. 
    """ 
    result_dict = {'status': False} 
    if request.POST: 
     if request.method == 'POST': 
      personal_info = UserFormModel(request.POST) 
      if personal_info.is_valid(): 
       email = personal_info.cleaned_data['email'] 
       username = personal_info.cleaned_data['username'] 
       if User.objects.filter(email=email).exists(): 
        result_dict['message'] = 'email error' 
       elif User.objects.filter(username=username).exists(): 
        result_dict['message'] = 'username error' 
       else: 
        result_dict['message'] = 'saved' 
        result_dict['status'] = True 
     else: 
      result_dict['message'] = 'personal info provided not valid' 
    else: 
     personal_info = UserFormModel() 
     return render_to_response('user/registration.html', 
          { 
           'title': 'Registration', 
           'username_error': 'Sorry, someone already has that username.', 
           'personal_info': personal_info, 
          }, 
          context_instance=RequestContext(request)) 

    return HttpResponse(json.dumps(result_dict)) 
+0

Würde das Feedback und Probleme mit der Antwort zusammen mit der Abstimmung unten, wäre mir auch hilfreich :) –

+0

Vielen Dank. Es hat mir geholfen, mein Problem zu lösen. –

+0

@MirjalalTalishinski Sie sind willkommen, Sie können es auch als richtig markieren :) –

Verwandte Themen