DRF练习
DRF 小练习
"""
1、新建一个django项目,定义一个Car类,有name字符串属性,color整型选择属性(0:银色,1:黑色,2:红色,3:灰色),price全精度小数类型,image图片文件类型,brand字符串类型
2、基于ModelSerializer类,完成Car资源的单查,群查,单增接口
序列化:显示车名,车的颜色,车的价格,车的海报,车的品牌
反序列化:必须提供车名,车的价格,车的品牌(车的匹配需要二次确认re_brand),车的颜色默认为银色(可以提供),车的海报不需要提供(默认为空)
"""
settings.py
REST_FRAMEWORK = {
# 解析模块
'DEFAULT_PARSER_CLASSES' : {
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParse',
'rest_framework.parsers.JSONParser',
},
#渲染模块
'DEFAULT_RENDERER_CLASSES': {
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
},
# 自定义配置异常模块
'EXCEPTION_HANDLER': 'api.exception.exception_handler',
}
views.py
from rest_framework.parsers import JSONParser,FormParser,MultiPartParser
from rest_framework.renderers import JSONRenderer
from rest_framework.renderers import BrowsableAPIRenderer
from rest_framework.views import APIView
from rest_framework.response import Response
class Student(APIView):
parser_classes = [JSONParseer] #局部解析配置
renderer_classes = [JSONRenderer] #局部渲染配置
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get</span><span class="hljs-params">(self,request,*args,**kwargs)</span>:</span>
<span class="hljs-keyword">return</span> Response(<span class="hljs-string">'drf get ok'</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">post</span><span class="hljs-params">(self,request,*args,**kwargs)</span>:</span>
<span class="hljs-keyword">return</span> Response(<span class="hljs-string">'drf post ok'</span>)</code></pre>
exception.py
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response
from rest_framework import status
def exception_handler(exc, context):
response = drf_exception_handler(exc, context)
detail = '%s-%s-%s' %(context.get('view'),context.get('request'),exc)
if not response:
response = Response({'detail':detail},, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True)
else:
response.data = {'detail':detail}
return response
urls.py
urls.py:
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(<span class="hljs-string">r'^admin/'</span>, admin.site.urls),
url(<span class="hljs-string">r'^api/'</span>, include(<span class="hljs-string">'api.urls'</span>)),
]
api.urls.py:
<span class="hljs-keyword">from</span> django.conf.urls <span class="hljs-keyword">import</span> url
<span class="hljs-keyword">from</span> . <span class="hljs-keyword">import</span> views
urlpatterns = {
url(<span class="hljs-string">r'^student/$'</span>,views.Student.as_view()),
}</code></pre>