我试图限制视图,除非登录完成。正在关注 tuts+plus django unchained 教程
然而,login_required 装饰器不知何故没有完成这项工作。我做错了什么?
views.py 中的部分(login_required 已导入)
@login_required
def story(request):
if request.method == "POST":
form = StoryForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = StoryForm()
return render(request, 'stories/story.html', {'form': form})
urls.py 中没有进行任何更改。所以我希望出现找不到/登录的错误。但不知怎的,这并没有发生。
settings.py 有 LOGIN_URL = "/login/"
我不确定为什么会发生这种情况。但由于某些原因,在 chrome 中,默认故事视图打开时没有重定向到 /login,而在 Firefox 中则工作正常。我尝试清除 Chrome 中缓存的图像和文件,但没有帮助。
现在我只使用 Firefox 来完成它。
通过 chrome DevTool -> Application -> Storage -> Cookies 清除页面 cookie 可以解决此问题。
我也有同样的问题。我清除了 Chrome 缓存,但没有用。现在我在 Firefox 上运行它并且运行正确
在
urls.py
中添加一个条目,如下所示:
(r'^login/$', 'login_view'),
或者您可以使用从
LOGIN_URL = "/login/"
中删除 settings.py
并使用:
@login_required(login_url='/login/')
在这两种情况下,您都必须将条目添加到 urls.py
确保您的chrome浏览器已清除所有浏览数据,并始终注意时间范围选择,然后您将解决此问题。我也遇到了这个问题,使用Firefox运行良好后,我明白了。
我能够通过使用与 login() 相同的方式导入的 logout() 函数来解决这个问题,并且基本上“清除”了我已登录用户的任何存在。
创建一个注销视图函数/url路由,运行应用程序并调用该url,然后您将无法再使用装饰器访问其他视图函数,除非再次登录。
将
@login_required
替换为 @login_required(login_url='login/')
#'login/'
这里您需要调用您的特定登录函数名称。
从设置中删除您的
LOGIN_URL
并确保将其导入您的视图中'from django.contrib.auth.decorators import login_required'
或者,您只需在 Google Chrome 的
Incognito Window
中打开您的应用程序即可修复此错误。
我遇到了同样的问题,我意识到浏览器将我识别为登录用户,因为我之前在管理页面中以管理员身份登录过。我退出了管理页面,login_required 装饰器工作正常。
检查注销用户视图,注销(请求)应该在那里关闭所有会话。
def logoutUser(请求):
logout(request)
return redirect('login')