• flask 杂记


    参考资料:http://python.jobbole.com/84003/  https://flask-cn.readthedocs.io/en/latest/tutorial/

    加载配置:

    app = Flask(__name__)
    app.config.from_object(__name__)

    from_object() 会识别给出的对象(如果是一个字符串,它 会自动导入这个模块),然后查找所有已定义的大写变量。在我们这个例子里,配置 在几行代码前。你也可以把它移动到一个单独的文件中。

    app.config.from_envvar('FLASKR_SETTINGS', silent=True)

    silent参数是为了告诉Flask不要报错,即使没有设置 环境变量

     ===================

    从 _future_ 中的import内容要在所以import的最前面

    from __future__ import with_statement
    from contextlib import closing

    ===================

    from flask import g

    @app.before_request def before_request(): g.db
    = connect_db() @app.after_request def after_request(response): g.db.close() return response

    用 before_request() 装饰的函数在每次请求之前 被调用,它没有参数。用 after_request() 装饰的函数是在每 次请求结束后被调用,而且它需要传入response。这类函数必须返回同一个response 对象或者一个不同的response对象

    我们把当前的数据库连接保存在一个特殊的对象 g 里面,这个对象 flask已经为我们提供了。这个对象只能用来为一个请求保存信息,每一个函数都可以 访问这个对象。不要用其他的对象来保存信息,因为在多线程的环境下会无法工作。 g 对象是一个特殊的对象,它会在后台做一些魔术来确保它能够跟我 们预想的一样执行

    ===========================

     我们的模版将使用 Jinja2 的格式,而且默 认是打开自动转义的。这也就是说,除非我们在代码中用 Markup 标记一个值,或者在模版中用 |safe 过滤器,否则Jinja2会将一些特殊字符, 如 < 或 > 用XML格式来转义

    ========================报错邮件

    ADMINS = ['yourname@example.com']
    if not app.debug:
        import logging
        from logging.handlers import SMTPHandler
        mail_handler = SMTPHandler('127.0.0.1',
                                   'server-error@example.com',
                                   ADMINS, 'YourApplication Failed')
        mail_handler.setLevel(logging.ERROR)
        app.logger.addHandler(mail_handler)

    我们创建了一个新的类 SMTPHandler ,他 将通过 127.0.0.1 的邮件服务器向所有的 ADMINS 用户发送标题为“YourApplication Failed” 邮件,并且将发件地址配置为 server-error@example.com 。此外,我们还提供了对 需要证书的邮件服务器的支持

    ==================配置

    在Flask中,有一个现成的保存、载入的对象,就是 Flask 类中的 config 对象。在这个对象中Flask不仅存放自己的配置,还存放拓展插件的配置,而且也存放你对于自己应用的自己的配置。

    =================

    怎么拿到应用程序的当前配置呢?使用 current_app:

    from flask import current_app, Blueprint, render_template
    admin = Blueprint('admin', __name__, url_prefix='/admin')
    
    @admin.route('/')
    def index():
        return render_template(current_app.config['INDEX_TEMPLATE'])

     =================日志

    import logging
    from logging.handlers import SysLogHandler
    syslog_handler = SysLogHandler()
    syslog_handler.setLevel(logging.WARNING)
    app.logger.addHandler(syslog_handler)

     ==============

    常见的request客户端变量

    request.json 获取从客户端从请求body获取的json字符串

    Request.files 获取从客户端请求过来的文件

    request.data:获取的是非表单以post,提交的数据

    request.form:获取的表单以post方式提交的数据

    request.args:获取的是问号后面的查询参数(是个字典MultiDict也是字典,字典的形式有很多,但是都是key:value的方式)

    request.method:获取的请求方式

    request.url:获取的是请求的地址

    request.files:获取的是input标签中type类型为file的文件

    ===============

    在app.config对象中保存了flask的默认配置以及我们项目中写入的配置变量

    =============

    自定义参数类型(自定义转换器)

    背景:如果系统提供的int,float等参数类型满足不了需求的时候,我们需要自定义

    之所以int,float,path可以接受不同的数据类型,是因为,系统已经提供好了对应的转换器了

    自定义转换器格式:

    1、定义类,继承自BaseConverter

    2、重写init方法,去接收两个参数

    3、初始化父类成员变量,还有子类自己的规则

    4、将转换器类,添加到系统默认的转换器列表中

    ========================

    返回响应

    1、直接返回响应体数据

    return ‘字符串’

    2、直接返回响应体数据、状态码

    return ‘字符串’,'状态码'

    3、直接返回响应体数据、状态码、响应头信息

    return '字符串',状态码,{'key':'value'}

    通过jsonify返回json数据

    格式:jsonify(dict)

    简化格式:jsonify(key=value,key2=value2)

    ===================

    1、从配置类(对象)中加载

    app.config.from_object(obj)

    2、从配置文件中加载

    app.config.from_pyfile(file)

    file可以是文件,我们可以写txt格式,ini格式(有颜色提示)等。直接将文件的路径填写进file的位置即可

    3、从环境变量中加载(做了解)

    app.config.from_envvar(环境变量)

    ===================

    常见的请求钩子有四种:

    1.before_first_request:在处理第一个请求前执行

    里面适合做初始化操作,比如io文件读写

    2.before_request:在每次请求前执行,在该装饰函数中,一旦return,视图函数不再执行

    适合对请求参数做校验,访问统计

    3.after_request:如果没有抛出错误,在每次请求后执行

    接受一个参数:视图函数作出的响应

    视图函数执行之后,返回该方法,适合对返回值做统一处理,比如返回统一的json数据格式

    接收的参数是将视图函数的返回值打包之后的响应体信息。

    在此函数中可以对响应值,在返回之前做最后一步处理,再返回

    4.teardown_request:不管是否有异常,注册的函数都会在每次请求之后执行

    接受一个参数:用来接收错误信息

    请求销毁之后执行,执行该方法,适合做异常信息统计。在工作中,我们可以将这些异常信息放进文件中,方便我们隔一段时间进行查看。

    =================

     flask提供了jsonify函数供用户处理返回的序列化json数据,而python自带的json库中也有dumps方法可以序列化json对象

    ============

    使用flask中提供好的方法,快速将前端的json数据转成dict

    传统方法,json转字典

    1/json_data = request.data

    2/dict_data = json.loads(json_data)

    快速将json转字典的方法:

    dict_data = request.json

    或者dict_data = request.get_json()

    ===================

  • 相关阅读:
    数据库自定义表值函数Split(@LongStr, @SplitStr, @IsDistinct )
    牛客_{}大括号里面的内容都会执行,如果它不是成员函数的时候,看成是构造函数中的方法;
    剑指offer——替换字符串
    剑指offer_快速查找递增二维数组中是否存在目标
    IP地址理解_IP地址=网络地址+主机地址,但是具体前面多少是网络地址看题目说明
    TCP/IP三次握手
    牛客_剑指offer_重建二叉树,再后续遍历_递归思想_分两端
    牛客OJ——[编程题]A+B和C__如何输入多组测试数据(测试OK)
    学术_聚类种类分析(1)(转载)
    HW-找7(测试ok满分注意小于等于30000的条件)
  • 原文地址:https://www.cnblogs.com/testzcy/p/10975621.html
Copyright © 2020-2023  润新知