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做了路由的注册

 

 

 

posted @ 2020-08-06 22:11  颗粒成仓  阅读(246)  评论(0编辑  收藏  举报