作业:

url配置

urlpatterns = [

    url(r'^v2/cars/$',views.CarAPIView.as_view()),
url(r'^v2/cars/(?P<pk>\d+)/$',views.CarAPIView.as_view()), ]

settings配置

REST_FRAMEWORK = {
# 解析模块:
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser', # urlencoded数据格式
'rest_framework.parsers.MultiPartParser' # form-data数据格式
],
# 如果把 其中某一个参数注释掉之后,则会出现客户端发过来的参数解析不了
# {
# "detail": "<api.views.CarAPIView object at 0x000000000BC29E48> - GET - 不支持请求中的媒体类型 “application/json”。"
# } # 渲染模块
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer', # 项目真正上线的时候会把它注释掉,因为浏览器访问接口是一个页面
],
# 异常模块处理
# 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler', django中提供的
'EXCEPTION_HANDLER': 'api.exception.exception_handler',
}

异常处理模块


# 一定要在settings文件中将异常模块配置自己的异常处理函数
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response def exception_handler(exc, context):
response = drf_exception_handler(exc, context)
detail = '%s - %s - %s' % (context.get('view'), context.get('request').method, exc)
if not response: # 服务端错误
response = Response({'detail': detail})
else:
response.data = {'detail': detail} # 核心:线上要将response.data.get('detail')信息记录到日志文件
# logger.waring(response.data.get('detail')) return response

视图层views配置

from rest_framework.views import APIView
from rest_framework.response import Response class CarAPIView(APIView):
def get(self,request,*args,**kwargs):
print(request.method)
print(request._request.method)
return Response(data={"msg":"apiview get ok"},status=200) def post(self,request,*args,**kwargs):
return Response({
"msg":"apiview post ok"
})

二次封装Response类(自定义一个APIResponse类继承Response),优化响应

正确的:APIResponse('results'=[]) # 数据状态码和状态信息有默认值,可以不传

异常的:Response(1,'error', status=400) # 可以按位传数据状态码和状态信息,错误时还可以设置网络状态码

封装后的响应与封装前的响应结果一致,但是大大简化了响应写法:

class APIResponse(Response):
# 重写的APIResponse类是继承了restframework中的Response 再此基础上重写多个初始化值
# 设置默认参数
def __init__(self, data_status=0, data_msg='ok', results=None, http_status=None, headers=None, exception=False, **kwargs):
data = {
'status': data_status,
'msg': data_msg,
}
# results可能是False、0等数据,这些数据某些情况下也会作为合法数据返回
if results is not None:
data['results'] = results
data.update(kwargs)
# 继承并重用父类的 的init方法,把自定义的data数据体传进去
# 父类的:__init__(self, data=None, status=None,template_name=None, headers=None,exception=False, content_type=None):
# 异常响应,默认为False
super().__init__(data=data, status=http_status, headers=headers, exception=exception) class CarAPIView(APIView):
def get(self,request,*args,**kwargs):
print(request.query_params)
print(request.data)
# print(request.method)
# print(request._request.method)
return APIResponse(data={"msg":"apiview get ok"})

最新文章

  1. Java线程并发中常见的锁
  2. WPF中图形表示语法详解(Path之Data属性语法)ZZ
  3. 如何获得WPA握手包&amp;EWSA破解WPA密码教程[zz]
  4. [LeetCode] Best Time to Buy and Sell Stock III
  5. Hibernate解决n+1问题
  6. php 读写xml 修改xml
  7. postgreSQL数据库(索引、视图)
  8. Junit4_单元测试
  9. Scut:GameWebSocketHost 解析
  10. java 版本SQLHelper
  11. Reverse Linked List II 解答
  12. vs2008工程配置
  13. hdu1281二分图匹配
  14. c# RSA加密和解密
  15. 8Manage:专注企业级CRM服务应用
  16. equals方法的编写建议
  17. VMware 打开虚拟机的时候提示 internal error 内部错误 遇到这个问题时我的解决方法
  18. 初始IP协议
  19. BZOJ:1816 [Cqoi2010]扑克牌 (贪心或二分答案)
  20. mysql/mariadb 数据库配置

热门文章

  1. Oracle闪回查询恢复delete删除数据
  2. springboot集成websocket实现向前端浏览器发送一个对象,发送消息操作手动触发
  3. CreateRemoteThread简单应用
  4. 从零学React Native之13 持久化存储
  5. Java程序员注意:Tomcat Get请求的巨坑!
  6. Java A*算法搜索无向图最短路径
  7. 零基础入门学习python--第二章 用Python设计第一个游戏
  8. 读书笔记 | 敏捷编码&amp;敏捷调试
  9. spring:AOP面向切面编程02
  10. Docker配置JDK1.8