Как поместить оператор if вне функций в Django Views, Python - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть 3 функции. Каждый из них имеет одинаковую строку кода:

if request.method == "POST" and 'url' in request.POST:

Вот функции:

def checkurl(request):
    if request.method == "POST" and 'url' in request.POST:
        url = request.POST.get('url', '')
        url_response = ""
        if not url.startswith('http://') and not url.startswith('https://'):
            url_get = "http://" + url
            url_response = requests.get(url_get, headers=headers, allow_redirects=False)
            url_status_code = url_response.status_code
            if url_status_code == 200:
                url = url_get
                return url
            else:
                url = "https://" + url
                return url
        return url


def netloc(request):
    url = checkurl(request)
    global url_scheme
    global url_port
    global url_netloc
    global url_path

    if request.method == "POST" and 'url' in request.POST:

        url_parsed = urlparse(url)
        url_scheme = url_parsed.scheme
        url_port = url_parsed.port
        url_netloc = url_parsed.netloc
        if url_netloc.startswith('www.'):
            url_netloc = url_netloc.replace('www.', '')
        if url_netloc.endswith('/'):
            url_netloc = url_netloc.replace('/', '')
        return url_scheme, url_port, url_netloc


def tests(request):
    if request.method == "POST" and 'url' in request.POST:
        url = checkurl(request)
        netloc(request)
        var = {
            'url':url,
            'url_scheme':url_scheme,
            'url_port':url_port,
            'url_netloc':url_netloc,
            }
        return render(request, 'apptests/shots.html', var)
    else:
        return render(request, 'apptests/shots.html')

Я не хочу повторять одну и ту же строку кода в каждой функции и хочу удалите это и отложите это перед этими 3 функциями. Но я не могу этого сделать

Пожалуйста, помогите

1 Ответ

1 голос
/ 28 апреля 2020

Вы можете просто создать функцию, которая проверяет только ваш оператор if:

def check_post(request):
    return request.method == "POST" and 'url' in request.POST

И ваш views.py может выглядеть так:

# ...

def check_post(request):
    # ....


def checkurl(request):
    if check_post(request):
        # do stuff
    else:
        # do other stuff


def netloc(request):
    # ...

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