作业:

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"})

day 71作业的更多相关文章

  1. SQL SERVER 中如何用脚本管理作业

    在SQL SERVER中用脚本管理作业,在绝大部分场景下,脚本都比UI界面管理作业要高效.简洁.打个简单的比方,如果你要查看作业的运行时长,如果用UI界面查看,100个作业,你就得在历史记录里面至少查 ...

  2. 软件工程(QLGY2015)第三次作业点评(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...

  3. 作业成绩 final-review 20161201-1203 15:05

    final-review阶段,20161201-20161203 15:05 final 评论II截止 20161204 09:00 申诉截止时间 20161207 12:00,微信联系杨贵福. 凡描 ...

  4. 作业成绩 final 20161124-1201 09:00

    final阶段,20161124-1201 09:00. 申诉截止时间 20161206 12:00,微信联系杨贵福. 凡描述需求或BUG时,应给出以下4项: 你期待看到的现象如何 你实际看到的现象 ...

  5. Hadoop作业提交之TaskTracker获取Task

    [Hadoop代码笔记]Hadoop作业提交之TaskTracker获取Task 一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobC ...

  6. 【集美大学1411_助教博客】团队作业1——团队展示&选题 成绩

    第一次团队作业已经新鲜出炉啦,各位同学请查收.截止日期前,全班都按时提交了作业,而且有的团队还提交了两次呢,下次不要这样啦~ 题目 团队作业1--团队展示&选题 回顾 个人作业1--四则运算题 ...

  7. 【2017集美大学1412软工实践_助教博客】团队作业3——需求改进&系统设计 成绩公示

    第三次团队作业成绩公布 题目 团队作业3: 需求改进&系统设计 团队成绩 成绩公示如下: 缩写 TD BZ GJ CJ SI WBS GS JG DB SS SJ CS DC Total 分值 ...

  8. 【1414软工助教】团队作业4——第一次项目冲刺(Alpha版本) 得分榜

    题目 团队作业4--第一次项目冲刺(Alpha版本) 作业提交情况情况 所有团队都在规定时间内完成了七次冲刺. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目 ...

  9. 【2017集美大学1412软工实践_助教博客】团队作业5——测试与发布(Alpha版本)

    第五次团队作业成绩公布 题目 团队作业5: http://www.cnblogs.com/happyzm/p/6788792.html 团队成绩 成绩公示如下: 检查项 测试报告 Alpha版本发布说 ...

随机推荐

  1. 廖雪峰Java16函数式编程-2Stream-6reduce

    1. 聚合方法 Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果 例如: Stream.of(1, 2, 3, 4, 5).count(); // ...

  2. rancher2.0 自定义应用商店(catalog)

    1.进入自定义应用商店页面 ===================================================== ================================ ...

  3. spring boot项目开发中遇到问题,持续更新

    1.JPA中EntityManager不能执行建表语句,提示要加事务Error:javax.persistence.TransactionRequiredException: Executing an ...

  4. MFC int转CString

    方法一. int iVar = 7489; char szBuf[100]; _itoa(iVar, szBuf, 10); CString ss(szBuf); SetDlgItemText(IDC ...

  5. duilib教程之duilib入门简明教程18.其他

    一.超链接按钮     代码很简单,参见360Demo:     <Button text="{u}{a}求助{/a}{/u}" showhtml="true&qu ...

  6. [CTSC2018]青蕈领主

    [CTSC2018]青蕈领主 题解 首先,连续段要知道结论: 连续段要么不交,要么包含 所以是一棵树!每个位置的father是后面第一个包含它的 树形DP! 设dp[x],x为根的子树,(设管辖的区间 ...

  7. joda 获取每个月第一天第一秒和最后一天最后一秒

    /** * 获取每个月第一天的第一秒 * @return */ public static final Date getMouthOfFirst(){ DateTimeFormatter format ...

  8. 第十七篇:csv拆分、csv转excel方法

    首先对微软的office功能表示敬佩!可能是这些办公软件太过平常化,所以体会不到他有多牛!csv格式数据以前没接触过,百度百科定义,Comma-Separated Values,CSV,逗号分隔值,或 ...

  9. 按指定规则统计list中数据,groupby用法

    有的情况下,只是想要简单地对list中数据,进行分组,查看,可以考虑使用groupby 代码: # groupby需要排序后才能使用 def gb(num): if 0 <= num < ...

  10. java_迭代器

    java的迭代器(Iterator): 一个可迭代的对象调用iterator可以得到一个迭代器对象 HasNext:判断是否还有下一个元素 next:返回迭代的元素 步骤: public static ...