文章目录
- 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应用程序最初目的是利用互联网交流工作文档。
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
得到如下结果
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
得到如下结果
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)
若定义多个路由函数,自动根据传入的参数及其类型来选择相应的函数执行,但是路由不能重,用户通过唯一路径访问不同函数
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
文件夹下
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模型
结果如下所示
3. Jinjia2模板使用
python+flask 中一般采用的是 jinja2 模板,要渲染一个模板,通过render_template
方法即可,在2.3章节中已经简单介绍过render_template
的使用,本章节将介绍更高级的使用方法