1.CBV 模式 1.继承 views.MethodView from flask.views import MethodView 2.HTTP具有 8 种请求方法 - CBV中的方法 - GET 获取 - POST 增加 - DELETE 删除 - PUT 更新 - OPTIONS 跨域请求 - HEAD ? 3.例子 from flask import Flask from flask.views import MethodView app = Flask(__name__) class Login(MethodView): # decorators = [] # methods = ["GET", "POST"] def get(self): pass def post(self): pass app.add_url_rule(rule="/login", endpoint=None, view_func=Login.as_view(name="login")) - 此处 Login.as_view(name="login") 其中的 name 所指定的即 endpoint 所指定的 - 若 endpoint 不为 None 则 Login.as_view(name="login") 中指定的不会将其覆盖 -- 见源码 @setupmethod def add_url_rule( self, rule, endpoint=None, view_func=None, provide_automatic_options=None, **options ): if endpoint is None: endpoint = _endpoint_from_view_func(view_func) options["endpoint"] = endpoint --- 此处 _endpoint_from_view_func(view_func) 见源码, 返回值为 view_func.__name__ def _endpoint_from_view_func(view_func): assert view_func is not None, "expected view func if endpoint is not provided." return view_func.__name__ 综上, 若 endpoint 不等于 None 则直接使用 endpoint 参数被赋予的值 options["endpoint"] = endpoint 4.创建API建议使用CBV模式 2.串讲 Flask 1.Flask优势: - 轻量级框架, 扩展性强, 三方组件齐全 2.Flask劣势: - 过简, 只有 session 组件, 其他组件是第三方的, 稳定性相对较差 3.安装 pip3 install Flask 4.依赖包 - Jinja2 模板语言 - Flask 源码 - MarkupSafe 处理标签语言 - Werkzeug 封装 WSGI 的工具包, 承载 Flask 程序 -- - app.run() 本质上是执行run_simple() 见源码 def run(self, host=None, port=None, debug=None, load_dotenv=True, **options): ... from werkzeug.serving import run_simple try: run_simple(host, port, self, **options) finally: self._got_first_request = False 5.启动 from flask import Flask app = Flask(__name__) app.run("0.0.0.0", 9527) - 0.0.0.0 监听当前机器所有 IP 6.路由视图 @app.route(rlue="/index", methods=["GET", "POST"], endpoint="index") def index(): return "Hello" - endpoint 做 Mapping 使用 -> "/index": {"index": index} -- 可通过 url_for("endpoint_value") 进行反向解析, 得到 rule_value - methods 当前路由允许的请求方式 -- methods 默认为("GET",) 7.FlaskResponse - render_template() - redirect("") - HttpResponse -- [String, List, Tuple, Dict] --- return "String" --- return [String, List, Tuple, Dict] --- return (String, List, Tuple, Dict --- return {key: value} - Flask-1.1.1 新特性, 可以直接返回 dict 类型 - 本质上就是 jsonify * jsonify ** Response Heads 中 Content-Type:application/json ** Flask-1.1.1 新特性, 可以直接返回 dict 类型 - 本质上就是 jsonify * send_file 打开并返回文件内容, 自动识别文件类型 Content-Type:文件类型 ** 无法识别的文件类型触发下载(浏览器实现) 8.FlaskRequest - from flask import request 公共变量 LocalProxy 对象 ------ Django ------- == ----- Flask --------------------- -- request.POST.get() == request.form.get() -> .to_dict() | 获取FormData中的参数 -- request.GET.get() == request.args.get() -> .to_dict() | 获取URL中的参数 -- request.files.get() | 获取文件 -- request.method | 获取请求方式 -- request.path | 获取路由地址 -- request.url | 获取访问路径 -- request.host | 获取服务器地址 127.0.0.1:9000 -- request.host_url | 获取完整的服务器地址 http://127.0.0.1:9000 -- request.json | Content-Type:application/json 的请求数据 -- request.data | Content-Type 无法被识别, 或者是没有 form 的请求数据 9.session from flask import session app = Flask(__name__) app.secret_key = "!@#$%^&*()" - 使用 session 必须设置 secret_key 否则报错 ... session[