Skip to content

Latest commit

 

History

History
274 lines (185 loc) · 5.11 KB

File metadata and controls

274 lines (185 loc) · 5.11 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0570
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

flask 最小应用

回忆上次

  • 上次 了解到 路由
    • 用装饰器 声明url
    • 再 将路由 封装成 函数
  • url 中 可以包含变量
    • 变量作为参数 传入处理函数
    • 进行处理
路由类型 路由定义语法 匹配规则说明 示例 URL 及对应处理逻辑
字符串地址(无约束) /user/ 匹配任意字符串(除 / 外 ) 如 localhost:5000/user/oeasy ,username 为 oeasy ,返回 User oeasy
整数类型约束 /post/int:post_id 仅匹配整数形式内容 如 localhost:5000/post/123 ,post_id 为 123 ,返回 Post 123
路径类型约束 /path/path:subpath 匹配包含 / 的完整路径片段 如 localhost:5000/path/a/b/c ,subpath 为 a/b/c ,返回 Subpath a/b/c
  • 大型应用 有各种 要处理的url
    • 都要 放 app.py 里
    • 能分门别类 放到 不同py文件 中吗??

分门别类

  • 将 所有的路由
    • 都放在 app.py
  • 就像
    • 将 所有的东西
    • 都堆到 一个箱子

图片描述

  • 复杂项目
    • 需要 分门别类

分类

  • 将路由 分门别类
    • 分流到 另一个 py文件
    • 专门 进行处理 ?🤔

图片描述

  • 修改的时候
    • 比较容易查找

图片描述

  • 如何把 路由 分门别类 呢?

再次构造环境

  • 建立 网站目录myproject
    • 进入目录
mkdir myproject
cd myproject
  • 编辑reply文件
vi reply.py
  • 注意不是app.py

reply.py

  • 在 项目根目录
    • 建立 reply.py
    • 处理/reply路由
from flask import Blueprint

app_reply = Blueprint("reply", __name__)

@app_reply.route('/reply')
def reply():
    return 'oeasy redirects here o'
  • 这个代码 没有app.run
    • 能跑起来吗?🤔

运行情况

python3 relpy.py
  • 运行是没有问题的
    • 但是 没有 服务器启动
    • 因为 app.run 没有被调用

图片描述

  • 那这个 代码有什么意义呢?

app.py

  • 可以 被主程序app.py 引用
vi app.py
  • 在主程序(app)中
    • 引用了 reply.py 中的 app_reply
from flask import Flask
from markupsafe import escape
from reply import app_reply

app = Flask(__name__)
app.register_blueprint(app_reply)

if __name__ == "__main__":
	print(app.url_map)
    app.run(debug=True,host="0.0.0.0",port=8081)
  • 这就是 蓝图(blue_print)

图片描述

  • 将reply.py中的路由
    • 作为 蓝图 注册到了
    • 主程序app.py中

最终效果

  • 尝试运行
nohup python3 app.py >> flask.log 2>&1 &
  • 火狐打开/reply
firefox http://localhost:8081/reply &

图片描述

  • 对/reply 路由成功

效果

  • 观察日志
vi flask.log
  • 确实可以访问
    • 状态码 为 200

图片描述

  • 两个处理文件
    • app.py 和 reply.py
    • 都位于 项目根目录
    • 还是 有点乱
  • 可以放在 不同的 文件夹下 吗?

使用路径

  • 观察现状

图片描述

  • 准备修改

修改

  • 在项目根下 建立文件夹path
    • 把reply.py 移动进去
mkdir path
mv reply.py path
  • 刷新现状

图片描述

  • 修改文件

修改app.py

vi app.py
  • 修改app.py如下图所示
    • 指定 reply的路径 为 path

图片描述

  • 保存并退出

运行效果

  • 火狐 再浏览 /reply
firefox http://localhost:8081/reply &
  • 浏览器 有响应

图片描述

  • 再 刷新日志
tail -n 10 flask.log
  • 日志 记录了
    • 代码的 修改 和 更新
    • 本次响应

图片描述

  • 路由地图啥样?

观察映射 过程

  • 输出 路由地图

图片描述

  • 子路由 也被添加到了 规则中

图片描述

总结

  • 这次 实现了
    • 动态 分配路由的 效果
  • 可以 把路由工作
    • 动态地 分配给不同的文件 来处理
    • 这样就 可以实现 模块封装 了
      • 不同模块的 py文件
      • 放到不同的 文件夹
  • 路由规则中
    • 始终有一个
    • 映射到static文件夹的
    • 路由

图片描述

  • 这如何理解?🤔
  • 下次再说!👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。