如何根据Django中的用户类型限制对页面的访问

Ale*_*Grs 3 django django-templates django-views

我有一个基本问题,对新的Django开发人员有用.

我在Django中创建了自己的UserProfile.此UserProfile具有一个名为"type"的特定字段.这个字段可以有两个值(到现在为止可能更多):男性 - 男性/女性 - F:

from django.contrib.auth.models import User

GENDER = (
    (M, 'Male'),
    (F, 'Female'),
)

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    type = models.CharField( max_length=2,
                             choices=GENDER,
                             default='F')
Run Code Online (Sandbox Code Playgroud)

基本上,我想允许访问限制访问或根据用户类型调整页面内容.到目前为止,我使用了一种非常基本的初学者方法,即在视图中测试用户类型,然后处理页面:

def OnePage(request):
    if request.user.type == 'M':
        ....
    else if request.user.type =='F':
        ....
Run Code Online (Sandbox Code Playgroud)

然后我还需要根据用户类型调整呈现的模板:男性用户不会拥有与女性用户相同的个人资料页面.

我相信有更好的方法可以做到这一点,但作为一个Django初学者,我很遗憾所有的Django可能性.所以如果你有任何最佳实践来实现这一点,请告诉我(显然我想要一个我可以在每个视图上使用的干代码!)

谢谢您的帮助.

Bur*_*lid 6

要限制访问,请使用用户传递测试装饰器:

from django.contrib.auth.decorators import user_passes_test

male_only = lamda u: u.type == 'M'
female_only = lamda u: u.type == 'F'


@user_passes_test(male_only)
def myfunc(request):
   pass

@user_passes_test(female_only)
def myotherfunc(request):
   pass
Run Code Online (Sandbox Code Playgroud)