Piszę funkcję sterowania activate, aby potwierdzić e-mail użytkownika i jego kod aktywacyjny.

def activate(request, a_code):
    """
    Activate User's Account by code from his email.
    """
    try:
        user = User.objects.get(activatecode__code=a_code)
        user.is_active = True
        context = {}
        return render(request, "user/success.html", context)
        time.sleep(5)
        return redirect("/")
    except DoesNotExist:
        context = {}
        return render(request, "user/failure.html", context)

Po pomyślnym aktywowaniu swojego konta zostanie przekierowany na stronę główną. Niemniej jednak podwójny return s nie działał poprawnie, gdy zamierzałem.

Jak radzić sobie z takim kontekstem?

0
Calculus 4 czerwiec 2018, 06:56

3 odpowiedzi

Najlepsza odpowiedź

Zamiast podwójnego powrotu, który nie będzie działać od drugiego powrotu nigdy nie dotarł, możesz dodać JavaScript przekierowania do szablonu sukcesu, sprawdź to Pytanie:

<script type="text/javascript">
    setTimeout(function() {
        window.location.href = "/";
    }, 5000);
</script>

Prawdopodobnie możesz spróbować użyć Wiadomości Framework dla wiadomości renderowania.

1
neverwalkaloner 4 czerwiec 2018, 04:03
user = User.objects.get(activatecode__code=a_code)
user.is_active = True
context = {}
return render(request, "user/success.html", context) # First
time.sleep(5)
return redirect("/") # Second

Twoje kody po pierwszej instrukcji powrotnej jest unreachable. Po powrocie z funkcji kursor wykonawczy powraca do rozmówcy, dowolny kod po tym nie zostanie wykonany.

Tak więc w twoim przypadku sleep i druga {x1}} nigdy nie jest wykonywana.

Jeśli chcesz przekierować użytkownika, możesz po prostu użyć redirect()

Odniesienie: https://docs.djangoproject.com/en/2.0 / Tematy / HTTP / Shortcuts / # Redirect

0
Umair Mohammad 4 czerwiec 2018, 04:00

Twój problem polega na tym, że gdy metoda działa i ocenia pierwszy zwrot, to kończy się wykonywanie wątków tej metody, które są instrukcjami po pierwszym powrotu nigdy nie zostanie ocenione, dlaczego nie można przekierować def activate(request, a_code): """ Activate User's Account by code from his email. """ try: user = User.objects.get(activatecode__code=a_code) user.is_active = True context = {} return render(request, "user/success.html", context)

Twój kod kończy się tutaj

0
juancarlos 4 czerwiec 2018, 04:13