最小的服务
2024年4月25日大约 4 分钟
Flask
django
是大而全,提供所有常用的功能flask
是小而精,只提供核心功能
环境配置
- 命令直接安装:
pip install flask==1.1.2
- 使用环境依赖文件
requirements.txt
,提供命令pip install -r requirements.txt
基本流程
- 创建
flask
APP - 定义视图函数
- 使用装饰器,配置路由
- 直接运行APP
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "hello Flask"
if __name__ == '__main__':
app.run()
项目配置
配置对象
- 提供
config
对象直接设置即可,适用于 少量的配置项
import os
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
@app.route('/')
def hello():
return "hello Flask"
if __name__ == '__main__':
app.run()
配置文件
通过专门的配置文件,读取配置项,适用于配置项较多
config.py
class Config(object):
DEBUG = True
主模块
import os
from flask import Flask
app = Flask(__name__)
app.config.from_object('config.Config')
@app.route('/')
def hello():
return "hello Flask"
if __name__ == '__main__':
app.run()
from_object
和from_pyfile
的区别
from_object
接受的是一个模块对象,需求import config
导入;- 先创建
config.py
- 从主模块中导入
- 先创建
import config
app = Flask(__name__)
app.config.from_object('config')
- from_pyfile接受的是一个
文件名
,文件可以是.py
文件也可以是.txt
文件等等;
app = Flask(__name__)
app.config.from_pyfile("config.py",silent=True)
# silent=True表示如果配置文件不存在的时候不抛出异常,默认是为False,会抛出异常。
环境变量
通过环境变量导入, 有些配置项和电脑环境有关系,需要从电脑读取,不能写死
import os
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = os.getenv('DEBUG') if os.getenv('DEBUG') else True
@app.route('/')
def hello():
return "hello Flask"
if __name__ == '__main__':
app.run()
路由映射
指明请求方法
Web 应用使用不同的 HTTP 方法处理 URL 。当你使用 Flask 时,应当熟悉 HTTP 方法。 缺省情况下,一个路由只回应 GET
请求。 可以使用 route()
装饰器的 methods
参数来处理不同的 HTTP 方法:
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()
如果当前使用了 GET 方法, Flask 会自动添加 HEAD
方法支持,并且同时还会 按照 HTTP RFC 来处理 HEAD
请求。同样, OPTIONS
也会自动实现。
唯一的 URL / 重定向行为
以下两条规则的不同之处在于是否使用尾部的斜杠。
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
projects
的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。
about
的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。
查看所有路由映射
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "hello flask"
@app.route('/post_only', methods=["POST"])
def post_only():
return "post only page"
if __name__ == '__main__':
# 通过url_map可以查看整个flask中的路由信息
print(app.url_map)
# 启动flask程序
app.run(debug=True)
项目启动
命令行启动
注意: flaskAPP所在的文件,应该是
app.py
$ ls
app.py config.py
$ flask run -h 0.0.0.0 -p 7000 # 指定网络ip和端口号
* 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 all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://192.168.0.105:7000/ (Press CTRL+C to quit)
代码运行
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "hello Flask"
if __name__ == '__main__':
# app.run(host='0.0.0.0', port=7000, debug=True)
Flask.run(self=app, host='0.0.0.0', port=7000, debug=True)
工厂模式
如果在一个函数中 创建对象,那么就可以创建多个实例。
那么这样做有什么用呢?
- 用于测试。可以针对不同的情况使用不同的配置来测试应用。
- 用于多实例,如果你需要运行同一个应用的不同版本的话。当然你可以在服务器上 使用不同配置运行多个相同应用,但是如果使用应用工厂,那么你可以只使用一个 应用进程而得到多个应用实例,这样更容易操控。
app/__init__.py
from flask import Flask
def create_app(config_file_name=''):
app = Flask(__name__)
app.config.from_pyfile(config_file_name, silent=True)
return app
主模块
from app import create_app
app = create_app()
@app.route('/')
def hello():
return "hello Flask"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7000, debug=True)