From a8ba4c4e7a9f3f4127ca399b89617de7f101bc71 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Mon, 12 Dec 2022 15:22:32 +0800 Subject: [PATCH] doc: update flask.md #223 --- docs/flask.md | 138 +++++++++++++++++++++++++++++++++++++++++++++++-- docs/python.md | 1 + 2 files changed, 134 insertions(+), 5 deletions(-) diff --git a/docs/flask.md b/docs/flask.md index 12110020..ba050fa4 100644 --- a/docs/flask.md +++ b/docs/flask.md @@ -14,6 +14,7 @@ Flask 备忘清单 - [Python 备忘清单](./python.md) _(kjchmc.cn)_ ### Hello World + #### hello.py @@ -22,21 +23,22 @@ Flask 备忘清单 from flask import Flask # 创建应用实例 -app = Flask(__name__) # 'Flask' 参数是 应用程序模块 或 包 的名称 - # __name__是适用于大多数情况的便捷快捷方式 +app = Flask(__name__) # 'Flask' 参数是 应用程序模块 或 包 的名称 + # __name__是适用于大多数情况的便捷快捷方式 # 路由 (装饰器) @app.route('/') # route()装饰器告诉 Flask 什么路径触发下面的功能 def hello(): - return 'Hello World!' # 该函数返回我们想要在浏览器中显示的消息内容 - # 默认类型 HTML, 因此字符串中的 HTML 将被浏览器渲染 - + # 该函数返回我们想要在浏览器中显示的消息内容 + return 'Hello World!' + # 默认类型 HTML, 因此字符串中的 HTML 将被浏览器渲染 # 启动服务 if __name__ == '__main__': app.run() ``` ### 运行 `hello.py` 程序 + ```shell $ python hello.py @@ -52,4 +54,130 @@ $ flask --app hello run * Serving Flask app 'hello' * Running on http://127.0.0.1:5000 * Press CTRL+C to quit +$ flask run --host=0.0.0.0 +``` + +启用调试模式,使用 `--debug` 选项 + +```bash +$ flask --app hello --debug run +``` + +### HTML 转义 + +```py +from markupsafe import escape + +@app.route("/") +def hello(name): + return f"Hello, {escape(name)}!" +``` + +### 路由 + +```py +@app.route('/') +def index(): + return 'Index Page' + +@app.route('/hello') +def hello(): + return 'Hello, World' +``` + +### 变量规则 + + +```py +from markupsafe import escape + +@app.route('/user/') +def show_user_profile(username): + # 显示该用户的用户个人资料 + return f'User {escape(username)}' + +@app.route('/post/') +def show_post(post_id): + # 显示给定id的帖子,id是一个整数 + return f'Post {post_id}' + +@app.route('/path/') +def show_subpath(subpath): + # 在 /path/ 之后显示子路径 + return f'Subpath {escape(subpath)}' +``` + +转换器类型: + +:-- | -- +:-- | -- +`string` | (默认)接受任何没有斜杠的文本 +`int` | 接受正整数 +`float` | 接受正浮点值 +`path` | 像字符串但也接受斜线 +`uuid` | 接受 UUID 字符串 + +### 唯一 URL / 重定向行为 + +```py +@app.route('/projects/') +def projects(): + return 'The project page' + +@app.route('/about') +def about(): + return 'The about page' +``` + +项目端点的规范 `URL` 有一个尾部斜杠。它类似于文件系统中的文件夹。如果您访问没有尾部斜杠 (`/projects`) 的 `URL`,`Flask` 会将您重定向到带有尾部斜杠 (`/projects/`) 的规范 `URL` + +### URL 建设 + +```py +from flask import url_for + +@app.route('/') +def index(): + return 'index' + +@app.route('/login') +def login(): + return 'login' + +@app.route('/user/') +def profile(username): + return f'{username}\'s profile' + +with app.test_request_context(): + print(url_for('index')) + print(url_for('login')) + print(url_for('login', next='/')) + print(url_for('profile', username='John Doe')) +``` + +### HTTP 方法 + +默认情况下,路由仅响应 `GET` 请求。您可以使用 `route()` 装饰器的方法参数来处理不同的 `HTTP` 方法 + +```py +from flask import request + +@app.route('/login', methods=['GET', 'POST']) +def login(): + if request.method == 'POST': + return do_the_login() + else: + return show_the_login_form() +``` + +您还可以将不同方法的视图分成不同的函数。 `Flask` 为每个常见的 `HTTP` 方法提供了一种快捷方式,用于使用 `get()`、`post()` 等来装饰此类路由 + +```py +@app.get('/login') +def login_get(): + return show_the_login_form() + +@app.post('/login') +def login_post(): + return do_the_login() ``` diff --git a/docs/python.md b/docs/python.md index 07fe8f39..e5793053 100644 --- a/docs/python.md +++ b/docs/python.md @@ -442,6 +442,7 @@ True ``` ### 转义符号 + | 转义符号 | 对应的操作 | |---|---| | `\\` | 输出反斜杠 |