对于我的索引页面,如果用户已登录,我想显示一个页面,如果用户未登录则重定向到登录页面。我使用以下视图代码执行此操作:
from __future__ import unicode_literals
from django.shortcuts import render_to_response, redirect
from django.contrib.auth.views import login
def index(request):
if not request.user is None and request.user.is_authenticated():
return render_to_response('foo/index.html')
else :
return redirect(login)
但是我收到以下警告:
RemovedInDjango110Warning: Reversing by dotted path is deprecated (django.contrib.auth.views.login)
我在这个主题上找到的所有内容都是this question但是虽然看起来模糊不清,但我无法理解如何将它应用到我的问题中。 “通过虚线路径反转”是什么意思?我该怎么办呢?应该怎么做呢?
编辑:我认为这些问题出现了问题,但似乎并非如此。所以问题仍然相似但更为笼统:“通过虚线路径反转”是什么意思?我怎么知道我在哪里做?应该做些什么呢?
答案 0 :(得分:1)
我同意在这种情况下,“通过虚线路径反转”信息有点令人困惑。
说你有:
url(r'^login/$', views.login, name='login-page'),
弃用警告表示您在撤消网址时应使用网址名称'login-page'
而不是虚线路径'django.contrib.auth.views.login'
。
在您的情况下,当您使用redirect
快捷方式时,您正在撤消网址。当你这样做
return redirect(login)
可调用登录名转换为字符串'django.contrib.auth.views.login'
,字符串被反转,触发警告。
您可以通过将该行更改为:
来停止警告 return redirect('login-page')
如果在其他地方没有使用from django.contrib.auth.views import login
,您可以将其删除。
请注意,撰写视图的惯用方法是使用login_required
和render
:
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@login_required
def index(request):
return render(request, 'foo/index.html')