decorators@condition,@last_modified和@etag for django rest框架
django-rest-framework-condition的Python项目详细描述
django rest框架条件
这个包允许您在viewset或 来自django rest框架的apieview。换句话说,可以使用http头 ETag和最后一次修改的API。
它不创建etag或last-modified头的自定义实现,而是使用来自django的实现,这意味着您可以确保django的作者会更新它。
类似地,在django中,您可以使用快捷装饰符@last_modified
和
@etag
。
测试时间:
- Python:2.7,3.7
- django:1.11、2.0、2.1、2.2
- django rest框架:3.8、3.9
安装
pip install django-rest-framework-condition
用法
使用decorators的方式与使用django视图的方式相同。
上次修改的示例
fromdatetimeimportdatetimefromrest_framework.responseimportResponsefromrest_framework.viewsimportAPIViewfromrest_framework_conditionimportlast_modifiedclassLastModifiedApiView(APIView):@last_modified(lambda_:datetime(2019,1,1))defget(self,request):returnResponse({'data':'I have Last-Modified header!'})
etag示例
importhashlibfromrest_framework.responseimportResponsefromrest_framework.viewsimportAPIViewfromrest_framework_conditionimportetagdefmy_etag(request,*args,**kwargs):returnhashlib.md5(':'.join(request.GET.dict().values()).encode('utf-8')).hexdigest()classEtagApiView(APIView):@etag(my_etag)defget(self,request):returnResponse({'data':'I have Etag!'})
ETag和上次修改的示例
importhashlibfromdatetimeimportdatetimefromrest_framework.responseimportResponsefromrest_framework.viewsimportAPIViewfromrest_framework_conditionimportconditiondefmy_etag(request,*args,**kwargs):returnhashlib.md5(':'.join(request.GET.dict().values()).encode('utf-8')).hexdigest()defmy_last_modified(request,*args,**kwargs):returndatetime(2019,1,1)classConditionApiView(APIView):@condition(etag_func=my_etag,last_modified_func=my_last_modified)defget(self,request):returnResponse({'data':'I have both Last-Modified and Etag!'})