如何在我的URL中使用login_required装饰器?

时间:2011-04-19 21:14:34

标签: django django-authentication

我想检查用户是否有权使用某些网址。我正在使用通用视图。

The docs here说login_required可以作为可选参数传递,但我不确定。这样的事情可能是:(r'^$', 'archive_index', link_info_dict, 'coltrane_link_archive_index', login_required=True,),

我有这个,我希望能够在URL中使用login_required装饰器。可能吗?我该怎么办?

from django.conf.urls.defaults import *

from coltrane.models import Link

link_info_dict = {
    'queryset': Link.live.all(),
    'date_field': 'pub_date',
}

urlpatterns = patterns('django.views.generic.date_based',
    (r'^$', 'archive_index', link_info_dict, 'coltrane_link_archive_index'),

    (r'^(?P<year>\d{4})/$', 'archive_year', link_info_dict, 'coltrane_link_archive_year'),

    (r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', link_info_dict, 'coltrane_link_archive_month'),

    (r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$', 'archive_day', link_info_dict, 'coltrane_link_archive_day'),

    (r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$', 'object_detail', link_info_dict, 'coltrane_link_detail'),


例如,我如何保护此页面(没有添加login_Required装饰器的视图)?

(r'^$', 'django.views.generic.simple.direct_to_template', {
        'template': 'home.html'
    }, ),

4 个答案:

答案 0 :(得分:25)

要在urls.py中使用装饰器,您需要使用实际函数而不是它们的名称:

from django.contrib.auth.decorators import login_required
import django.views.generic.date_based as views

urlpatterns = patterns('',
    (r'^$', login_required(views.archive_index), link_info_dict,
            'coltrane_link_archive_index'),
    ...

答案 1 :(得分:2)

你可以使用decorate_url

http://github.com/vorujack/decorate_url

pip install decorate_url

答案 2 :(得分:2)

至少在Django 1.11+中,您可以根据需要直接进行操作。例如:

# urls.py

from django.contrib.auth.decorators import login_required

urlpatterns = [
    # Home path
    path('', login_required(TemplateView.as_view(template_name='core/home.html')), name='home'),
    # Another paths
    # ...
]

在这种情况下,每次尝试进入首页时,您都必须先登录,否则将进入登录屏幕,然后返回首页。

答案 3 :(得分:0)

这些文档适用于通用视图,其工作方式与自定义视图略有不同。通常login_required用于装饰视图;如果你想在urlconf中使用它,那么你需要编写一个lambda来包装视图。