烧瓶的html和python集成

时间:2020-08-07 05:16:34

标签: python-3.x flask

有人可以帮助提高此代码的效率。该代码可以工作,但是所有内容都在.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>
        '''

1 个答案:

答案 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。