Python 我如何让它进入主页?
我正在使用Django,登录后,我重定向到主页。如果会话中仍然有令牌,我不想转到登录页面。我该怎么做Python 我如何让它进入主页?,python,django,python-3.x,Python,Django,Python 3.x,我正在使用Django,登录后,我重定向到主页。如果会话中仍然有令牌,我不想转到登录页面。我该怎么做 class LoginPageView(TemplateView): template_name = 'login.html' def get(self, request, *args, **kwargs): if request.session['token']: return redirect(
class LoginPageView(TemplateView):
template_name = 'login.html'
def get(self, request, *args, **kwargs):
if request.session['token']:
return redirect('login')
else:
return redirect('home')
我的网址:
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')
]
我写了这样的代码,但不起作用
在/登录时出现密钥错误/
“代币”
有几个问题:
请求。如果没有令牌,会话['token']
将引发一个KeyError
。这就是你看到的错误。使用request.session.get('token')
,如果没有令牌,则返回None
登录
,如果没有令牌,它将重定向到主页
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)
除了显而易见的缺陷外,代码中还可能存在逻辑缺陷
- 我没有看到任何令牌验证
- 如果用户有令牌,他或她将被重定向到/login李>
如果request.session中的'token':返回重定向('login')
views.LoginPageView没有返回HttpResponse对象。它返回的是None。您还需要编写else部分。顺便说一句,可以跳过else
,但您需要编写第二个返回值
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')