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

      

  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/q767498226/p/11095435.html
Copyright © 2011-2022 走看看