Есть ли способ упомянуть два login_redirect_urls в django? - PullRequest
2 голосов
/ 18 мая 2019

В моем приложении, если пользователь входит в первый раз, он перенаправляется на страницу профиля, а со второго раза он перенаправляется на домашнюю страницу (VChome в моем приложении).Поэтому я решил написать это в urls.py и views.py

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('VC/',views.VChome, name='VChome'),
    path('profile/',views.update_profile,name='profile'),
    path('users/login/', views.login_user, name='login'),
    path('login/done/', LoginRedirectView.as_view(), name='login_redirect'),       
]

views.py

class LoginRedirectView(generic.View):
def get(self, request, *args, **kwargs):
    logout(request)
    username = password = ''
    if request.POST:
        username = request.POST['username']
        password = request.POST['password']
        userLL = CustomUser.objects.get(username=username)
        # print(userLL)
        last_login = userLL.last_login
        # print(last_login)
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                if last_login == None:
                    return HttpResponseRedirect(reverse("profile"))
                else:
                    return HttpResponseRedirect(reverse("VChome"))
    return render(request, 'login.html')

login.html

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
{% block content %}
  <form method="post">
        <strong><p>Sign in</p></strong>
        <p>Username</p>
        {% csrf_token %}
        <input type="text" id="username" name="username"  placeholder="Username">
        <p>Password</p>
        {% csrf_token %}
        <input type="password" name="password" id="password" placeholder="Password">
        <input type="submit" value="Login">      
  </form>
{% endblock %}
</body>
</html>

У меня есть шаблоны profile.html и VChome.html, и я уверен, что они правильно отображаются в views.py

Проблема здесь в том, что если я упомяну LOGIN_REDIRECT_URL = 'VChome',Страница входа перенаправляется на VChome.

Если я не упоминаю об этом, страница входа перенаправляется на / account / profile

Я хочу, чтобы страница входа перенаправлялась на основании упомянутого ограничения last_loginв login_user в views.py

1 Ответ

0 голосов
/ 18 мая 2019

Я бы оставил это простым и создал бы представление, которое выполняло бы логику и возвращало бы перенаправление на VChome или куда-либо еще.

views.py

class LoginRedirectView(View):
    def get(self, request, *args, **kwargs):
        if request.user.blahblah:
            return HttpResponseRedirect(reverse('CAhome'))
        else:
            return HttpResponseRedirect(reverse('profile'))

urls.py

    ...
    path('login/done/', LoginRedirectView.as_view(), name='login_redirect'),
    ...

settings.py

LOGIN_REDIRECT_URL = 'login_redirect'

Технически, вы можете вызывать другое представление из того же запроса, таким образом сохраняя пользователю одно перенаправление HTTP. Но я думаю, что это, вероятно, не стоит усилий для этого конкретного случая использования ...

...