原文链接: http://chenhao.space/post/efcec196.html
将当前环境下的依赖包全导出到一个txt文件:pip freeze > requirements.txt
在另一个环境下安装这个requirement.txt
: pip install -r requirement
一个基础的Flask程序
# 1.导入Flask扩展
from flask import Flask
from flask import render_template
# 2.创建Flask应用程序实例
# Flask函数接收一个参数name,它会指向程序所在的模块
app = Flask(__name__)
# 3.定义路由及视图函数
# Flask中定义路由是通过装饰器实现的
# 装饰器的作用是将路由映射到视图函数index
@app.route("/")
def index():
return "hello flask" # 返回的是字符串内容
# return render_template("index.html") # 返回的是HTML模版内容
# 4.启动程序
if __name__ == "__main__":
# 执行了app.run(),就会将Flask程序运行在一个简易的服务器上(Flask提供的,用于测试的)
app.run()
Flask程序运行过程
- 当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。
- 此时,Web服务器会把来自客户端的所有请求都交给Flask程序实例
- 程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。
- 根据每个URL请求,找到具体的视图函数并进行调用。
- 在Flask程序中,路由的实现一般是通过程序实例的装饰器实现。
- Flask调用视图函数后,可以返回两种内容:
- 字符串内容:将视图函数的返回值作为响应的内容,返回给客户端(浏览器)
- HTML模版内容:获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后返回响应数据给客户端(浏览器)
路由请求方式限定
下载软件: POSTMAN 它是一个http请求模拟工具。
我们用GET
请求方式访问:
如果换做POST
方法访问:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SScCziNl-1573454595657)(https://chenhao-1300052108.cos.ap-beijing.myqcloud.com/ch-Pic/Flask/Flask%E5%9F%BA%E7%A1%80/Flask%E5%9F%BA%E7%A1%80%E5%9B%BE/image-02.png)]
显示方法不允许。
那么我们就需要在methods中增加POST。
# 装饰器的作用是将路由映射到视图函数index
# 路由默认只支持GET,如果需要增加,请自行指定
@app.route("/", methods=["GET", "POST"])
然后再用POST方法请求:
路由参数处理
# 1.导入Flask扩展
from flask import Flask
from flask import render_template
# 2.创建Flask应用程序实例
# Flask函数接收一个参数name,它会指向程序所在的模块
app = Flask(__name__)
# 3.定义路由及视图函数
# Flask中定义路由是通过装饰器实现的
# 装饰器的作用是将路由映射到视图函数index
# 路由默认只支持GET,如果需要增加,请自行指定
@app.route("/", methods=["GET", "POST"])
def index():
return "hello flask" # 返回的是字符串内容
# return render_template("index.html") # 返回的是HTML模版内容
# 使用同一个视图函数,来显示不同用户的订单信息
# <>定义路由的参数(动态参数),<>内需要起一个名字
@app.route("/orders/<int:order_id>")
def get_order_id(order_id):
# 参数类型,默认是字符串 <class 'str'>
print(type(order_id))
# 有的时候,需要对路由做访问优化,订单ID应该是int类型:<int:order_id>
# 需要在视图函数的()内填入参数名,那么后面的代码才能去使用
return "order_id %s" % order_id
# 4.启动程序
if __name__ == "__main__":
# 执行了app.run(),就会将Flask程序运行在一个简易的服务器上(Flask提供的,用于测试的)
app.run()