使用login_required时出现404错误

时间:2019-02-23 21:27:32

标签: python django decorator login-required

我是Django的新手,正在尝试建立一个学习日志网站。

当我尝试使用login_required函数限制主题时,出现404错误。

这是我的代码:

from django.contrib.auth.decorators import login_required   

@login_required(login_url='/users/login/')
def topics(request):
""" Show all topics."""
topics = Topic.objects.order_by("date_added")
context = {"topics": topics}
return render(request, "learning_logs/topics.html", context)

每当我在代码中使用装饰器时,都会出现此错误:

Using the URLconf defined in learning_log.urls, Django tried these URL 
patterns, in this order:

admin/
users/ login [name='login']
users/ logout [name='logout']
users/ registration [name='register']
learning_logs/¨

The current path, users/login/, didn't match any of these. 

URL工作正常,但是当我使用装饰器时,URL会中断。

2 个答案:

答案 0 :(得分:0)

您的users网址似乎没有斜杠。确保users/urls.py中的URL以斜杠结尾。例如:

urlpatterns = [
    url(r'^login/$', LoginView.as_view(), name='login')
]

答案 1 :(得分:0)

这意味着您尚未在url中定义django内置登录名来解决该问题,您只需在urls.py内输入该内容即可

##urls.py
    from django.contrib.auth import views as auth_views
    urlpatterns = [
        path('users/login/', auth_views.login, name='login'),
        path('users/logout/', auth_views.logout, name='logout'),
        path('admin/', admin.site.urls),
    ]
  

如果已经完成操作,则需要在视图中执行以下操作

##views.py
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required   

@login_required(login_url=reverse_lazy("login"))
def topics(request):
""" Show all topics."""
topics = Topic.objects.order_by("date_added")
context = {"topics": topics}
return render(request, "learning_logs/topics.html", context)
相关问题