Предположат, что я имею видВложенные декораторы, воспитывающие 404
def foo(request)
Я также использую пользовательскую модель пользователя следующим образом:
class MyUser(AbstractUser):
field = models.BooleanField()
Я хотел бы объединить 2 Джанго декораторов: login_required и user_passed_test , так что анонимный пользователь должен быть перенаправлен на страницу входа, а пользователь, которому не разрешено видеть представление (user.field == False), должен увидеть правильное сообщение (скажем, что-то вроде «вам не разрешено видеть это»,).
Так что я пробовал:
my_decor = user_passes_test(lambda user: user.field == True,
login_url='/bar')
def custom_decor(view_func):
decorated_view_func = login_required(my_decor(view_func), login_url='/login')
return decorated_view_func
И я также должен определить вид:
def bar(request):
return HttpResponse('you are not allowed to see this context.')
и жёстко его в моих URLs.
Вопрос: могу ли я сделать это, не создавая дополнительный вид и добавляя его к URL-адресам? Есть ли способ сделать «user_passed_test» декоратор, повышающий ошибку 404 вместо перенаправления на просмотр входа?
Возможно, это очень простое решение, и, конечно же, я просто пропустил его.
Вы говорите о 2 вещи: 1. сочетающие 2 декораторов и 2. изменяя свое поведение, чтобы повысить 404 вместо перенаправления. Что касается сочетания, я думаю, вы абсолютно правы. – glglgl