文章目录

  • 1. Flask 简介
  • 2. Flask使用
  • 2.1 入门
  • 2.2 传参
  • 2.2.1 定义多个参数
  • 2.2.2 传入指定类型的参数:
  • 2.3 使用 render_template 打开网页
  • 2.3.1 向页面传递变量
  • 2.3.2 表单提交
  • 3. Jinjia2模板使用


1. Flask 简介

python的主流web框架有Django,tornado等,前两者功能全,适用于工业,而flask简单易上手。web应用程序最初目的是利用互联网交流工作文档。

python 在窗口中显示网页_flask

2. Flask使用

2.1 入门

路由解析默认是@app.route("/") ,只需输入ip地址和端口即可

from flask import Flask

app = Flask(__name__)

# 路由解析: 通过用户访问的路径,匹配相应的函数(浏览器输入最后部分)
@app.route("/index")
def hello_word():
    return "你好"

if __name__ == "__main__":
    app.run(debug=True)   # True表示开始debug模型

输出:

D:\ProgramFiles\Anaconda\python.exe D:/Desktop/TEMP/Spider/program/flask_demo.py
 * Serving Flask app "flask_demo" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 426-587-012
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

在浏览器中输入http://127.0.0.1:5000/index 得到如下结果

python 在窗口中显示网页_html_02

2.2 传参

from flask import Flask

app = Flask(__name__)   # Flask有参数template_folder可以指定html模板存放位置,默认为当前项目下的`templates`文件夹

# 传入参数name 
@app.route("/user/<name>")
def hello_word(name):
    return "你好,%s"%name

if __name__ == "__main__":
    app.run(debug=True)   # True表示开始debug模型

浏览器输入http://127.0.0.1:5000/user/xiaofang 得到如下结果

python 在窗口中显示网页_html_03

2.2.1 定义多个参数

@app.route("/user/<name>/<password>")
def hello_word(name, password):
    return "你好,%s,你的密码为%s"%(name,password)

注意:上面传入的参数默认是字符串类型

2.2.2 传入指定类型的参数:

支持int float

@app.route("/user/<name>/<int:id>")
def hello_word(name, id):
    return "你好%s,你的密码为%d"%(name,id)

python 在窗口中显示网页_python_04


若定义多个路由函数,自动根据传入的参数及其类型来选择相应的函数执行,但是路由不能重,用户通过唯一路径访问不同函数

2.3 使用 render_template 打开网页

from flask import Flask, render_template

app = Flask(__name__)  # Flask有参数template_folder可以指定html模板存放位置,默认为当前项目下的`templates`文件夹

# 装饰器创建了网址 /(根网址) 和 函数index 的对应关系以后用户在浏览器上访问 host:port/网站自动执行该函数
@app.route("/")
def index():
    return render_template("index.html")

if __name__ == "__main__":
    app.run(debug=True)   # True表示开始debug模型, 还可通过host port等参数指定主机和端口

注意:目录结构如下图所示,必须包含 templates目录,且html文件必须放在templates 目录下,如若在网页中显示图像,则图像必须存放在static文件夹下

python 在窗口中显示网页_html_05

2.3.1 向页面传递变量

在html文件中{{}}直接访问变量,{% control %} 是控制语句,具体如下所示,展示了在html中使用普通变量、列表和字典

html 文件编写如下:重点看8到21行

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  {{ var1 }}: 你好啊<br/>           <!--用两个大括号嵌套是来访问变量-->

  欢迎光临,
  {% for item in var2 %}            <!--大括号和百分号结合作为控制结构,if语句也类似-->
      {{ item }}
  {% endfor %}

  个人信息:<br/>             <!--了解如何在页面打印表格,以及如何迭代--->
  <table border="1">        <!--表格是table-->
      {% for key, val in var3.items() %}
      <tr>        <!--一行是tr-->
          <td>{{key}}</td>   <!--一行中的一列是td-->
          <td>{{val}}</td>
      </tr>
      {% endfor %}
  </table>

</body>
</html>

python编写的flask如下: 重点看7到11行,参数的传递过程

from flask import Flask, render_template
 import datetime
 
 app = Flask(__name__)
 
 @app.route("/")
 def index():
     time = datetime.datetime.today()  # 普通变量
     name = ["xiaofang", "xiaocheng"]
     person = {"name":"oranger", "sex":"man", "age":18}
     return render_template("index.html", var1 = time, var2 = name, var3=person)
 
 if __name__ == "__main__":
     app.run(debug=True)   # True表示开始debug模型

2.3.2 表单提交

首先编辑注册表单的html代码 register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册信息</title>
</head>
<body>

<!--<form action="http://localhost:5000/result" method="post">
     也可如下动态的获取路径,()中填入对应的路由即可-->
<form action={{url_for('result')}} method="post">
    <p>name:<input type="text" name="name"></p>
    <p>age:<input type="text" name="age"></p>
    <p>sex:<input type="text" name="sex"></p>
    <p>address:<input type="text" name="address"></p>
    <p><input type="submit" value="suply"></p>

</form>

</body>
</html>

表单提交后响应的 html 文件 result.html, 直接打印出表单提交的内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{result}}
</body>
</html>

python服务程序app.py

from flask import Flask, render_template,request
import datetime

app = Flask(__name__)

# 提交表单
@app.route("/register")
def index():
    return render_template("test/register.html")   # 该html文件位于templates下的test文件下

# 接收表单的路由,需要指定methods为post
@app.route("/result",methods=["POST","GET"])
def result():
    if request.method == "POST":
        result = request.form   # 将提交的表单设定成字典
        return  render_template("result.html", result=result)

if __name__ == "__main__":
    app.run(debug=True)   # True表示开始debug模型

结果如下所示

python 在窗口中显示网页_html_06

python 在窗口中显示网页_python 在窗口中显示网页_07

3. Jinjia2模板使用

python+flask 中一般采用的是 jinja2 模板,要渲染一个模板,通过render_template方法即可,在2.3章节中已经简单介绍过render_template的使用,本章节将介绍更高级的使用方法