使用基于令牌的身份验证向django应用程序添加api。

django-tokenapi的Python项目详细描述


django tokenapi
==


这是一个django应用程序,允许您创建使用基于令牌的身份验证的简单api
。通过添加一个修饰符,您可以很容易地打开api的现有视图。

为了向公众开放一个api,最好使用一个支持oauth的框架,其中有一些非常好的实现(https://bitbucket.org/jespern/django-piston/wiki/home)。


r/>安装
----

m a
常规安装或使用[pip][]:



确保"django.contrib.auth.backends.modelbackend"位于"身份验证后端"中。

将"tokenapi.backends.tokenbackend"添加到"身份验证后端"中。

它看起来像这样:

urlpatterns=[
url(r'^token/',include('tokenapi.urls'),
]


configuration
----


默认为"7"。


用法
----


ername=jpulgarin&;password=gggggg"http://www.yourdomain.com/token/new.json

[curl]:http://curl.haxx.se/


>如果请求成功,您将收到类似这样的json响应:

{"success":true,"token":"2uy-420a8eff7f882afc2d","user":1}

ername和password对将产生如下响应:

{"success":false,"errors":"无法登录,请重试"}


请注意,如果您的用户模型具有"is\u active"标志,则身份验证逻辑将不允许非活动用户获取或使用令牌。

将存储访问api的客户端返回的"user"和"token",因为所有后续调用都要求请求具有有效的token和用户对。


到"api_token"视图,并将令牌和用户作为url的一部分发送。
使用curl它看起来像:


###编写与api兼容的视图

若要允许通过基于令牌的身份验证访问视图,请使用
`tokenapi.decorators.token_required`decorator。还有
json帮助函数,使处理json更容易。
这是一个api兼容视图的示例:


from tokenapi.decorators import token_required
from tokenapi.http import jsonresponse,jsonerror,jsonresponsebadrequest,jsonresponseunauthorized,jsonresponseforbidden,jsonresponsenotfound,jsonresponsenotallowed,jsonresponsenotacceptable

@需要令牌
定义索引(请求):
如果request.method='post':
data={
'test1':49,
'test2':'awesome',
}
返回jsonresponse(data)
否则:
返回jsonerror("只允许post")

####请求参数

客户端可以通过向其发送请求来访问任何与api兼容的视图,
,并将"user"和"token"作为请求参数(get或post)。
使用curl访问上面的示例视图可能看起来像:

curl-d"user=1&;token=2uy-420a8efff7f882afc2d"http://www.yourdomain.com/new.json


您将收到以下响应:

{"success":true,"test1":49,"test2":"awesome"}


\n在
根据
[基本访问身份验证](http://en.wikipedia.org/wiki/basic_access_authentication)方案的授权头中
。构造授权头:

1。将用户id和令牌组合成字符串"user:token"
2。使用base64对结果字符串进行编码。在生成的base64编码字符串前面加上"basic"(包括尾随空格)

如果在同一请求中,通过请求参数和
授权头提供凭据,则请求参数将用于身份验证。

--——

令牌生成代码来自"django.contrib.auth.token s",但经过修改后
不会在用户最后一次登录时散列。

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

推荐PyPI第三方库


热门话题
java数据未插入SQLite数据库   Java中内存有效的对象创建   java在方法内部使用“this”(不用于调用方法、构造函数或变量)   java为什么这里会出现NullPointerException?   在REST中使用HATEOAS导致的java循环依赖   java如何定制spring boot横幅?   Java数字基数计算器(即基数10到基数5)   如果在Kotlin vs Java中声明,用作全局上下文的安卓 MainApplication类将崩溃   用于过滤对象的Java lambda函数   java从字符串数组中获取整数列表   java为什么Maven找不到org。json JPMS自动模块?   java将字符串数组转换为int   仅当与阈值字节匹配时,java才会在映射中填充字符串值