• Django REST framework 介绍


    Django REST framework 介绍

    Django REST framework框架是一个用于构建 Web API 的强大而又灵活的工具. 通常简称为DRF框架 或 REST framework框架.

    特点

    • 提供了定义序列化器 serializer 的方法,可以快速根据 Django ORM 或者其他库自动序列化/反序列化;
    • 提供了丰富的类视图、Mixin扩展类、简化视图的编写;
    • 丰富的定制层级: 函数视图、类视图、视图集合到自动生成API,满足各种需求;
    • 多种身份认证和权限认证方式的支持;
    • 内置了限流系统;
    • 直观的API web界面;
    • 可扩展性, 插件丰富

    官方文档

    https://www.django-rest-framework.org/
    

    源码地址

    https://github.com/encode/django-rest-framework/tree/master
    

    DRF 框架的安装

    1 安装:换 pip 源

    pip install djangorestframework
    

    2 配置:在 settings 中注册

    INSTALLED_APPS = [
     # ...
     'rest_framework',
    ]
    

    3 在 settings 中自定义drf配置

    注:drf 配置查找顺序,自定义 settings 的 REST_FRAMEWORK 配置字典 => drf 默认 settings 的DEFAULTS
    REST_FRAMEWORK = {}

    4 drf 的封装特点:特点功能在特点模块下

    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='书名')
     price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='价格')
    
     # 配置类
     class Meta:
         verbose_name_plural = '图书'
    
     def __str__(self):
         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()
    

  • 相关阅读:
    排查oom方法
    逃逸分析-栈上分配
    java堆是分配对象的唯一选择吗
    GC
    jvm为什么把-Xms和-Xmx的值设置成一样
    java堆
    java为何使用native 方法
    linux top命令信息详解
    java定位系统性能问题
    struts 初体验
  • 原文地址:https://www.cnblogs.com/kai-/p/12333652.html
Copyright © 2020-2023  润新知