✅【Flask笔记】第一节:初识
旧的笔记,以前存放的笔记软件停止运营了,重新迁移到博客上,删除和修改一些过时的内容。
0x00 搭建开发环境
1. 安装pip
主流的Linux系统中已经集成Python3,目前最新版的Python是3.12,Ubuntu22.04内置的是3.10。
1 | sudo apt install python3-pip # Ubuntu |
2. 创建虚拟环境
1 | sudo apt install python3.10-venv #Ubuntu 需要安全venv的依赖 当前使用版本是3.10 |
激活环境:
1 | source env/bin/activate |
3. 管理依赖
或者在虚拟环境下使用下面的命令
1 | pip list |
4. 退出虚拟环境
1 | deactivate |
5. 安装Flask
1 | pip install flask |
0x01 Hello,Flask
1. 创建程序实例
app.py
1 | from flask import Flask |
0x02 注册路由
1. 为视图绑定多个URL
1 |
|
2. 动态URL
1 |
|
设置访问的默认值
1 |
|
等同于
1 |
|
0x03 启动开发服务器
1. Run,Flask,Run
1 | flask run |
2. 自发现程序实例
- 从当前目录寻找app.py和wsgi.py模块,并从中寻找名为app或application的程序实例。
- 从环境变量FLASK_APP对应的模块名/导入路径寻找名为app或application的程序实例。
3. 管理环境变量
如果安装了python-dotenv,那么使用flask run
或其他命令时会使它自动从.flaskenv
文件和.env
文件中加载环境变量。
当安装了python-dotenv时,Flask在加载环境变量的优先级是:手动设置>.env中设置的>.flaskenv中设置的。
安装python-dotenv:
1 | pip install python-dotenv |
创建环境变量文件:
1 | touch .env |
.flaskenv
用来存储和Flask相关的公开环境变量,而.env
用来存储包含敏感信息的环境变量。
可以添加
.flaskenv
和.env
到.gitignore
文件中,防止提交。
4. 运行参数
1 | flask run --debug #开启调试模式 |
5. 重载器
自动监测文件改动:
1 | pip install watchdog |
0x04 Python Shell
在开发Flask程序时候,我们并不直接使用python命令启动Python Shell,而是使用flask shell
命令:
1 | flask shell |
0x05 配置
一个项目中会用到很多配置:Flask提供的配置,扩展提供的配置,还有程序特定的配置。这些配置通过Flask对象的app.config属性做统一设置和获取。可以像在字典中添加一个键值方式设置一个配置:
1 | app.config['ADMIN_NAME'] = 'Peter' |
使用upload()
方法一次加载多个配置:
1 | app.config.update( |
0x06 URL与端点
调用url_for(endpoint)
获取URL,endpoint一般为视图函数的函数名,如果URL包含动态部分,那么我们需要在url_for()函数中传入相应的参数。
1 |
|
这时使用url_for('greet',name = 'Jack')
得到的URL为/hello/Jack
。
在使用
ulr_for()
函数时,将_external
参数设置为True,这会产生完整的URL,url_for('greet', _external = True)
0x07 Flask命令
通过创建任意一个函数,并为其添加app.cli.command()
装饰器,我们就可以注册一个flask命令。
1 | from flask import Flask |
函数的名称即为命令名称。
1 | flask hello |
也可以在@app.cli.command()
装饰器中传入参数来设置命令,比如@app.cli.command(say-hello)
1 | flask say-hello |
0x08 Flask与MVC架构
最基本结构:
1 | hello/ |
处理请求并生成响应的函数被成为“视图函数”(View function)其实并不合理,这个命名的约定来自Werkzeug,而Werkzeug的URL匹配主要参考了Routes,再往前追溯,Routes的实现又参考了Ruby on Rails。在Ruby on Rails中,术语views用来表示MVC架构中的View。在MVC架构中,程序被分为三个组件:数据处理(Model)、用户界面(View)、交互逻辑(Controller)。如果套用MVC架构的内容,那么Flask中视图函数名称其实不严谨,使用控制器函数(Controller function)更合适些。如果硬要套用MVC架构,那么视图函数可以作看控制器(Controller),而视图则是Jinja2渲染的HTML模版,模型则是SQLAlchemy来实现。