python案例中Flask全局配置示例详解

目录
  • WEB服务全局配置
  • Flask全局配置
    • before_request
    • after_request
  • Flask自定义中间件

WEB服务全局配置

在目前的开发过市场当中,有很多WEB服务框架,Flask只是其中之一,但是总体上来看,所有的WEB框架都是依据HTTP协议的逻辑从请求到响应设计的。固然有很多功能是独立的,但是也有一部分功能需要全局设定,比如安全校验,比如埋点日志,那么这里就用到了全局配置。

所谓的全局配置,就是在框架全局,请求前后,响应前后,设置的全局配置,比如登录校验,这个功能并不是针对单个页面,而是针对所有页面的操作,当然可以一个页面一个页面的实现,但是更好的办法就是在请求进入视图之前,就开始校验,这样也可以降低服务器的部分压力,那么这样全局设置就是一个很好的方法。

Flask全局配置

flask 同样也设置了全局的配置,常用的有以下两种:

before_request

在请求之前执行,一般用在对请求内容的过滤的场景下。一般使用的时候需要结合flask本身的request方法。

默认采用装饰器的方式使用

from flask import Flask
from flask import request
app = Flask(__name__)
@app.before_request
def ip_filter():
    black_list = [
        "127.0.0.1"
    ]
    remote_addr = request.remote_addr #获取请求用户ip
    if remote_addr in black_list:
        return "Not Allowed",405
@app.route("/index")
def index():
    return "index"
if __name__ == '__main__':
    app.run()

这个时候,如果采用本地ip访问,就会返回405状态,拒绝访问。

当然也可以不采用装饰器使用,其实原理上是一样的:

类似代码就全部注释了,嘿嘿嘿

from flask import Flask
from flask import request
app = Flask(__name__)
#....
app.before_request(ip_filter)
#....
if __name__ == '__main__':
    app.run()

after_request

在请求处理完成执行,这里可以对全局的响应进行配置,比如,全局设置json响应格式,但是需要注意的是after_request的函数必须设置参数接收response对象,这个response对象就是视图返回的的对象。

from flask import Flask
app = Flask(__name__)
@app.route("/index")
def index():
    return {"data": {"nav":["index","news_list"]},"message": "success", "error_code": 1}
@app.after_request
def after_request_fun(response):
    response_format = {"data": {},"message": "success", "error_code": 1}
    if response.content_type == "application/json": #如果返回数据的类型是json
        json_data = response.json
        response_format.update(json_data)
    return response
# app.after_request(after_request_fun) 第二种写法
if __name__ == '__main__':
    app.run()

其他一些全局方法也列在这里吧:

方法 描述
before_first_request 服务器启动第一次请求之前执行,一般初始化一些数据使用
teardown_request 比较难理解,直接和请求上下文环境挂钩. 只有在请求上下文被 pop 出请求栈的时候才会触发,需要先去看看flask请求上下文
errorhandler 发生错误时执行,需要提前定义号错误句柄,被触发的前提是 view_function 中抛出了错误
template_global 前后端不分离,jinja2全局变量,比如用户状态可以设置在这里
template_filter 之前聊过的全局jinja2过滤器

Flask自定义中间件

flask 支持通过自定义类来替换Flask本身的wsgi_app,当然,简单的修改建议保留原来的wsgi_app对象

from flask import Flask
app = Flask(__name__)
@app.route("/index")
def index():
    return {"data": {"nav":["index","news_list"]},"message": "success", "error_code": 1}
class MiddleWare:
    def __init__(self, old_wsgi_app):
        self.old_wsgi_app = old_wsgi_app
    def __call__(self, environ, start_response):
        print('类似before_request')
        ret = self.old_wsgi_app(environ, start_response)
        print('类似after_request')
        return ret
if __name__ == '__main__':
    app.wsgi_app = MiddleWare(app.wsgi_app)
    app.run()

以上就是python案例中Flask全局配置示例详解的详细内容,更多关于python Flask全局配置的资料请关注我们其它相关文章!

(0)

相关推荐

  • python编程Flask框架简单使用教程

    目录 基础知识 使用框架的优点: Flask常用扩展包: 基本格式: 拓展: return 重定向 取网址参数 content-type cookie\session flask路由 request属性 上下文 注册路由 基础知识 使用框架的优点: 稳定性和可扩展性强 可以降低开发难度,提高了开发效率 Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架 Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件

  • Elasticsearches之python使用及Django与Flask集成示例

    目录 Elasticsearch之Python使用 Elasticsearch之Django/Flask集成 elasticsearch-dsl django集成 Elasticsearch之Python使用 from elasticsearch import Elasticsearch obj = Elasticsearch() # 创建索引(Index) result = obj.indices.create(index='user', body={"userid":'1','us

  • python自动化测试中APScheduler Flask的应用示例

    目录 使用背景 什么是 APScheduler 框架? APScheduler 框架包含四个组成部分 APScheduler 在 flask 中使用 编写任务函数,开始 APScheduler 的调度 部分项目代码 总结 使用背景 实际项目中,需要验证打点数据在各个系统中收集是否一致,而部分节点打点数据收集是通过异步任务实现的,等待时间比较久.为应对业务异步操作处理,实现异步数据的收集,经过调研后,选择了 APScheduler 框架. 什么是 APScheduler 框架? APSchedul

  • Python Flask 上传文件测试示例

    目录 Flask file upload代码 上传测试 上传临时文件 使用 tempfile 使用 StringIO 其他 Flask file upload代码 import os from flask import Flask, request, redirect, url_for, send_from_directory from werkzeug.utils import secure_filename UPLOAD_FOLDER = '/tmp/flask-upload-test/'

  • python案例中Flask全局配置示例详解

    目录 WEB服务全局配置 Flask全局配置 before_request after_request Flask自定义中间件 WEB服务全局配置 在目前的开发过市场当中,有很多WEB服务框架,Flask只是其中之一,但是总体上来看,所有的WEB框架都是依据HTTP协议的逻辑从请求到响应设计的.固然有很多功能是独立的,但是也有一部分功能需要全局设定,比如安全校验,比如埋点日志,那么这里就用到了全局配置. 所谓的全局配置,就是在框架全局,请求前后,响应前后,设置的全局配置,比如登录校验,这个功能并

  • Python中图像算术运算的示例详解

    目录 介绍 算术运算:图像相加 算术运算:图像减法 位运算 介绍 还记得你在小学时学习如何加减数字吗?现在,你也可以对图像做同样的事情! 输入图像可以进行算术运算,例如加法.减法和按位运算(AND.OR.NOT.XOR).这些操作可以帮助提高输入照片的质量. 在本文中,你将了解使用 OpenCV Python 包对图像执行算术和按位运算的步骤.让我们开始吧! 对图像进行算术运算是什么意思? 因此,假设我们希望合并两张单独的照片中的两个像素.我们怎样才能将它们合并? 让我们想象以下场景.第一个像素

  • Python机器学习从ResNet到DenseNet示例详解

    目录 从ResNet到DenseNet 稠密块体 过渡层 DenseNet模型 训练模型 从ResNet到DenseNet 上图中,左边是ResNet,右边是DenseNet,它们在跨层上的主要区别是:使用相加和使用连结. 最后,将这些展开式结合到多层感知机中,再次减少特征的数量.实现起来非常简单:我们不需要添加术语,而是将它们连接起来.DenseNet这个名字由变量之间的"稠密连接"而得来,最后一层与之前的所有层紧密相连.稠密连接如下图所示: 稠密网络主要由2部分构成:稠密块(den

  • python可视化大屏库big_screen示例详解

    目录 big_screen 特点 安装环境 输入数据 本地运行 在线部署 对于从事数据领域的小伙伴来说,当需要阐述自己观点.展示项目成果时,我们需要在最短时间内让别人知道你的想法.我相信单调乏味的语言很难让别人快速理解.最直接有效的方式就是将数据如上图所示这样,进行可视化展现. 具体如下: big_screen 特点 便利性工具, 结构简单, 你只需传数据就可以实现数据大屏展示. 安装环境 pip install -i https://pypi.tuna.tsinghua.edu.cn/simp

  • python机器学习Sklearn实战adaboost算法示例详解

    目录 pandas批量处理体测成绩 adaboost adaboost原理案例举例 弱分类器合并成强分类器 pandas批量处理体测成绩 import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt data = pd.read_excel("/Users/zhucan/Desktop/18级高一体测成绩汇总.xls") cond =

  • Python MySQL数据库基本操作及项目示例详解

    目录 一.数据库基础用法 二.项目:银行管理系统 1.进行初始化操作 2.登录检查,并选择操作 3.加入查询功能 4.加入取钱功能 5.加入存钱功能 一.数据库基础用法 要先配置环境变量,然后cmd安装:pip install pymysql 1.连接MySQL,并创建wzg库 #引入decimal模块 import pymysql #连接数据库 db=pymysql.connect(host='localhost',user='root',password='1234',charset='ut

  • Python开发自定义Web框架的示例详解

    目录 开发自定义Web框架 1.开发Web服务器主体程序 2.开发Web框架主体程序 3.使用模板来展示响应内容 4.开发框架的路由列表功能 5.采用装饰器的方式添加路由 6.电影列表页面的开发案例 开发自定义Web框架 接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务.根据请求资源路径的后缀名进行判断: 如果请求资源路径的后缀名是.html则是动态资源请求, 让web框架程序进行处理. 否则是静态资源请求,让web服务器程序进行处理. 1.开发Web服务器主体程序 1.

  • Python实现解析ini配置文件的示例详解

    目录 楔子 ini 文件 特殊格式 小结 楔子 在开发过程中,配置文件是少不了的,只不过我们有时会将 py 文件作为配置文件(config.py),然后在其它的模块中直接导入.这样做是一个好主意,不过配置文件是有专门的格式的,比如:ini, yaml, toml 等等. 而对于 Python 而言,也都有相应的库来解析相应格式的文件,下面我们来看看 ini 文件要如何解析. ini 文件 先来了解一下 ini 文件的格式: [satori] name = 古明地觉 age = 16 where 

  • Python利用pythonping处理ping的示例详解

    目录 简介 历史攻略 Ping命令可以进行以下操作 安装 案例源码1 案例源码2 简介 ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序 .Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态.ping用于确定本地主机是否能与另一台主机成功交换(发

  • python人工智能算法之决策树流程示例详解

    目录 决策树 总结 决策树 是一种将数据集通过分割成小的.易于处理的子集来进行分类或回归的算法.其中每个节点代表一个用于划分数据的特征,每个叶子节点代表一个类别或一个预测值.构建决策树时,算法会选择最好的特征进行分割数据,使每个子集中的数据尽可能的归属同一类或具有相似的特征.这个过程会不断重复,类似于Java中的递归,直到达到停止条件(例如叶子节点数目达到一个预设值),形成一棵完整的决策树.它适合于处理分类和回归任务.而在人工智能领域,决策树也是一种经典的算法,具有广泛的应用. 接下来简单介绍下

随机推荐