• 03 DRF框架安装和实现单查群查接口


    DRF框架的安装

    1)安装
    >: pip install djangorestframework
     
    2)在settings中注册(为什么要注册,后面再说)
    INSTALLED_APPS = [
        # ...
        'rest_framework',
    ]
     
    3)在settings中自定义drf配置
    注:drf配置查找顺序,自定义settings的REST_FRAMEWORK配置字典 => drf默认settings的DEFAULTS
    REST_FRAMEWORK = {}
     
    4)drf的封装特点:特定功能在特定模块下,比原生Django封装更规范
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework.request import Request
    

    实现单查群查接口

    图书资源准备

    1)在models.py创建Model类
    from django.db import models
    class Book(models.Model):
        name = models.CharField(max_length=64, verbose_name='书名')  # verbose_name设置后在后台管理中字段名字会显示“书名”
        price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='价格')
     
        # 配置类
        class Meta:
            verbose_name_plural = '图书'  # verbose_name设置后表名为“图书s”, verbose_name_plural设置后表名在后台管理中显示“图书”
     
        def __str__(self):  # 设置后在后台管理中,会打印表中记录的数据,例如name='Bob',就会将Bob显示出来
            return self.name
     
    2)在admin.py中注册Model类,方便在后台(admin)可视化管理数据
    from django.contrib import admin
    from . import models
    admin.site.register(models.Book)  # admin要控制的model都需要注册一下
     
    3)数据库迁移操作
    >: python manage.py makemigrations
    >: python manage.py migrate
    >: python manage.py createsuperuser
        admin | Admin123
     
    4)浏览器登录admin录入数据:http://localhost:8000/admin
    

    基于restful接口规范的接口设计

    标准的写法,可以满足十大接口设计

    urlpatterns = [
        # 资源books接口的设计
        url(r'^books/$', views.BookAPIView.as_view()),  # 群查、单增
        url(r'^books/(?P<pk>d+)/$', views.BookAPIView.as_view()),  # 单查、单删、单(整体|局部)改
    ]
    

    实现单查群查接口

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from . import models
    class BookAPIView(APIView):
        def _multiple_get(self):
            # 不能返回,数据是QuerySet[Obj, Obj],也不能强制转换list
            # return list(models.Book.objects.all())
     
            # QuerySet[dict, dict]
            # print(models.Book.objects.values('name', 'price'))
            # QuerySet[tuple, tuple]
            # print(models.Book.objects.values_list('name', 'price'))
     
            return Response(list(models.Book.objects.values('name', 'price')))
     
        def _single_get(self, pk):
            # return Response(models.Book.objects.filter(pk=pk).values('name', 'price').first())
     
            # 开发阶段建议能用try的地方,不要使用if判断
            try:
                return Response(models.Book.objects.values('name', 'price').get(pk=pk))
            except:
                return Response('资源不存在')
     
        # 单查、群查
        def get(self, request, *args, **kwargs):
            pk = kwargs.get('pk')
            if pk:
                # 单查逻辑
                return self._single_get(pk)
            else:
                # 群查逻辑
                return self._multiple_get()
    
  • 相关阅读:
    在做5道习题,个别习题有难度,需要很多天,加油把自己,有看到这个随笔的小伙伴评论可以留言讨论或发出你的答案~
    python中的open、close、read、write、len、exists
    python中的type
    python中strip、startswith、endswith
    python3_learn 实现文件夹内批量对图片重命名
    [转载]利用分块传输绕过WAF进行SQL注入
    bypass安全狗测试学习
    [转+自]SSH工作原理
    NCTF2019 小部分题解
    XML外部实体注入[转载]
  • 原文地址:https://www.cnblogs.com/cnhyk/p/12354580.html
Copyright © 2020-2023  润新知