Django框架休息工具包简单用法示例

  

本文实例讲述了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框架休息工具包简单用法示例