如何在Django视图中的函数外部放置if语句,Python
我有3个功能。它们都有相同的代码行:如何在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
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,当您将其传递给另一个函数时,它不会更改。。。