【问题标题】:How to customize django auth decorator with urls.py?如何使用 urls.py 自定义 django auth 装饰器?
【发布时间】:2016-11-28 03:51:27
【问题描述】:

我定义了几个网址:

url(r'^board/$', TemplateView.as_view(template_name='recruit/board.html'), name='recruit_board'),
url(r'^job/$', login_required(TemplateView.as_view(template_name='recruit/job_detail.html')), name='job_detail'),
url(r'^company/$', login_required(TemplateView.as_view(template_name='recruit/company_detail.html')), name='company_detail'),

...而我设计的用户有两种帐户类型:AB

"job" url 只能由 A 帐户类型的用户访问,而“company” url 只能由 B 帐户类型的用户查看。如果用户尝试访问错误的 url,它将被重定向到“board” url。

我使用了 login_required 装饰器,并且我知道 user_passes_test,但我不知道如何从这里继续。我可以写一个像 login_required 一样工作的新装饰器并得到我想要的吗?

【问题讨论】:

  • 您的“帐户类型”是如何实现的?你在使用Django's Permissions and Authorization 系统吗?
  • @Chris 否,帐户类型和其他与用户相关的特征在名为 Profile 的新模型中定义,与用户对象相关。
  • @KirChou 我该如何编写这个 is_company 装饰器?我该怎么做才能将其重定向到“板”网址?你能再具体一点吗?赞赏。

标签: python django decorator


【解决方案1】:

我认为group_required decorator 符合您的目的。

我假设你有三组['admin', 'job', 'company'],你可以这样写代码。由于group_required 已检查is_authenticated,因此您不再需要login_required

from django.conf.urls import url
from django.views.generic import TemplateView
from django.contrib.auth.decorators import user_passes_test

def group_required(*group_names):
    """Requires user membership in at least one of the groups passed in."""
    def in_groups(u):
        if u.is_authenticated():
            if bool(u.groups.filter(name__in=group_names)) | u.is_superuser:
                return True
        return False
    return user_passes_test(in_groups)

url(r'^board/$', TemplateView.as_view(template_name='recruit/board.html'), name='recruit_board'),
url(r'^job/$', group_required(['admin', 'job'])(TemplateView.as_view(template_name='recruit/job_detail.html')), name='job_detail'),
url(r'^company/$', group_required(['admin', 'company'])(TemplateView.as_view(template_name='recruit/company_detail.html')), name='company_detail'),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2011-07-25
    • 2021-11-25
    • 2013-02-06
    • 2011-10-16
    • 2015-03-25
    相关资源
    最近更新 更多