我目前正在使用此方法向用户提供与其相关的页面。
def get_user_url(request):
un = request.user.username
t = get_template(un + '.htm')
html = t.render()
return HttpResponse(http)
我只期待少数用户,每个用户代表一家公司,所以这不是问题,因为我可以简单地拥有五个或六个具有不同内容的html文件。 现在我被要求为每个公司的多个用户负责,假设同一公司的用户具有不同的权限。
所以我查看了自定义权限的文档:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#custom-permissions这可能会有效但我可能最终得到一个30行的权限类,如下所示,这对我来说是一种糟糕的方式。
permissions = (
("company1_permission1", "Company 1 Permission 1"),
("company1_permission2", "Company 1 Permission 2"),
("company2_permission1", "Company 1 Permission 1"),
("company2_permission2", "Company 1 Permission 2"),
("company3_permission1", "Company 1 Permission 1"),
)
有没有办法可以添加一家'公司'字段给用户并使用上述两种方法?因此,除非来自合适的公司,否则用户甚至不会访问页面。然后在该页面中,我将自定义权限应用于该页面上的内容。
或者是有更好的方法来实现这种功能。 我是django和python的新手。
答案 0 :(得分:1)
一个好的解决方案是使用@user_passes_test()
decorator。
文档为确保用户的电子邮件来自特定公司提供了一个很好的示例,您可以轻松地根据您的用例进行调整:
from django.contrib.auth.decorators import user_passes_test
def email_check(user):
return user.email.endswith('@example.com')
@user_passes_test(email_check)
def my_view(request):
...
此方法的主要问题是您无法访问代码中的request
对象。解决方案是使用基于类的视图,UserPassesTestMixin
可以访问self.request
。