【问题标题】:How to get rid of group related queries?如何摆脱与组相关的查询?
【发布时间】:2015-02-06 04:16:05
【问题描述】:

我必须重构如下代码:

views.py

def some_method(request):
    customers = list()
    if request.session['group'] == "group1":
        foo = foo.objects.filter(blue=True)
    else:
        foo = foo.objects.all()

我有很多 if else 语句,我想使用 django 内置权限、身份验证功能来减少这些语句。有什么帮助吗?

【问题讨论】:

标签: python django session refactoring


【解决方案1】:

我建议您阅读:Using the Django authentication system,并专门阅读该部分:The permission_required decorator

在那里你会发现你可以像这样重构你的函数:

@permission_required('some.permission.only.group1.has')
def some_method(request):
    customers = list()
    foo = foo.objects.filter(blue=True)

对于用户不在group1 中的情况,应该存在另一个视图。您发布的示例并没有真正说明对每个案例都有看法的必要性,但相信我,它会让您的生活更轻松。

提示:在模板中,您也可以使用权限限制用户看到的内容。您甚至可以在视图被调用之前管理权限。

{% if perms.app_label.can_do_something %}
<form here>
{% endif %}

当前登录用户的权限存储在模板变量{{ perms }}

参考:Check permission inside a template in Django

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多