zoukankan      html  css  js  c++  java
  • drfday1——入门规范

    笔记:

    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对作业一的接口进行测试,做成文件导出,之后测试直接导入使用:

    image-20200707215645570

    GET

    1 http://127.0.0.1:8000/api/books/

    image-20200707215739852

    2 http://127.0.0.1:8000/api/books/?id=1

    image-20200707215831828

    3 http://127.0.0.1:8000/api/books/?author=egon

    image-20200707215933848

    4 http://127.0.0.1:8000/api/books/?id=1&title=三国&price=11&dec=aa&author=egon

    image-20200707220034362

    POST

    1 http://127.0.0.1:8000/api/books/

    image-20200707220148303

    2

    image-20200707220245862

    3

    image-20200707220310745

    DELETE

    1 http://127.0.0.1:8000/api/books/?id=1000&title=悟空

    image-20200707220437363

    2 http://127.0.0.1:8000/api/books/?title=平凡的世界&author=路遥

    image-20200707220542845

    3 http://127.0.0.1:8000/api/books/ 删出所有数据

    PUT
    1 http://127.0.0.1:8000/api/books/?id=1

    image-20200707220818205

    PATCH

    1 http://127.0.0.1:8000/api/books/?id=4

    image-20200707221006754

    后期使用测试导入文件即可:

    image-20200707221111800

  • 相关阅读:
    Gym
    Gym
    Gym
    Gym
    Gym
    bzoj 2734: [HNOI2012]集合选数
    bzoj 1068: [SCOI2007]压缩
    HDU 2899 Strange fuction
    hihocoder #1142 : 三分·三分求极值
    HDU 2824 The Euler function
  • 原文地址:https://www.cnblogs.com/cainiaoqianxun/p/13263641.html
Copyright © 2011-2022 走看看