基于用户类型的 Django 装饰器
Django decorator based on user type
我有以下型号:
class Developer(models.Model):
COUNTRIES = (
('U', 'United States'),
('O', 'Other'),
)
user = models.OneToOneField(User, related_name='freelancer_user')
country = models.CharField(max_length=1, choices=COUNTRIES, default='U')
class Customer(models.Model):
user = models.OneToOneField(User, related_name='customer_user')
location = models.CharField(max_length=50, blank=True)
我有以下看法:
@login_required
def postjob(request):
job_form = JobCreateForm()
return render(request, 'myapp/postjob.html', {'job_form': job_form})
这就身份验证而言有效。但我只希望客户用户访问此视图而不是开发人员。我该怎么做?
您需要 user_passes_test
装饰器和一个测试函数:
@user_passes_test(is_customer)
def postjob(request):
job_form = JobCreateForm()
return render(request, 'myapp/postjob.html', {'job_form': job_form})
其中 is_customer
类似于:
def is_customer(user):
# how do you tell the user is a customer?
if user.is_staff or user.is_superuser:
return False
return True
我有以下型号:
class Developer(models.Model):
COUNTRIES = (
('U', 'United States'),
('O', 'Other'),
)
user = models.OneToOneField(User, related_name='freelancer_user')
country = models.CharField(max_length=1, choices=COUNTRIES, default='U')
class Customer(models.Model):
user = models.OneToOneField(User, related_name='customer_user')
location = models.CharField(max_length=50, blank=True)
我有以下看法:
@login_required
def postjob(request):
job_form = JobCreateForm()
return render(request, 'myapp/postjob.html', {'job_form': job_form})
这就身份验证而言有效。但我只希望客户用户访问此视图而不是开发人员。我该怎么做?
您需要 user_passes_test
装饰器和一个测试函数:
@user_passes_test(is_customer)
def postjob(request):
job_form = JobCreateForm()
return render(request, 'myapp/postjob.html', {'job_form': job_form})
其中 is_customer
类似于:
def is_customer(user):
# how do you tell the user is a customer?
if user.is_staff or user.is_superuser:
return False
return True