笔记:
http://www.liuqingzheng.top/python/Django-rest-framework框架/1-drf-drf入门规范/
作业:
1 新建一个图书表,5个符合restful规范的接口,用CBV的APIView实现
# url接口FBV
urlpatterns = [
url(r'^api/books/', views.Book.as_view()),
]
# 模型表
class Book(models.Model):
title = models.CharField(max_length=18)
dec = models.CharField(max_length=255,null=True)
price = models.IntegerField(null=True)
author = models.CharField(max_length=18,null=True)
# 视图FBV
from django.http import JsonResponse
from rest_framework.views import APIView
from app01 import models
class Book(APIView):
back_dic = {'msg': ''}
key_list = ['dec', 'author', 'title', 'price', 'id']
@staticmethod
def _get_json_list(query_list): # 传入query对象返回处理好的json数据
dic_list = []
for dic in query_list:
dic_list.append(dic)
return JsonResponse(dic_list, safe=False)
@staticmethod
def _get_params_dic(query_params): # 传入query对象返回参数字典
k_v_dic = {}
for k, v in query_params:
if k in ('price', 'id'):
v = int(v)
k_v_dic[k] = v
return k_v_dic
def get(self, request):
if not request.query_params: # 没有参数获取所有数据
book_query = models.Book.objects.all().values()
return self._get_json_list(book_query)
query_params = request.query_params.copy().items()
params_dic = self._get_params_dic(query_params)
if set(self.key_list) >= set(params_dic.keys()): # 判断参数包含与字段列表
book_query = models.Book.objects.filter(**params_dic) # 判断成功进一步查询
if book_query:
book_num = len(book_query)
if book_num == 1: # 查询结果为一个直接JsonRespnose返回
book_obj = book_query.values().first()
return JsonResponse(book_obj)
book_query_1 = book_query.values()
return self._get_json_list(book_query_1) # 查询结果为多个,处理后再返回
self.back_dic['msg'] = '没有满足条件的书籍')
return JsonResponse(self.back_dic) # 查询不到,返回错误信息
else:
self.back_dic['msg'] = '查询的条件不合法'
return JsonResponse(self.back_dic) # 字段不存在返回错误信息
def post(self, request):
if not request.POST: # 判断是否提交数据
self.back_dic['msg'] = '没有提交任何数据'
return self.back_dic
query_params = request.POST.copy().items()
params_dic = self._get_params_dic(query_params) # 处理上传的数据,返回字典
if set(self.key_list) >= set(params_dic.keys()): # 判断数据的字段是否存在
book_obj = models.Book.objects.create(**params_dic) # 操作模型表创建数据
book_obj.__dict__.pop('_state')
book_dic = book_obj.__dict__
return JsonResponse(book_dic) # 返回刚创建记录的在数据库中完整的数据
self.back_dic['msg'] = '创建的数据字段不合法' # 提交的数据中有的字段不存在
return JsonResponse(self.back_dic)
def delete(self, request):
if not request.query_params:
models.Book.objects.all().delete()
self.back_dic['msg'] = '表中所有的记录已删除'
return self.back_dic
query_params = request.query_params.copy().items()
params_dic = self._get_params_dic(query_params)
if set(self.key_list) >= set(params_dic.keys()):
book_obj = models.Book.objects.filter(**params_dic)
if not book_obj:
self.back_dic['msg'] = '数据不存在无法删除'
return JsonResponse(self.back_dic)
self.back_dic['msg'] = '数据删除成功'
return JsonResponse(self.back_dic)
self.back_dic['msg'] = '删除的字段字段不合法'
return JsonResponse(self.back_dic)
def put(self, request):
if not request.query_params:
self.back_dic['msg'] = '整体:没有查询条件,无法无法获取需要修改的数据'
return JsonResponse(self.back_dic)
query_params = request.query_params.copy().items()
params_dic = self._get_params_dic(query_params)
if set(self.key_list) >= set(params_dic.keys()):
update_dic = self._get_params_dic(request.POST.copy().items())
book_obj = models.Book.objects.filter(**params_dic)
if not book_obj:
self.back_dic['msg'] = '整体:没有符合条件的书籍,无法修改'
return JsonResponse(self.back_dic)
book_obj.update(**update_dic)
book_obj = book_obj.values().first()
return JsonResponse(book_obj)
else:
self.back_dic['msg'] = '整体修改:修改字段不合法'
return JsonResponse(self.back_dic)
# 跟put一样
def patch(self, request):
if not request.query_params:
self.back_dic['msg'] = '部分:没有查询条件,无法无法获取需要修改的数据'
return JsonResponse(self.back_dic)
query_params = request.query_params.copy().items()
params_dic = self._get_params_dic(query_params)
if set(self.key_list) > set(params_dic.keys()):
update_dic = self._get_params_dic(request.POST.copy().items())
book_obj = models.Book.objects.filter(**params_dic)
if not book_obj:
self.back_dic['msg'] = '部分:没有符合条件的书籍,无法修改'
return JsonResponse(self.back_dic)
book_obj.update(**update_dic)
book_obj = book_obj.values().first()
return JsonResponse(book_obj)
else:
self.back_dic['msg'] = '部分修改:修改字段不合法'
return JsonResponse(self.back_dic)
2 用postman,用django写几个接口,测试,导出文件
用postman对作业一的接口进行测试,做成文件导出,之后测试直接导入使用:
GET
1 http://127.0.0.1:8000/api/books/
2 http://127.0.0.1:8000/api/books/?id=1
3 http://127.0.0.1:8000/api/books/?author=egon
4 http://127.0.0.1:8000/api/books/?id=1&title=三国&price=11&dec=aa&author=egon
POST
1 http://127.0.0.1:8000/api/books/
2
3
DELETE
1 http://127.0.0.1:8000/api/books/?id=1000&title=悟空
2 http://127.0.0.1:8000/api/books/?title=平凡的世界&author=路遥
3 http://127.0.0.1:8000/api/books/ 删出所有数据
PUT
1 http://127.0.0.1:8000/api/books/?id=1
PATCH
1 http://127.0.0.1:8000/api/books/?id=4
后期使用测试导入文件即可: