2017-09-16 4 views
0

Ich wollte Funktion haben, dass jedes Mal die Anfrage erhalten und prüfen, ob die Benutzeranmeldung ist und dann Benutzerobjekt zurück, wenn Benutzer anmelden anderweitig anmelden umleiten, so ist dies, was ichdjango Umleitung funktioniert nicht

versucht zu tun
def is_login(request): 
    userID = request.session.get('mainSession', 0) 
    next = resolve(request.path_info).url_name 
    print(1) 
    if userID != 0: 
     print(2) 
     user = msignup.objects.filter(id=userID).first() 
     return user 
    print(3) 
    return HttpResponseRedirect(reverse('login') + "?next= 
{}".format(next)) 

ich habe versucht, diese Funktion mit unten Ansicht zu testen, wenn Benutzer loged aus und Anfrage hat keine mainSession:

def email_activation(request): 
    user = is_login(request) 
    print(4) 
    email = user.email 
    return render(request, 'account/emailActivation.html',{'email': 
email}) 

und als Antwort bekam ich dies: ‚HttpResponseRedirect‘ Objekt kein Attribut ‚E-Mail‘ hat

und die Antwort für Drucke, die ich gemacht hatte:

  • warum nach 3 Umleitung geschieht nicht, was mache ich falsch?

+0

Warum sollte es? Sie rufen 'is_login' von' email_activation' auf und geben ein Umleitungsobjekt zurück. Aber die Ansicht geht dann mit dem Rest des Codes weiter, den Sie geschrieben haben. –

+0

also gibt es eine Möglichkeit, dass ich diese Umleitung geschehen lassen, wenn nein, was ist Ihr Vorschlag für dieses Problem? – Saro

Antwort

0

Zunächst einmal. Django hat ein paar Möglichkeiten, dies eingebaut zu machen. Ich empfehle Ihnen dringend, etwas zu verwenden, das bereits hergestellt wurde. Der login_required Decorator würde gut für Ihren Anwendungsfall funktionieren.

https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.decorators.login_required

Nun, wenn das, was Sie tun, ist ein Experiment. Das Problem, das Sie haben, besteht darin, dass Sie das Antwortumleitungsobjekt auf is_login zurückgeben. Was Sie tun könnten, um dies zum Laufen zu bringen (ich empfehle Ihnen erneut, nicht mit dieser Route zu gehen), machen Sie eine andere Funktion, die auf die Anmeldeseite umleitet, und die is_login Funktion gibt nur wahr oder falsch zurück, wenn der Benutzer sich anmeldet oder nicht .

Dann werden Sie in der Lage sein, so etwas zu tun:

if not is_login(request): 
    return redirectToSigninPage(request) 
+0

verwenden wir nicht django in User-Modell gebaut, so kann ich nicht diese Login_required Dekorator verwenden, und ich bin damit einverstanden, dass Sie second Funktion schreiben ist nicht wie eine richtige Lösung – Saro