【Flask开发】1. 安装与配置
介绍
Flask是一个使用Python编写的轻量级 Web 应用框架。其WSGI工具箱采用 Werkzeug ,模板引擎则使用 Jinja2。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
之所以说Flask是微框架,因为它仅仅实现了Web应用的核心功能:Flask由两个主要依赖组成(提供路由、调试和Web服务器网关接口的Werkzeug和提供模板的Jinja2)。其他的一切(比如数据库集成,表单处理,文件上传,用户认证)都由第三方库来完成,如果插件满足不了你的需求,你也可以自行开发。
安装
pip install Flask
目录管理
官方文档推荐使用的目录结构:
/home/user/FlaskProject/
├── apps /蓝图
│ ├── __init__.py / 这里创建app对象函数,并注册蓝图
│ ├── user
│ │ ├── __init__.py
│ │ ├── model.py
│ │ ├── view.py
│ ├── article
│ ├── auth.py
│ ├── blog.py
├── templates/ 模板文件
│ ├── base.html
│ ├── auth/
│ │ ├── login.html
│ │ └── register.html
│ └── blog/
│ ├── create.html
│ ├── index.html
│ └── update.html
├── static/ 静态文件
│ └── style.css
├── setup.py
└── app.py //调用app创建函数,使用flask script 和 Migrate 管理app
├── tests/
│ ├── conftest.py
│ ├── data.sql
│ ├── test_factory.py
│ ├── test_db.py
│ ├── test_auth.py
│ └── test_blog.py
├── venv/
作为一个项目开发者,良好的项目目录结构管理习惯一定要有。
python推荐使用packages来组织管理大型项目,这里练习也一定要跟上规范。
- flaskr, a Python package containing your application code and files.
- tests/, a directory containing test modules.
- venv/, a Python virtual environment where Flask and other dependencies are installed.
- setup.py Installation files telling Python how to install your project.
- .gitignore Version control config, such as Git. You should make a habit of using some type of version control for all your projects, no matter the size.
.gitignore 一些不需要git版本管理的文件和目录
venv/
*.pyc
__pycache__/
instance/
.pytest_cache/
.coverage
htmlcov/
dist/
build/
*.egg-info/
Hello World
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/') # 路由
def sayhello():
return "Flask Here!"
if __name__ =='__main__':
app.run()
必须在项目中导入Flask模块。Flask类的一个对象是我们的WSGI应用程序。
Flask构造函数使用**当前模块(__name __)的名称作为参数。
Flask类的route()**函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数。
(base) root@3f4f62e00e25:/home/ay/Flask# /opt/conda/bin/python /home/ay/Flask/app/hello.py
* Serving Flask app "hello" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
在最新的flask版本中建议使用如下启动方式
(base) ➜ FlaskE git:(master) ✗ export FLASK_APP=Hello.py
(base) ➜ FlaskE git:(master) ✗ flask run
调试器
报错信息显示到前端页面。
export FLASK_DEBUG=1
程序加载配置
在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:
-
从配置对象中加载(常用)
app.config.from_object()
-
从配置文件中加载
app.config.from_pyfile()
-
从环境变量中加载(了解)
app.config.from_envvar()
以下演练以设置应用程序的 DEBUG(调试模式) 为例,设置应用为调式模式这后,可以实现以下功能:
程序代码修改后可以自动重启服务器
在服务器出现相关错误的时候可以直接将错误信息进行抛出到控制台打印
使用方式
1. 从配置对象中加载,创建配置的类
配置对象,里面定义需要给 APP 添加的一系列配置
class Config(object):
'''
所有的配置项目都需要大写
'''
SECRET_KEY= "sdfadsfaskdfoiquwrei"
DEBUG = True
# 设置配置类
app.config.from_object(Config)
# 读取 打印
@app.route("/")
def index():
print(app.config['SECRET_KEY'])
return "Hello world!"
2. 从配置文件中加载配置
app.config.from_pyfile('config.py')
3. 环境变量(了解)
export 变量名=变量值
echo $变量名
app.config.from_envvar('FLASKCONFIG')
读取配置app.config.get()
在视图函数中使用 current_app.config.get()
4. app.run的参数
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
新式的Flask运行方式
(venv) ➜ Flask export FLASK_APP=HelloWorld
(venv) ➜ Flask flask run
* Serving Flask app 'HelloWorld' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) (venv) ➜ Flask export FLASK_ENV=development
(venv) ➜ Flask flask run
* Serving Flask app 'HelloWorld' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 698-047-949
Flask_Script
Flask插件,可以自定义脚本,主要功能是添加命令行参数。
https://flask-script.readthedocs.io/en/latest/
- 安装
- pip install flask_scripts
- 初始化
- 使用app构建Manager对象
- 调用
- runserver
- -d //debuge
- -r //reload
- -p //port
- -h //host
- --threaded
- shell
- runserver
from flask_script import Manager
from apps import create_app
app = create_app()
manager = Manager(app) # 给app套了一个壳子
if __name__=='__main__':
manager.run()
命令启动方式
python app.py runserver --help
python app.py runserver -h 0.0.0.0 -p 8888 -d