zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    c++,不能声明为虚函数的函数
    Abstract
    多态性vptrvtable
    C++的重写,重载,重定义
    final
    scanf()和getchar() 使用
    深入理解C++中的mutable关键字
    equal和==
    MoQ(基于.net3.5,c#3.0的mock框架)简单介绍
    VS2008快捷键
  • 原文地址:https://www.cnblogs.com/q767498226/p/11095435.html
Copyright © 2011-2022 走看看