• Django项目总结:Rest Framework【1】


    Django Rest Framework

    -- 是一个强大且灵活的工具包,用以构建Web API

    -- 可以在Django的基础上迅速实现API

    -- 并且自身还带有WEB的测试页面,可以方便的测试自己的API

    传统的基于模板引擎的 django 开发工作流:

    -- 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。

    -- 编写视图函数的逻辑。视图中通常涉及数据库的操作。

    -- 在视图中渲染 HTML 模板,返回 HTTP 响应。

    基于 django-rest-framework 的 RESTful API 的开发,过程是完全类似的:

    -- 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。

    -- 编写视图函数的逻辑,根据 HTTP 请求类型,对请求的资源进行相应操作,这个过程通常涉及数据库的操作。

    -- 使用约定的资源描述格式(例如 XML 或者 JSON)序列化资源并将数据返回给客户端(通过 HTTP 响应)。

    Rest Framework开发流程

    serializers.py => views.py => urls.py

    https://www.django-rest-framework.org/
    
    # 创建 REST 应用,urls => setting
    python manage.py startapp REST
    
    # 安装 rest framework
    pip install djangorestframework
    # setting中添加 rest_framework

    序列化器 - Serializer

    serializers.py

    # 序列化器
    from django.contrib.auth.models import User, Group
    from rest_framework import serializers
    from REST.models import Book
    
    
    # HyperLinkedModelSerializer,超链接可视化
    class UserSerializer(serializers.HyperlinkedModelSerializer):
    
        class Meta:
            # 模型 + 模板(序列化器) => Json
            # django内置的User
            model = User
            # 字段
            fields = ('url', 'username', 'email', 'groups')
    
    
    class GroupSerializer(serializers.HyperlinkedModelSerializer):
    
        class Meta:
            model = Group
            fields = ('url', 'name')
    
    
    class BookSerializer(serializers.HyperlinkedModelSerializer):
    
        class Meta:
            model = Book
            fields = ('b_name', 'b_price')

    视图函数

    -- viewsets.ModelViewSet

    -- CBV

    -- 视图集合

    from django.contrib.auth.models import User, Group
    from rest_framework import viewsets
    from REST.models import Book
    from REST.serializers import UserSerializer, GroupSerializer, BookSerializer
    
    
    # 类视图 User和Group 为Django自带
    class UserViewSet(viewsets.ModelViewSet):
        # 将数据序列化,获取数据 - 选择序列化类
        # 查询结果集
        queryset = User.objects.all()
        # 序列化器选择
        serializer_class = UserSerializer
    
    
    class GroupViewSet(viewsets.ModelViewSet):
    
        queryset = Group.objects.all()
    
        serializer_class = GroupSerializer
    
    
    class BookViewSet(viewsets.ModelViewSet):
    
        queryset = Book.objects.all()
    
        serializer_class = BookSerializer

    根路由 urls.py

    from django.contrib import admin
    from django.urls import path, include
    from rest_framework.routers import DefaultRouter
    from REST.views import UserViewSet, GroupViewSet, BookViewSet
    
    router = DefaultRouter()
    
    router.register(r'users', UserViewSet)
    router.register(r'groups', GroupViewSet)
    router.register(r'books', BookViewSet)
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('cbv/', include('App.urls', namespace='cbv')),
    
        # 需要在include中添加应用名'REST',namespace='rest'会导致重名报错
        # path('rest/', include(router.urls, 'REST'), namespace='rest'),
        path('rest/', include(router.urls)),
    
        path('ser/', include('RESTSerializer.urls')),
    ]

    models.py

    from django.db import models
    
    
    # 模型写好后,在serializers中序列化,再到views,最后注册路由
    class Book(models.Model):
    
        b_name = models.CharField(max_length=32)
        b_price = models.FloatField(default=1)

    进行 runserver

    -- 所有Api变成可视化

    -- 超链接可视化 HyperLinkedModelSerializer

    -- 对数据集合实现了整体添加获取

      -- 路由  /users/, /groups/

      -- get

      -- post

    -- 对单个实现了增删改查

      -- 路由   /users/id/,  /groups/id/

      -- get

      -- post

      -- put

      -- delelte

      -- patch

    -- viewsets做了视图函数的实现

    -- router做了路由的注册

  • 相关阅读:
    第4次作业(条件)比较大小。第3次作业(条件)计算火车运行时间。
    GitHub搜索技巧
    flex实现左中固定不变,右边自适应
    JavaScript高级__原型继承+组合继承
    JavaScript高级__深入了解闭包
    JavaScript高级__执行上下文代码案例
    JavaScript中的显式原型链 prototype 和隐式原型 __proto__
    谷歌强大插件收集,持续更新。。。
    js中~~和^=
    vue自定义指令----directive
  • 原文地址:https://www.cnblogs.com/dc2019/p/13449378.html
Copyright © 2020-2023  润新知