快速上手Flask(二) flask-restful以及全局响应配置

文章目录

快速上手Flask(二) flask-restful以及全局响应配置

什么是flask-restful

GitHub:https://github.com/flask-restful/flask-restful

英文文档:https://flask-restful.readthedocs.io/en/latest/

中文文档:http://www.pythondoc.com/Flask-RESTful/

Flask-RESTful 就是 Flask 扩展中的佼佼者,它增加了对快速构建 RESTful API 的支持,将 Flask 封装了一层,使其更容易、更快速、更便捷的开发 RESTful API。

REST API 通过 HTTP 请求进行通信,完成以下功能------创建、读取、更新和删除数据。它们也称为 CRUD 操作。REST 提供有关请求资源的信息,并使用四种方法来描述如何处理资源:

POST --- 创建资源;

GET --- 获取资源;

PUT --- 更新资源;

DELETE --- 删除资源。

flask-restful是flask模块的一个扩展,能够快速构建restful风格的api。对于其他的扩展也有很高的兼容性。

  • 资源类:Flask-RESTful 提供了一个 Resource 基类,可以用来创建资源。Resource 类包含了 HTTP 方法(GET、POST、PUT、DELETE 等)的处理逻辑,并提供了一些方便的方法来处理请求和响应。
  • 请求参数解析:Flask-RESTful 提供了一个 RequestParser 类,用于解析请求参数。RequestParser 可以自动将查询参数、表单参数、JSON 参数等解析成 Python 类型,并提供了一些选项来指定参数的类型、默认值、必须存在等限制条件。
  • 响应格式化:Flask-RESTful 提供了一个 marshal_with() 装饰器,用于格式化响应数据。marshal_with() 装饰器可以将 Python 对象转换成指定的输出格式(如 JSON、XML 等),并支持指定输出字段、字段类型、嵌套字段等功能。
  • 路由定义: Flask-RESTful 提供了一个 Api 类,用于定义路由和资源的映射关系。Api 类包含了 add_resource()方法,用于将资源类和 URL 路由绑定起来。
  • 异常处理:Flask-RESTful 提供了一些异常类,用于处理 HTTP 请求和响应中的错误。Flask-RESTful 的异常类包括 abort、HTTPException 等,可以方便地处理 HTTP 状态码、错误信息等。

安装flask_restful

bash 复制代码
pip3 install flask-restful

flask_restful 使用

Flask-RESTful 提供了一个 Resource 基础类,它能够定义一个给定 URL 的一个或者多个 HTTP 方法

bash 复制代码
from flask import Flask
from flask.ext.restful import Api, Resource

app = Flask(__name__)
api = Api(app)

class UserAPI(Resource):
    def get(self, id):
        pass

    def put(self, id):
        pass

    def delete(self, id):
        pass

api.add_resource(UserAPI, '/users/<int:id>', endpoint = 'user')

flask 使用@app.route 装饰器自定义路由

Flask 提供的 @app.route 装饰器来可以自定义路由,它是 Flask 中常用的方式。以下是使用 @app.route 装饰器实现自定义路由的示例:

python 复制代码
from flask import Flask

app = Flask(__name__)

# 路由类
@app.route('/myclassroute')
class MyRouter:
    def __init__(self):
        pass

    @app.route('/myroute')
    def my_route_handler(self):
        return 'This is my custom route!'

if __name__ == '__main__':
    app.run()

类装饰器 @app.route('/myclassroute') 中定义了类级别的路由。这将使整个类中的方法都与 /myclassroute 关联起来。

然后,在类中的方法上使用 @app.route('/myroute') 装饰器来定义方法级别的路由。这些方法级别的路由将与类级别的路由拼接起来,形成完整的路由路径。

在浏览器中访问 http://localhost:5000/myclassroute/myroute 时,将看到返回的文本 "This is my custom route!"。

全局响应配置

flask的自带的jsonify方法

使用flask写api是件很方便的事情, flask内部的jsonify方法可以轻松的返回json数据。

Flask是一个轻量级的Python Web框架,其设计目的是使得Web开发变得更加容易。Flask支持多种扩展库,Flask Jsonify是其中一个非常常用的扩展库。所谓的Jsonify,指的是将Python对象转换为Json对象。Flask Jsonify是Flask库中的一个函数,用来将Python数据结构转换为Json并返回到客户端。

jsonify返回的类型是 <class 'flask.wrappers.Response'>,一个JSON的响应(response)

jsonify 返回的Response中的几个属性:

  • headers : 设置请求头信息
  • status : String类型的数据,格式为这种:"200 ok"
  • status_code : int 类型,就是状态码,但是不能是自定义的状态码
  • data : 需要返回到前端的数据
  • set_cookie :设置cookie 的值
  • del_cookie :删除cookie ,不会立马删除浏览器上报错的cookie 值,会讲过期时间设置为当前时间,还是cookie 创建的时间,这样就表示过期了,浏览器会自动删除。

关键点: jsonify 返回的Response的headers属性为:Content-Type: application/json ,是标准的json格式。区别于josn.dumps(data)返回的Response的headers属性为:Content-Type: text/html; charset=utf-8,这就是要封装出jsonify方法的主要目的。

jsonify还有一个特性是:jsonify自动去除了JSON格式中逗号冒号间的空格,起到了压缩数据的作用。(实际上就是用了 json.dumps(data, separators=(',', ':')) 处理。)

Flask Jsonify的使用非常简单,我们只需要在Python代码中导入该扩展库,并且在需要返回Json结果的函数中使用该方法即可。下面是一个使用Flask Jsonify的示例代码:

python 复制代码
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/user_info')
def user_info():
    user = {
        'name': '小明',
        'age': 18,
        'gender': '男'
    }
    return jsonify(user)

if __name__ == '__main__':
    app.run()

我们定义了一个/user_info的路由,当用户访问该路由时,会返回一个Json格式的用户信息。其中,我们使用了Flask Jsonify函数将Python字典对象转换为了Json对象。

Flask Jsonify函数支持多种参数类型

  1. 字典类型的参数是使用最为广泛的一种情况,我们可以直接将一个Python字典对象传递给Flask Jsonify函数,该函数会将该字典对象转换为Json。
  2. 列表类型的参数
    列表类型的参数也可以被Flask Jsonify函数识别并转换为Json。我们可以将一个Python列表对象传递给Flask Jsonify函数,该函数会将该列表对象转换为Json。

jsonify函数使用的是Python内置的json模块进行序列化操作,因此需要确保序列化的对象是支持JSON序列化的类型.

JSONIFY_PRETTYPRINT_REGULAR

JSONIFY_PRETTYPRINT_REGULAR 是一个 Flask 应用程序配置选项,用于指定在返回 JSON 响应时是否进行美化打印。默认情况下,它的值为 True,表示启用美化打印。

你可以在 Flask 应用程序的配置中添加 'JSONIFY_PRETTYPRINT_REGULAR' 键,并设置其对应的值。以下是一个示例:

bash 复制代码
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False  # 禁用 JSON 响应的美化打印

确保在创建 Flask 应用程序对象之后、在使用 app.run() 启动应用程序之前,设置正确的配置值。

JSONIFY_MIMETYPE

'JSONIFY_MIMETYPE' 是 Flask 应用程序的配置选项之一,用于指定 JSON 响应的 MIME 类型。

你可以在 Flask 应用程序的配置中添加 'JSONIFY_MIMETYPE' 键,并设置其对应的值。以下是一个示例:

bash 复制代码
app.config['JSONIFY_MIMETYPE'] = 'application/json'

确保在创建 Flask 应用程序对象之前、在使用 app.run() 启动应用程序之前,设置正确的配置值。

重写jsonify方法

关于flask的jsonify序列化dict后的结果会自动根据key的下标升序排列,希望dict原样返回的方法【重写jsonify方法】

参考URL: https://dandelioncloud.cn/article/details/1443061478801911810/

相关推荐
西猫雷婶25 分钟前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
老刘莱国瑞1 小时前
STM32 与 AS608 指纹模块的调试与应用
python·物联网·阿里云
一只敲代码的猪2 小时前
Llama 3 模型系列解析(一)
大数据·python·llama
Hello_WOAIAI2 小时前
批量将 Word 文件转换为 HTML:Python 实现指南
python·html·word
winfredzhang2 小时前
使用Python开发PPT图片提取与九宫格合并工具
python·powerpoint·提取·九宫格·照片
矩阵推荐官hy147623 小时前
短视频矩阵系统种类繁多,应该如何对比选择?
人工智能·python·矩阵·流量运营
测试19983 小时前
外包干了2年,技术退步明显....
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
码银3 小时前
【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割
开发语言·python
小木_.3 小时前
【python 逆向分析某有道翻译】分析有道翻译公开的密文内容,webpack类型,全程扣代码,最后实现接口调用翻译,仅供学习参考
javascript·python·学习·webpack·分享·逆向分析
R-sz3 小时前
14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误“
linux·python·centos