django api的创建,使用表单进行验证的签名请求。

django-formapi的Python项目详细描述


使用hmac身份验证和django表单验证创建json api:s。

https://travis-ci.org/5monkeys/django-formapi.png?branch=masterhttps://coveralls.io/repos/5monkeys/django-formapi/badge.pnghttps://pypip.in/v/django-formapi/badge.pnghttps://pypip.in/d/django-formapi/badge.pnghttps://pypip.in/wheel/django-formapi/badge.pnghttps://pypip.in/egg/django-formapi/badge.pnghttps://pypip.in/license/django-formapi/badge.pnghttps://d2weczhvl823v0.cloudfront.net/5monkeys/django-formapi/trend.png

安装

在python环境中安装django formapi

$ pip install django-formapi

formapi添加到INSTALLED_APPS设置中。

INSTALLED_APPS=(...'formapi',)

formapi.urls添加到url.py。

urlpatterns=patterns('',...url(r'^api/',include('formapi.urls')),)

用法

继续创建一个calls.py

classDivisionCall(calls.APICall):"""
    Returns the quotient of two integers
    """dividend=forms.FloatField()divisor=forms.FloatField()defaction(self,test):dividend=self.cleaned_data.get('dividend')divisor=self.cleaned_data.get('divisor')returndividend/divisorAPI.register(DivisionCall,'math','divide',version='v1.0.0')

只需创建一个类似于常规django表单但继承自APICall的类。定义api调用的字段 应该收到。当字段被验证并且返回的内容将是json编码的时候,调用action方法 作为对api调用方的响应。API.register调用将APICall类作为第一个参数,第二个参数是 api调用应该驻留在namespace中,第三个参数是调用的name,第四个参数是version。 这将产生一个形式为api/[version]/[namespace]/[call_name]/的url,因此我们将得到/api/v1.0.0/math/divide/

使用参数{'dividend': 5, 'divisor': 2}的有效调用将导致此响应:

{"errors":{},"data":5,"success":true}

参数为{'dividend': "five", 'divisor': 2}的无效调用将导致此响应:

{"errors":{"dividend":["Enter a number."]},"data":false,"success":false}

身份验证

默认情况下,APICalls已打开hmac身份验证。通过在APICall上设置signed_requests = False禁用它。

如果没有禁用,api的用户将不得不对其调用进行签名。为此,他们需要生成一个secret,通过django创建一个APIKey。 管理界面。保存时,将为api用户生成个人secretkey

要为DivisonCall构建调用签名,请创建按键dividend=5&divisor=2排序的调用参数的查询字符串。使用sha1散列函数创建hmac。 python中的示例:

importhmacfromhashlibimportsha1hmac_sign=hmac.new(secret,urllib2.quote('dividend=5&divisor=2'),sha1).hexdigest()

DivisionCall的签名请求将具有参数{'dividend': 5, 'divisor': 2, 'key': generated_key, 'sign': hmac_sign}

文档

访问/api/discover获取注册api调用的简要文档。

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

推荐PyPI第三方库


热门话题
java调用Python函数作为TEID中的UDF   java Android。支持v4导入不工作   java如何影响具有静态属性的类   java如何在从glTexImage2D()分配后编辑纹理的像素颜色   javaspringboot+rediscache+@Cacheable适用于某些方法,而不适用于其他方法   java无法将动态Web模块方面从3.0更改为2.5   java如何在新选项卡中显示打印的文档?   java Google Cloud Endpoints API方法仅在删除用户参数时成功调用   java为什么我可以使用Stack<Double>但不能使用Stack<Double>?   java JDBC PreparedStatement似乎忽略了占位符   java如何设置JInternalFrame的标准图标化位置?   Java文件。copy()不复制文件   基于另一个类的java显示arraylist?   java Android Studio:错误:非法字符:'\u2028'   对象(Java)无法实例化类型映像?   javascript错误:飞行前响应的HTTP状态代码401无效   java确保泛型vararg参数具有相同的类型