Как я могу сделать это перейти на домашнюю страницу? - PullRequest
0 голосов
/ 24 сентября 2019

Я использую Django и после авторизации перенаправляю на главную страницу.Если в сеансе еще есть токены, я не хочу переходить на страницу входа.Как я могу это сделать?

    class LoginPageView(TemplateView):
        template_name = 'login.html'

        def get(self, request, *args, **kwargs):
            if request.session['token']:
                return redirect('login')
            else:
                return redirect('home')

Мои URL:

from django.urls import path
from django.conf.urls import url
from . import views

urlpatterns = [
    path('', views.HomePageView.as_view(), name='home'),
    path('login/', views.LoginPageView.as_view(), name='login'),
    url(r'^sign-in/$', views.sign_in, name='sign-in')
]

Я написал такой код, но он не работает.

KeyErrorв / login / 'token'

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Существует несколько проблем:

  1. request.session['token'] вызовет KeyError, если токена нет.Это ошибка, которую вы видите.Вместо этого используйте request.session.get('token'), он возвращает None, если нет token.
  2. Игнорирование 1., ваша логика перевернута, в настоящее время она будет перенаправлена ​​на login, если есть токен, и перенаправит наhome если его нет.
  3. вызовет цикл перенаправления, и пользователь никогда не увидит ваш login.html шаблон

То, что вы хотите сделать вместо этого, это перенаправление на home, если естьтокен и визуализируйте шаблон login.html, если его нет.

class LoginPageView(TemplateView):
    template_name = 'login.html'

    def get(self, request, *args, **kwargs):
        if request.session.get('token'):
            return redirect('home')
        return super().get(request, *args, **kwargs)
0 голосов
/ 24 сентября 2019
class LoginPageView(TemplateView):
    template_name = 'login.html'

    def get(self, request, *args, **kwargs):
        if request.session.get('token'):  # trivial change, makes it safe for KeyError
            return redirect('login')
        else:
            return redirect('home')

Помимо очевидного, в коде могут быть и недостатки логики.

  • Я не вижу никакой проверки токена.
  • Если у пользователя есть токен, он или она будет перенаправлен в / login?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...