如何在Django视图中的函数外部放置if语句,Python

如何在Django视图中的函数外部放置if语句,Python,python,django,function,Python,Django,Function,我有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

我有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个函数之前删除它并将其放在一边。但我做不到


请提供帮助

您可以创建一个只检查if语句的函数:

def检查后(请求):
return request.method==“POST”和request.POST中的“url”
您的
views.py
可能如下所示:

#。。。
def检查后(请求):
# ....
def checkurl(请求):
如果检查后(请求):
#做事
其他:
#做其他事情
def netloc(请求):
# ...
# ...

您有多种选择,首先是编写一个decorator(对于您的问题,甚至存在decorator),或者您可以编写一个调用的函数,将请求作为参数,然后检查方法是否正确等等。我刚才看到,您只需使用函数“tests”另外两个只是来自测试函数的调用,对吗?在这种情况下,只需在“测试”功能中检查一次,以后不要再检查。如果请求是POST,当您将其传递给另一个函数时,它不会更改。。。