本文实例讲述了Django框架休息工具包简单用法。分享给大家供大家参考,具体如下:
Django框架休息工具包做API非常方便。
下面简单说一下几个功能的实现方法。
实现功能,为匿名用户访问首页一分钟能访问3次,登录用户一分钟访问6次,只有登录用户才能访问订单页面。
INSTALLED_APPS=[ “django.contrib.admin”, “django.contrib.auth”, “django.contrib.contenttypes”, “django.contrib.sessions”, “django.contrib.messages”, “django.contrib.staticfiles”, “app.apps.AppConfig”, “rest_framework”, #注册 ] >之前设置文件注册应用
,注意url路径最好使用名词。我们这里注册三个视图函数的url,实现验证,首页和定单页面。
从django.conf。url输入url django。contrib进口管理 从应用程序导入视图 urlpattern=[ url (r ^ admin/, admin.site.urls), url (r ^身份验证/,views.AuthView.as_view()), #验证 url (r ^索引/,views.IndexView.as_view()), #首页 url (r/^秩序,views.OrderView.as_view()), #定单 ] >之前url文件设置路由
从rest_framework。视图导入APIView 从rest_framework。请求导入请求 django。http进口JsonResponse HttpResponse 从app.utils.commons进口gen_token 从app.utils。身份验证导入LuffyAuthentication 从app.utils。进口节流LuffyAnonRateThrottle LuffyUserRateThrottle 从app.utils。允许进口LuffyPermission 从。导入模型 类AuthView (APIView): ”“” 认证相关视图 由于继承了APIView,所以csrf就没有了,具体的源代码只是有一个装饰器, 加上了csrf_exempt装饰器,屏蔽了csrf 写法是在返回的时候csrf_exempt(视图)和@使用装饰器效果是一样的,这种写法还可以写在url路由中。 ”“” def post(自我,请求,* args, * * kwargs): ”“” 用户登录功能 请求参数: :参数arg游戏: : param kwargs: 返回: ”“” ret={“代码”:1000年,“味精”:没有} #默认要返回的信息 用户=request.data.get(用户名) #这里的请求已经不是原来的请求了 pwd=request.data.get(密码) user_obj=models.UserInfo.objects。过滤器(用户=用户pwd=pwd)当代() 如果user_obj: tk=gen_token(用户)#返回一个哈希过得字符串 #进行牌验证 models.Token.objects。update_or_create(用户=user_obj违约={“令牌”:tk}) #数据库存入一个象征性的信息 ret(“代码”)=1001 ret[“令牌”]=tk 其他: ret[‘味精’]="用户名或密码错误” 返回JsonResponse (ret) >之前上面的代码主要是实现了一个验证的功能,通过<代码> gen_token 代码>函数来验证,并存入数据库信息。
<代码> gen_token 代码>单独写到一个跑龙套目录下的文件中。代码如下:
def gen_token(用户名): 导入的时间 进口hashlib ctime=str (time.time ()) 散列=hashlib.md5 (username.encode (utf - 8)) hash.update (ctime.encode (utf - 8)) 返回hash.hexdigest () >之前通过时间和哈希等生成一个不重复的字符串。
类IndexView (APIView): ”“” 用户认证 http://127.0.0.1:8001/v1/索引/& # 63;tk=sdfasdfasdfasdfasdfasdf 获取用户传入的令牌 首页限制:request.user 匿名:5/m 用户:10/m ”“” authentication_classes=(LuffyAuthentication,) #认证成功返回一个用户名,一个对象,不成功就是没有 throttle_classes=[LuffyAnonRateThrottle LuffyUserRateThrottle] #访问次数限制,如果合格都为真 def get(自我,请求,* args, * * kwargs): 返回HttpResponse(“首页”) >之前同样,将LuffyAuthentication, LuffyAnonRateThrottle, LuffyUserRateThrottle写到了跑龙套目录下。代码如下:
从rest_framework。身份验证导入BaseAuthentication 从rest_framework导入异常 从应用程序导入模型 类LuffyAuthentication (BaseAuthentication): def(自我,请求进行身份验证): tk=request.query_params.get (tk) 如果不是tk: 返回(不,没有) #提高exceptions.AuthenticationFailed(“认证失败”) token_obj=models.Token.objects.filter(令牌=tk)当代() 如果不是token_obj: 返回(不,没有) 返回(token_obj.user token_obj)Django框架休息工具包简单用法示例