Лучший способ кодировать несколько решений в Python - PullRequest
0 голосов
/ 31 мая 2018

У меня есть следующая практическая проблема (связанная с Django / Python).

Я пытаюсь получить следующее в наиболее эффективном фрагменте кода Python ->

Есть 2проверяемые элементы:

  1. Пользователь вошел в систему?если не показывать страницу входа, иначе проверьте, является ли запрос почтовым запросом.
  2. Является ли запрос почтовым запросом?Если не показывать форму, иначе обработайте форму

    def upload(request):
    if request.user.is_authenticated:
        if request.method == 'POST':
            form = forms.DocumentForm()
            return HttpResponse('Handle POST and LoggedIn Prefix Form Validation')
        else:
            return HttpResponse('POST but not logged in')
            return render(request, 'upload.html', {'form': form}
    else:
        return HttpResponse('Not Logged In Need to Make Error Landing Page')
    

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

По возможности избегайте else и используйте досрочный возврат :

def upload(request):
    if request.user.is_authenticated:
        if request.method != 'POST':
            return HttpResponse('Not Logged In Need to Make Error Landing Page')
        form = forms.DocumentForm()
        return HttpResponse('Handle POST and LoggedIn Prefix Form Validation')

    if request.method == 'POST':
        return HttpResponse('POST but not logged in')
0 голосов
/ 31 мая 2018

я думаю, что это довольно питонно ...

def upload(request):
    if not request.user.is_authenticated:
        #return early
        return HttpResponse('Not Logged In Need to Make Error Landing Page')

    # this will only be reached if user authenticated
    if request.method == 'POST':
        form = forms.DocumentForm()
        return HttpResponse('Handle POST and LoggedIn Prefix Form Validation')
    else:
        pass # handle GET

Если вам нужно проверить аутентификацию в нескольких функциях, рассмотрите возможность использования декоратора вместо

@authenticated_users_only(request)
def upload(request):   
    if request.method == 'POST':
        form = forms.DocumentForm()
        return HttpResponse('Handle POST and LoggedIn Prefix Form Validation')
    else:
        pass # handle GET

Если вы нене знаю, как написать декоратор - прочитайте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...