Использовать код декоратора login_required от Django внутри функции представления?

Я хочу написать представление в Django (3.2), которое позволяет любому пользователю ввести значение, и только после того, как оно будет отправлено, потребовать вход (или регистрацию!). Что-то вроде следующего:

def my_view(request):
    if request.GET.get('val', None):
       # now login is required to do something
       # can we use the login_required decorator here
       # to forward to login, and then back here after login?
    else:
       # login is not yet required
       # ... a form to gather up 'val'

Могу ли я повторно использовать декоратор login_required каким-то чистым способом в середине функции? Я мог бы скопировать и вставить его код (и код user_passes_test), но copy-and-paste кажется неудачным.

Мы можем работать с внутренней функцией, где мы применяем декоратор @login_required [Django-doc] к:

from django.contrib.auth.decorators import login_required

def my_view(request):
    @login_required
    def has_val(request, theval):
        # …
        pass
    
    val = request.GET.get('val', None)
    if val:
       return has_val(request, val)
    else:
       # …
       pass
Вернуться на верх