轻量级框架,为使用django构建的web应用程序轻松提供restapi。
django-dynamicresponse的Python项目详细描述
#django dynamicresponse
django dynamicresponse是一个轻量级框架,可以轻松地为django应用程序提供rest api。
在大多数情况下,向现有django应用程序添加完整rest api所需的唯一更改是修改视图中的return语句以返回下面描述的响应类之一,而不是标准的django"httpresponse"。
/>
*与现有代码轻松集成
*对api和普通请求都重用相同的视图和逻辑(不需要单独的api处理程序)
*将提交的json解码为"request.post",与django表单完全兼容
*内置对http基本身份验证的支持安装
install`django dynamicresponse`:
或者,下载源代码并手动将其添加到"pythonpath"中。
_类=(
'dynamicresponse.middleware.api.apimidleware',
'dynamicresponse.middleware.dynamicformat.dynamicformatmiddleware',
)
`apimidleware'根据http头检测传入的api请求,并提供对基本身份验证的支持。
`dynamicformat中间件"将传入的json内容解码为"request.post",并根据视图返回的值呈现适当的响应。
\settings
这些是可用的可配置设置,以及它们的默认值:
<;table>;
<;tr>;
<;th align="left">;名称<;/th>;
<;th align="left">;默认值<;/th>;
<;th align="left">;说明<;/th>;
<;/tr>;
<;tr>;
<;td>; <;td>;<;code>;false<;/code>;<;/td>;
<;td>;以json格式输出表单错误<;/td>;
<;/tr>;
<;tr>;
<;td>;<;code>;动态响应领域名称<;/code>;
<;td>;<;代码>;<;api<;/code>;<;td>;
<;td>;基本身份验证领域的名称<;td>;
<;tr>;
<;tr>;
<;td>;<;code>;动态响应用户域<;code>;
<;td>;<;code>;('id','email','first\u name','last\name')<;code>;<;/td>;
<;td>;定义序列化django auth用户对象时要包含的字段<;/td>;
<;/tr>;
<;/table>;
\tests
包含[示例项目](http://github.com/funkbit/django-dynamicresponse/tree/master/examples/)用于使用框架实现简单博客应用程序的示例代码。
在要使用它的视图中导入"dynamicresponse":
````
来自dynamicresponse.response import*
```
根据视图逻辑返回相应响应类的实例:
@login_required
def customer_list(request):
"列出所有客户。"
customers=customer.objects.all()
return serializeorrender('customers/list.html,{customers:customers})
正常请求的RL。两个类的第一个参数指定要呈现的模板或要将用户重定向到的url。
要实现rest api,只需在通常使用"render\u to\u response"的情况下使用"serializeorrender",在否则返回"httpresponseredirect"实例的情况下使用"serializeorredirect"。
对于api请求,构造函数的第二个参数是要为api请求序列化的上下文。在呈现模板时,传递附加上下文(如表单和分页器)通常很有用,这些上下文仅在呈现模板时才有用,即使它们与api请求无关。"serializeorrender"类通过第三个参数"extra"支持附加上下文:
@login\u required
def customer\u list(request):
"列出所有客户。"
return serializeorrender('customers/list.html,{customers':customers},extra={somevalue':'something'})
在本例中,只有"customers"在api响应中序列化,而当模板呈现给普通请求时,"customers"和"somevalue"都可以访问。
通常以json形式返回,http状态代码为"200"。如果要返回不同的状态代码,请将"status"参数设置为以下值之一:
<;table>;
<;tr>;
<;th align="left">;常量<;/th>;
<;th align="left">;http status<;/th>;
<;th align="left">;desclt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt公司de>;cr_无效的_数据<;/code>;<;/td>;
<;td>;<;代码>;400<;/code>;<;/td>;
<;td>;一个或多个表单无效<;<;/td>;
<;/tr>;
<;tr>;
<;td>;<;代码>;找不到cr<;/code>;
<;td>;
<;td>;<;代码>;404<;/code>;<;/td>;
<;td>;未找到(可选的替代方案,<;代码>;httpresponsenotfound<;/code>;一致性)<;/td>;
<;/tr>;
<;tr>;
<;td>;<;代码>;CR确认<;/code>;<;td>;
<;td>;
<;td>;405<;/code>; <;td>;使用http post确认操作(使用带有确认模板的<;code>;serializerRender<;/code>;<;/td>;
<;/tr>;
<;tr>;
<;td>;<;code>;删除CR<;/code>;<;/td>;
<;td>;<;code>;204<;/code>;<;/td>;
<;td>;资源已被删除<;/td>;
<;/tr>;
<;/table>;
用法:
cr_requires_upgrade=("requires_upgrade",402)
\通过向模型中添加"序列化字段"方法,并返回要包含的字段:
class blogpost(models.model):
text=models.textfield('text')
"API响应中只包含这些字段。"
return[
'id',
'title',
'content',
]
此行为还扩展到嵌套对象。例如,如果上面的模型包含作者的外键,则仅定义在作者的<;code>;serialize_fields<;/code>;方法中应该包含这些字段。
默认情况下,序列化中不包含可调用项。但是,您可以在"序列化字段"中包含可调用名称,以便在序列化中显式包含它们。例如,这对于向api用户提供有用的动态计算信息非常有用。
django dynamicresponse是一个轻量级框架,可以轻松地为django应用程序提供rest api。
在大多数情况下,向现有django应用程序添加完整rest api所需的唯一更改是修改视图中的return语句以返回下面描述的响应类之一,而不是标准的django"httpresponse"。
/>
*与现有代码轻松集成
*对api和普通请求都重用相同的视图和逻辑(不需要单独的api处理程序)
*将提交的json解码为"request.post",与django表单完全兼容
*内置对http基本身份验证的支持安装
install`django dynamicresponse`:
或者,下载源代码并手动将其添加到"pythonpath"中。
_类=(
'dynamicresponse.middleware.api.apimidleware',
'dynamicresponse.middleware.dynamicformat.dynamicformatmiddleware',
)
`apimidleware'根据http头检测传入的api请求,并提供对基本身份验证的支持。
`dynamicformat中间件"将传入的json内容解码为"request.post",并根据视图返回的值呈现适当的响应。
\settings
这些是可用的可配置设置,以及它们的默认值:
<;table>;
<;tr>;
<;th align="left">;名称<;/th>;
<;th align="left">;默认值<;/th>;
<;th align="left">;说明<;/th>;
<;/tr>;
<;tr>;
<;td>;
<;td>;以json格式输出表单错误<;/td>;
<;/tr>;
<;tr>;
<;td>;<;code>;动态响应领域名称<;/code>;
<;td>;<;代码>;<;api<;/code>;<;td>;
<;td>;基本身份验证领域的名称<;td>;
<;tr>;
<;tr>;
<;td>;<;code>;动态响应用户域<;code>;
<;td>;<;code>;('id','email','first\u name','last\name')<;code>;<;/td>;
<;td>;定义序列化django auth用户对象时要包含的字段<;/td>;
<;/tr>;
<;/table>;
\tests
包含[示例项目](http://github.com/funkbit/django-dynamicresponse/tree/master/examples/)用于使用框架实现简单博客应用程序的示例代码。
在要使用它的视图中导入"dynamicresponse":
````
来自dynamicresponse.response import*
```
根据视图逻辑返回相应响应类的实例:
@login_required
def customer_list(request):
"列出所有客户。"
customers=customer.objects.all()
return serializeorrender('customers/list.html,{customers:customers})
正常请求的RL。两个类的第一个参数指定要呈现的模板或要将用户重定向到的url。
要实现rest api,只需在通常使用"render\u to\u response"的情况下使用"serializeorrender",在否则返回"httpresponseredirect"实例的情况下使用"serializeorredirect"。
对于api请求,构造函数的第二个参数是要为api请求序列化的上下文。在呈现模板时,传递附加上下文(如表单和分页器)通常很有用,这些上下文仅在呈现模板时才有用,即使它们与api请求无关。"serializeorrender"类通过第三个参数"extra"支持附加上下文:
@login\u required
def customer\u list(request):
"列出所有客户。"
在本例中,只有"customers"在api响应中序列化,而当模板呈现给普通请求时,"customers"和"somevalue"都可以访问。
通常以json形式返回,http状态代码为"200"。如果要返回不同的状态代码,请将"status"参数设置为以下值之一:
<;table>;
<;tr>;
<;th align="left">;常量<;/th>;
<;th align="left">;http status<;/th>;
<;th align="left">;desclt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt公司de>;cr_无效的_数据<;/code>;<;/td>;
<;td>;<;代码>;400<;/code>;<;/td>;
<;td>;一个或多个表单无效<;<;/td>;
<;/tr>;
<;tr>;
<;td>;<;代码>;找不到cr<;/code>;
<;td>;
<;td>;<;代码>;404<;/code>;<;/td>;
<;td>;未找到(可选的替代方案,<;代码>;httpresponsenotfound<;/code>;一致性)<;/td>;
<;/tr>;
<;tr>;
<;td>;<;代码>;CR确认<;/code>;<;td>;
<;td>;
<;td>;405<;/code>;
<;/tr>;
<;tr>;
<;td>;<;code>;删除CR<;/code>;<;/td>;
<;td>;<;code>;204<;/code>;<;/td>;
<;td>;资源已被删除<;/td>;
<;/tr>;
<;/table>;
用法:
cr_requires_upgrade=("requires_upgrade",402)
\通过向模型中添加"序列化字段"方法,并返回要包含的字段:
class blogpost(models.model):
return[
'id',
'title',
'content',
]
此行为还扩展到嵌套对象。例如,如果上面的模型包含作者的外键,则仅定义在作者的<;code>;serialize_fields<;/code>;方法中应该包含这些字段。
默认情况下,序列化中不包含可调用项。但是,您可以在"序列化字段"中包含可调用名称,以便在序列化中显式包含它们。例如,这对于向api用户提供有用的动态计算信息非常有用。