参考资料: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()

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

flask 杂记的更多相关文章

  1. flask 杂记3

    SQLAlchemy在模型之间建立关系模式:  https://www.bbsmax.com/A/mo5k7gKn5w/ 一对多时:外键只能存储单一数据(标量),所以外键总是在“多”这一侧定义,多篇文 ...

  2. flask 杂记2

    添加属性 @property def password(self): return self._password @password.setter def password(self, raw): s ...

  3. [Flask]学习杂记--模板

    这个学习杂记主要不是分享经验,更多是记录下falsk的体验过程,以后做东西在深入研究,因为django之前用的时间比较长,所以很多概念都是一看而过,做个试验了解下flask的功能. flask中使用是 ...

  4. [Flask]学习杂记一 Hello程序

    这几天买了本  <Flask Web开发:基于Python的Web应用开发实战>,之前也用过flask 但是不怎么系统,有时候需要搭建一些临时的测试服务,用falsk比较方面,一个文件就可 ...

  5. 使用Nginx+Uwsgi部署Python Flask项目

    第一次用Flask做Web(也是第一次用Python做Web),在部署的时候遇到了不少问题,现在将过程就下来,供在这方面也有疑惑的人参考.(PS:使用Apache+mod_wsgi部署模式的可以参考另 ...

  6. flask+sqlite3+echarts2+ajax数据可视化

    前提: 准备Python + Flask+Sqlite3的平台环境(windows系统) 前面一节介绍flask怎么安装了,剩下sqlite3下载后解压,然后环境变量添加解压路径就行了 附加下载地址: ...

  7. flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: 'utf8' codec can't decode byte解决方法

    flask+sqlite3+echarts2+ajax数据可视化报错: UnicodeDecodeError: 'utf8' codec can't decode byte 解决方法: 将 py文件和 ...

  8. Windows下快速安装Flask的一次经历

    前提: 1.已安装python版本(一般都是2.X) 2.已安装easy_install python安装,记得配置Python的环境变量,例如:我的直接在Path上加 G:\Python 验证安装P ...

  9. [Erlang 0118] Erlang 杂记 V

       我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下.    做笔记 一开始笔记软件做的不好的时候就发邮件给自己, ...

随机推荐

  1. 分布式缓存 - hash环/一致性hash

    一 引言 当前memcached,redis这类分布式kv缓存已经非常普遍.我们知道memcached的分布式其实是一种"伪分布式",也就是它的服务器节点之间其实是无关联的,之间没 ...

  2. 题解 CF437C

    基本思路---贪心 既然要求最小代价,当用一定顺序删除时代价一定最小,不难发现,每次都删去x,y中最小的,最后的总代价业一定最小! 因此就可以写出下面的简单的代码 代码 #include<ios ...

  3. python学习-19 字典

    字典dict 1.dic = {key:value,key:value} 字典有{ }括住,字典的value可以是任意值,字典的key的值不包括列表和字典 di = {"age": ...

  4. go 结构体2 文法

    结构体文法表示通过结构体字段的值作为列表来新分配一个结构体. 使用 Name: 语法可以仅列出部分字段.(字段名的顺序无关.) 特殊的前缀 & 返回一个指向结构体的指针. //分配的v1结构体 ...

  5. SAS学习笔记6 算数语句(sum、mean、min、max函数)

    sum:求和 mean:平均值 min:最小值 max:最大值

  6. sublime text 2 + Dev-C++/MinGW 组合配置更方便快捷的 C/C++ 编译环境

    首先看一下配置后的效果: 1.直接在底部文本框中显示运行结果(不需要从键盘输入的时候使用): 2.在cmd中运行结果(需要从键盘输入的时候使用): 快捷键说明: 运行: 在底部文本栏显示结果:Ctrl ...

  7. 谷歌(Google)学术镜像,谷歌镜像

    谷歌(Google)学术镜像,谷歌镜像 2019-09-03 15:32:26 Hinton-wu 阅读数 6743 文章标签: 谷歌google学术镜像 更多 分类专栏: 其他   版权声明:本文为 ...

  8. Jar包下载 开源网站 模板下载

    在日常的java学习和开发中,总是遇到各种jar包下载,但是CSDN这种坑爹网站,各位码农们都想挣点C币,一个开源的免费的东西就这么变了味,我这里收集 了一些好用的工具,日常开发中需要用的请自取,毕竟 ...

  9. pickle 和 base64 模块的使用

    pickle pickle模块是python的标准模块,提供了对于python数据的序列化操作,可以将数据转换为bytes类型,其序列化速度比json模块要高. pickle.dumps() 将pyt ...

  10. springboot启动流程(九)ioc依赖注入

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 正文 在前面的几篇文章中,我们多次提到这么一个转化过程: Bean配置 --> Bean ...