有人可以帮助提高此代码的效率。该代码可以工作,但是所有内容都在.py文件中,我知道我可以提高效率,但我不知道如何。我知道我必须创建html,并在其中呈现html部分,但是由于某种原因,用户的输入不会传递到我的函数所在的app.py中。那就是为什么我将所有内容都放在同一文件中并称其为一天的原因:)。但是,如果我有10个应用程序,那么我的代码长度将是如此之长,并且我必须在所有页面上编辑网站标题和所有共享资源。任何提示将不胜感激。
!
!
!
>>下面的代码
@app.route('/vxlan_config', methods=["GET", "POST"])
def vxlan_config():
vxlan_config_file = open("/Users/ahmad/vxlan_config.txt", "w")
if request.method == "POST":
vlanid = request.form["vlanid"]
description = request.form["description"]
vrf = request.form["vrf"]
ip = request.form["ip"]
mask = request.form["mask"]
vxlan_conf = DCConfig(vlanid, description, vrf, ip, mask)
vxlan_config_file.write(vxlan_conf.vxlan_config())
return f'''
<html>
<body>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.1/css/bootstrap.min.css" integrity="sha384-VCmXjywReHh4PwowAiWNagnWcLhlEJLA5buUprzK8rxFgeH0kww/aWY76TfkUoSX" crossorigin="anonymous">
<title>Distro blu310 Config</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="/">Config Generator</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/vxlan_config">VXLAN Config</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Other Config Gen
</a>
</li>
</ul>
</div>
</nav>
<p><h3>Your config file has been saved under vxlan_config.txt</h3></p>
<p><a href="/">Click here to go back to the main page</a>
</body>
</html>
'''
return '''
<html>
<body>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.1/css/bootstrap.min.css" integrity="sha384-VCmXjywReHh4PwowAiWNagnWcLhlEJLA5buUprzK8rxFgeH0kww/aWY76TfkUoSX" crossorigin="anonymous">
<title>Distro blu310 Config</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="/"> Config Generator</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/vxlan_config">VXLAN Config</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Other Config Gen
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="/vxlan_config">VXLAN Config</a>
</div>
</li>
</ul>
</div>
</nav>
<body>
<p><h3>Enter the Values Below:</h3></p>
<form method="post" action="/vxlan_config">
<p>VLAN ID: <input name="vlanid" placeholder=3400></p>
<p>VLAN Description: <input name="description" placeholder=Citrix VLAN></p>
<p>VRF Name: <input name="vrf" placeholder=GRN200></p>
<p>SVI IP Address: <input name="ip" placeholder=10.248.10.1></p>
<p>VLAN Subnet Mask: <input name="mask" placeholder=255.255.255.0></p>
<p><input type="submit" value="Generate Config" /></p>
</form>
</body>
</html>
'''
答案 0 :(得分:1)
Flask实现Jinja2一种模板语言。
您只需要在此代码旁边创建一个templates
文件夹,并将HTML代码添加到其中的HTML文件中。检查Rendering Templates - Flask Documentation了解更多详细信息。
然后返回而不是直接返回字符串:
from flask import render_template
@app.route(...)
def ...:
...
return render_template("your_html_file.html")
请注意,flask将在模板文件夹中查找your_html_file.html。