为morepath加载json基础设施

more.body-model的Python项目详细描述


more.body_model:`` load_json`` morepath的基础设施
===============================================


,其思想是在应用程序级别识别发布了什么样的json内容
,并将其转换为python对象。您可以将这个
application对象与“request.body\u obj”一起使用。使用“body_model”,您可以编写与该类型模型特别匹配的视图。

代码块::python

from more.body_model导入body model app


class app(bodymodelapp):
pass

注意:如果要在已安装的应用程序上使用body_model,请确保基本应用程序和已安装的应用程序都是
``more.body_model.body model app``的子类。否则它将无法工作。



load_json
--


``app.load_json``指令允许您定义一个函数,该函数将
传入的json转换为python对象。此行为由
应用程序中的所有视图共享。我们使用类型字段“item”检测json,并将其解释为
“item”实例,然后传递其他所有内容:

。代码块::python

@app.load_json()
def load_json(json,请求):
if json.get('type')!=“item”:
return json
return item(json['x'])

代码块::python

@app.json(model=collection,request_method='post')
def collection_post(self,request):
collection.add(request.body_obj)
return“成功!”

通过指定
`` body_model``:

,您可以编写与“body_obj”类匹配的视图。代码块::python

@app.json(model=collection,request_method='post',body_model=item)
def collection_post_item(self,request):
collection.add(request.body_obj)
返回“成功!”



主体模型
----


定义应用程序的json主体转换代码,我们通常可以使用
``app.load_json``:

……代码块::python

@app.load_json()
def load_json(json,请求):
如果是有效的文档_json(json):
返回文档(title=json['title',
author=json['author',
content=json['content'])
只需返回普通的json
return json

现在我们在“request.body_obj``中得到了一个“document``实例,因此
我们可以简化“document_collection_post`:

代码块::python

@app.json(model=document collection,request_method='post')
def document_collection_post(self,request):
如果不是实例(request.body_obj,document):
raise webob.exc.httpunprocessableentity()
result=self.add(request.body_obj)
返回request.view(result)

仅当“body_obj”是“document”的实例时才匹配我们可以在视图上使用“body_model”:

代码块::python

@app.json(model=document collection,request_method='post',body_model=document)
def document_collection_post(self,request):
result=self.add(request.body_obj)
return request.view(result)

如果找不到匹配的“body_model”`
,您将免费获得“422”错误。您还可以为
``documentcollection``创建其他类型的“post”视图,以这种方式处理其他类型的json内容。




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

推荐PyPI第三方库


热门话题
java Spinner选定值未上载到firebase数据库   java如何通过bukkit中的配置添加消息?   java在SharedReference中保存列表的泛型类型   javascript Java小程序未定义   swt在Java中构建控制台应用程序   java OAuth同意屏幕没有突然显示,没有错误?   java webview选择文件安卓不工作   java Spring boot JPA如何从同一连接添加多个数据库?   java JDBC DB2驱动程序计时器线程处于阻塞状态   java我在vscode中运行flatter时看到一个错误在phone中运行应用程序somone能否帮助我plz   Java:生成JSON:如何避免生成不完整的JSON   java Date compareTo()方法始终返回1   当使用Junit runner运行测试时,java Spring自动连线失败   java Android/Sockets如何将信息从主UI线程发送到socket线程?   java Android内存声明全局变量   java如何在JBoss中拥有多个具有相同JNDI名称的数据源?   python在Java中嵌入CPython时,为什么会挂起?   java如何提供深度模拟对象?   java“find:smallint,expected:integer”Hibernate对informix数据库的验证在短时间内失败