falcon的json模式输入和输出

falconjsonio的Python项目详细描述


通过定义可接受的值来验证http请求和响应体 使用json模式。用于Falcon web framework

测试状态

Codeship Status for garymonson/falcon-json-io

使用概述

定义请求体架构,并且只有在 请求符合您的规范。否则,错误将返回到 打电话的人。

定义您的响应体架构,并在之前验证您的响应 返回发件人。与 规范将返回一个500错误。

使用req.context['doc']检索请求json。

在req.context['result']中设置JSON响应。

使用中间件

启用中间件:

app = falcon.API(
    middleware=[
        falconjsonio.middleware.RequireJSON(),
        falconjsonio.middleware.JSONTranslator(),
    ],
)

定义您的要求:

from falconjsonio.schema import request_schema, response_schema

people_post_request_schema = {
    'type':       'object',
    'properties': {
        'title':  {'type': 'string'},
        'name':   {'type': 'string'},
        'dob':    {'type': 'date-time'},
        'email':  {'type': 'email'},
    },
    'required': ['name', 'dob'],
}
people_post_response_schema = {
    'oneOf': [
        {
            'type':       'object',
            'properties': {
                'href': {'type': uri'},
            },
            'required': ['uri'],
        },
        {
            'type':       'object',
            'properties': {
                'error': {'type': 'string'},
            },
            'required': ['error'],
        },
    ],
}

# ...

class People(object):
    @response_schema(people_get_response_schema)
    def on_get(self, req, resp):
        # Put your JSON response here:
        req.context['result'] = {'some': 'json'}

    @request_schema(people_post_request_schema)
    @response_schema(people_post_response_schema)
    def on_post(self, req, resp):
        # JSON request supplied here:
        form = req.context['doc']
        # Put your JSON response here:
        req.context['result'] = {'some': 'json'}

当然,要将端点连接起来:

app.add_route('/people', People())

如果方法是从父类继承的,则可以应用 而是将decorator传递给资源类,并将方法名传递给 装饰工:

class People(object):
    def on_get(self, req, resp):
        # Put your JSON response here:
        req.context['result'] = {'some': 'json'}

    def on_post(self, req, resp):
        # JSON request supplied here:
        form = req.context['doc']
        # Put your JSON response here:
        req.context['result'] = {'some': 'json'}

@response_schema(schema=people_get_response_schema, method_name='on_get')
@request_schema(schema=people_post_request_schema, method_name='on_post')
@response_schema(schema=people_post_response_schema, method_name='on_post')
class ChildPeople(People):
    pass

当您有一个包含所有 Smarts和您的孩子类只声明了 父类(例如 falcon-autocrud

贡献的快速入门

virtualenv -p `which python3` virtualenv
source virtualenv/bin/activate
pip install -r requirements.txt
pip install -r dev_requirements.txt
nosetests

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java两个构造函数?   java for(inti:x)做什么?   java如何将一个bean的构造函数参数传递给嵌套bean   java从易趣链接提取项目ID   java多线程BufferedReader   安卓全新应用程序在R.java中抛出“语法错误,插入“}”以完成类体”   java Spring启动依赖注入请求范围的bean   java给定的时间,然后约定和异常处理。和莫基托和朱尼特在一起   与Android Studio的java Oracle数据库连接   在web服务器(Heroku)上承载可运行jar文件(Discord bot)的java   java如何每隔n秒在imageview中更改图像   java不理解“volatile”关键字   java使用JPA编写自定义SQL查询   java如何使用filechannel作为参数来编写对象