轻量级框架,为使用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用户提供有用的动态计算信息非常有用。

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

推荐PyPI第三方库


热门话题
java本机方法的源代码可用吗?   java如何使父方法抛出异常?   java Android以编程方式设置不同屏幕大小/密度的布局   java如何使用一个变量来管理所有客户端请求   java输入一个txt文件,每行有一组数字   json java从jsonobject获取jsonarray错误   java将一个(WAV)写入一个文件只会说一个单词(最后一个单词)   java Telnet忽略原始字节   proguard java。运行桌面应用程序时出现lang.VerifyError   java用左键移动JLabel?   java如何在jText区域验证选项卡?   文件服务器客户端Javasocket编程中的字符串搜索   java省略了JSTL中的最后一个逗号<c:out>   java如何找到if或else代码已执行的次数?   java JavaScript WebSocket send()方法未执行   浮点数声明上的java标识符预期错误   java这是指二进制搜索算法吗?   编译mod at:reobfJar java时的minecraft问题。util。拉链ZipException:重复条目   java检测特定的震动运动(如图所示:D)