Flask的简单认识

一. Flask的启动

from flask import Flask

app = Flask(__name__)

app.run()
三行代码启动Flask
from flask import Flask

app = Flask(__name__)

@app.route("/index")    # 路由
def index():                  # 视图  
    return "Hello World!"

app.run()    
六行代码启动并响应

二. Flask的响应

  from flask import template_render, redirect

  1. 和djangp对应的response

    HTTPResponse  return        返回字符串

    render       template_render    返回html页面 

    redirect      redirect       重定向

  2. Flask封装的response

    send_file("src")    打开并返回文件内容, 响应头Content-Type: 文件类型/格式

    jsonify({k:v})      返回一个json格式字符串, Content-Type:application/json

三. Flask的请求

  from flask import request

  request.method    请求方式get post 

  request.args       获取url中的参数, 本质上可以理解为字典 to_dict()

  request.form       获取FormData中的数据, 本质上可以理解为字典 to_dict()

  request.files      获取FormData中的文件数据, 是一个FileStorage对象 save(文件路径)

  request.values      获取请求体中的原始数据, byte类型

  request.path      获取当前访问路径

四. Flask的模板Jinja2

  {{ 变量 }}

  {% 逻辑 %}

五. Flask的路由

  1. 创建路由的两种方式

from flask import Flask

app = Flask(__name__)

@app.route("/index")    # 第一种添加路由的方式
def index():
    return "This is index"

app.add_url_rule("/index", view_func=index)

if __name__ == "__main__":
    app.run()
FBV
from flask import Flask, views

app = Flask(__name__)

class Index(views.MethodView):
    methods = []
    decorators = []
    
    def get(self):
        return "get请求"

    def post(self):
        return "post请求"

app.add_url_rule("/index", view_func=Index.as_view(name=""index))

app.run()
CBV

  2. 路由的配置参数

    methods = [get, post]    允许执行视图函数的请求方式

    endpoint = "xxx"       路由Mapping, 类似别名, url_for(endpoint), 反向解析url地址

    strict_slashes=True       是否严格遵循路由匹配 - "/"结尾 默认值是 True 必须严格遵循

    defaults={"nid":3}         默认路由参数 - 视图函数中必须有一个nid(key)的形参接收

    redirect_to="/index"       永久重定向 301/?308 - 不进入试图函数处理,直接跳转

  3. 路由的动态参数

@app.route("/getImg/<path>/<filename>")
def get_img(path, filename):
    file_path = os.path.join(path, filename)
    return send_file(file_path)
带有参数的动态路由

六. Flask的配置

  1. Flask初始化配置

    app = Flask(__name__)

    template_folder="templates"    指定模板存放路径

    static_folder="static"         指定静态文件存放路径

    static_url_path=None          指定静态文件访问路径, 前端拼路径时用, 默认为 "/" + static_folder

    static_host=None         静态文件的存放服务器

  2. Flask对象配置

    app.default_config        默认配置, ImmutableDict类型

    app.config["DEBUG"] = True    配置DEBUG

    app.config.from_object(Obj)    从Obj类属性种导入

class Obj:
    
    DEBUG = Ture

default_config = ImmutableDict({
    'ENV':                                  None,
    'DEBUG':                                None,
    'TESTING':                              False,
    'PROPAGATE_EXCEPTIONS':                 None,
    'PRESERVE_CONTEXT_ON_EXCEPTION':        None,
    'SECRET_KEY':                           None,
    'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),
    'USE_X_SENDFILE':                       False,
    'SERVER_NAME':                          None,
    'APPLICATION_ROOT':                     '/',
    'SESSION_COOKIE_NAME':                  'session',
    'SESSION_COOKIE_DOMAIN':                None,
    'SESSION_COOKIE_PATH':                  None,
    'SESSION_COOKIE_HTTPONLY':              True,
    'SESSION_COOKIE_SECURE':                False,
    'SESSION_COOKIE_SAMESITE':              None,
    'SESSION_REFRESH_EACH_REQUEST':         True,
    'MAX_CONTENT_LENGTH':                   None,
    'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),
    'TRAP_BAD_REQUEST_ERRORS':              None,
    'TRAP_HTTP_EXCEPTIONS':                 False,
    'EXPLAIN_TEMPLATE_LOADING':             False,
    'PREFERRED_URL_SCHEME':                 'http',
    'JSON_AS_ASCII':                        True,
    'JSON_SORT_KEYS':                       True,
    'JSONIFY_PRETTYPRINT_REGULAR':          False,
    'JSONIFY_MIMETYPE':                     'application/json',
    'TEMPLATES_AUTO_RELOAD':                None,
    'MAX_COOKIE_SIZE': 4093,
})
自定义Obj类

七. Flask的蓝图

  蓝图Blueprint, 就是一个不能run的flask对象

  1. 创建蓝图

from flask import Blueprint

bp = Blueprint("bp", __name__, url_prefix="/bp")

@bp.route("/index")
def index():
    return "这是bp蓝图中的index"
Flask蓝图的创建

  2. 注册蓝图

    app.register_blueprint(pb)

八. Flask的特殊装饰器

  1. 三个特殊装饰器

    @app.before_request    执行视图函数之前, 所要装饰的函数

    @app.after_request     执行完视图函数之后, 发出响应之前, 索要装饰的函数

    @app.errorhandler(405)   重新定义错误返回信息, 只能定义错误状态码

  2. 执行顺序

    正常执行顺序: before_request1 => before_request2 => view_function => after_request2 => after_request1

    异常执行顺序: before_request1 => after_request2 => after_request1

  

原文地址:https://www.cnblogs.com/q767498226/p/11095435.html