Django-rest-framework学习(二)Request与Response
来源:互联网 发布:前端开发的优化问题 编辑:程序博客网 时间:2024/06/04 19:02
Django-rest-framework学习(二)Request与Response
标签(空格分隔): Django web-api python
- Django-rest-framework学习二Request与Response
- 组件
- Request对象
- Response对象
- 状态码 Status codes
- 包装API视图
- 组合组件
- 更改视图文件
- 提供可选择的格式化的URL后缀
- 响应输出
- 总结
- 组件
组件
Request对象
django-rest-framework中的Request对象扩展了常规的HttpRequest,它提供了request.data属性,与request.POST很类似,但是更为实用与灵活。
request.POST #只能处理POST方法提交的表格数据 request.data #支持处理多种方法提交的任意类型的数据
Response对象
它同时提供了response对象,是一种基于TemplateResponse类型的,可以将未处理的内容通过内容协商来决定返回给客户端的正确内容形式。( 即客户端所需要的正确形式返回,要什么样的给什么样的,不知道理解的对不对)
return Response(data)
状态码 Status codes
由于状态码直接在代码中显示不利于代码的可读性,Django-rest-framework提供了一种更为直观的状态显示,比如HTTP_400_BAD_REQUEST。
包装API视图
- @api_view包装器用于基于函数或接口的视图
- APIView类用于类视图
组合组件
更改视图文件
移除JSONResponse类,因为request.data可以是任意类型的数据,最终都会被处理正确响应给客户端,修改views.py如下:
#coding:utf-8 from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response from snippets.models import Snippet from snippets.serializers import SnippetSerializer @api_view(['GET', 'POST']) def snippet_list(request): ''' 显示所有的snippets的对象,或者创建一个新的对象 ''' if request.method == 'GET': snippets = Snippet.objects.all() serializers = SnippetSerializer(snippets, many=True) return Response(serializers.data) elif request.method == 'POST': # data = JSONParser().parse(request) serializers = SnippetSerializer(data=request.data) if serializers.is_valid(): serializers.save() return Response(serializers.data, status=status.HTTP_201_CREATED) return Response(serializers.errors, status=status.HTTP_400_BAD_REQUEST) @api_view(['GET','PUT','DELETE']) def snippet_detail(request, pk): ''' 查找、更新或者删除一个snippet ''' try: snippet = Snippet.objects.get(pk=pk) except Snippet.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': serializer = SnippetSerializer(snippet) return Response(serializer.data) elif request.method == 'PUT': serializer = SnippetSerializer(snippet, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': snippet.delete() return Response(status=status.HTTP_204_NO_CONTENT)
修改过后,代码显得更加简洁,且状态更为直观。
提供可选择的格式化的URL后缀
提供可选择的格式化的URL后缀,意味着我们提供的API需要能够正确的响应响应的URL,比如:http://example.com/api/items/4/.json
只需要我们在接口定义处加上关键字format,例如下面:
def snippet_list(request, format=None) def snippet_detail(request, pk, format=None)
同时还要更新urls.py,除了原有的urlpatterns还需要增加format_suffix_patterns,如下:
#coding:utf-8 from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns from snippets import views urlpatterns = [ url(r'^snippets/$', views.snippet_list), url(r'^snippets/(?P<pk>[0-9]+)/$', views.snippet_detail), ] urlpatterns = format_suffix_patterns(urlpatterns)
响应输出
python manage.py runserver
结果如下:
由上可知,我们的响应输出格式有以下2种:
- http://127.0.0.1:8000/snippets/?format=json
- http://127.0.0.1:8000/snippets/?format=api同样的,我们可以控制我们的请求格式,通过Content-type Header设置,po s t传入application/json 数据或者post传入multipart/form-data数据进行更新或者创建.
总结
Django-rest-framework API这个中内容的响应方式是基于客户端的,体现了强大的web-browsable,使得web接口的输出更加富有表现力。
- Django-rest-framework学习(二)Request与Response
- python django rest framework request and response
- django rest framework 入门2——Request and Response
- django rest framework 入门2——Request and Response
- django rest framework 入门2——Request and Response
- django Rest Framework 系列 2- Request and Response
- Django Rest framework-学习
- Django Rest framework学习(一)
- Django rest framework 学习笔记
- Django中的request与response对象
- Django中的request与response对象
- Django-rest-framework学习(-)Serialization
- python django rest framework Serialization 的学习
- [Django架构流程分析]Django中的request与response对象
- Django-Request 和Response
- Django REST framework
- Django REST framework API
- Django REST framework
- 记毕业后第一次面试
- 码农小汪-剑指Offer之3- 矩形覆盖
- FlyEditText——一个文字会飞的EditText
- Tomcat部署多个应用时日志文件路径相同引起的问题
- Dense prediction applications in Deep learning
- Django-rest-framework学习(二)Request与Response
- 从相机或者相册选择图片
- eclipse自动补全的设置
- 用指针、引用或直接传值来分配内存
- 序列号和设备标识UDID码手机直接获取方式:
- Day of Week
- ubuntu 14.04相关问题总结
- 码农小汪-剑指Offer之4- 在二维数组中查找
- 非对称加密RAS