Django はインターフェイス自動化プラットフォームを実装します (11) プロジェクト モジュール プロジェクト シリアライザーとビュー [継続的に更新]

関連記事:

Django がインターフェイス自動化プラットフォームを実装 (10) カスタム アクション名 [継続的に更新]_Do テスト ニャー ソース ブログ - CSDN ブログ

この章はプロジェクトの内訳です。この章の内容を参照する場合は、プロジェクト コード全体と併せて参照する必要があります。

Python django vue httprunner はインターフェイス自動化プラットフォーム (最終バージョン) を実装します

公式ドキュメント:

シリアライザー - Django REST フレームワーク

1. プロジェクト関連のインターフェース

プロジェクトデータの基本的なCRUD

リクエストメソッド URI 対応するアクション 実現機能
得る /プロジェクト/ 。リスト() プロジェクトリストのクエリ
役職 /プロジェクト/ 。作成() データを作成する
得る /プロジェクト/{id}/ .retrieve() プロジェクトの詳細データを取得する
置く /プロジェクト/{id}/ アップデート() データ内のすべてのフィールドを更新する
パッチ /プロジェクト/{id}/ .partial_update() データの一部のフィールドを更新する
消去 /プロジェクト/{id}/ 。破壊() データの一部を削除する
得る /プロジェクト/名前/ .names() カスタム プロジェクトリストのクエリ

この章ではプロジェクトインターフェイスの追加、削除、変更、クエリを実現するだけで、その後の拡張機能は他の章で説明します。

1.1 項目リストの クエリ peoject list .list()

得る /プロジェクト/ 。リスト() プロジェクトリストのクエリ

 1.2  プロジェクトの作成 .create()

役職 /プロジェクト/ 。作成() データを作成する

 1.3 詳細表示/項目更新retrieve() update() .partial_update()

詳細の表示と編集 

  • 詳細を表示.retrieve() 
  • 更新 update()  partial_update()

1.4 プロジェクトリストのカスタムアクション名 

得る /プロジェクト/名前/ .names() カスタム プロジェクトリストのクエリ

アプリケーションシナリオ:

インターフェイスを作成するときは、項目のリストを呼び出す必要があります。このインターフェースがどのプロジェクトに属するかを設定します。

ここでのプロジェクト リストにはプロジェクトの ID と名前のみが表示され、他のフィールドは表示されません。

names() リストと list() リストには、対応するシリアライザーが異なります。

 

 2. プロジェクトデータベースモデルモデル

プロジェクトテーブルのフィールド

from django.db import models

from utils.base_models import BaseModel


class Projects(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('项目名称', max_length=200, unique=True, help_text='项目名称')
    leader = models.CharField('负责人', max_length=50, help_text='项目负责人')
    tester = models.CharField('测试人员', max_length=50, help_text='项目测试人员')
    programmer = models.CharField('开发人员', max_length=50, help_text='开发人员')
    publish_app = models.CharField('发布应用', max_length=100, help_text='发布应用')
    desc = models.CharField('简要描述', max_length=200, null=True, blank=True, default='', help_text='简要描述')
    update_datetime = models.DateTimeField(auto_now=True, null=True, blank=True, help_text="修改时间",
                                           verbose_name="修改时间")
   create_datetime = models.DateTimeField(auto_now_add=True, null=True, blank=True, help_text="创建时间",
                                           verbose_name="创建时间")

    class Meta:
        db_table = 'tb_projects'
        verbose_name = '项目信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

ID、プロジェクト名、担当者、テスター、開発者、アプリ名、説明、変更時刻、作成時刻。

詳細な説明:

1. テーブル名: db_table = 'tb_projects'

2. データの並べ替え: 順序付け = ('id',)

3、シリアライザ シリアライザ

# -*- coding: utf-8 -*-

from rest_framework import serializers
from .models import Projects



class ProjectModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = Projects
        exclude = ('update_datetime', )
        extra_kwargs = {
            "create_datetime": {
                "read_only": True,
                "format": "%Y年%m月%d日 %H:%M:%S"
            }
        }

# names action的序列化器
class ProjectsNamesModelSerailizer(serializers.ModelSerializer):

    class Meta:
        model = Projects
        fields = ('id', 'name')

シリアライザーは 2 つあります

1. すべてのフィールドを含む通常のシリアライザー

2. 名前アクションに対応するシリアライザーは、ID と名前のみを表示します。

4.views.pyを表示する

import logging

from rest_framework import filters

from rest_framework import viewsets

from rest_framework import permissions

from .models import Projects
from . import serializers
from utils.mixins import NamesMixin


logger = logging.getLogger('backend')


class ProjectViewSet(NamesMixin, viewsets.ModelViewSet):
    """
    list:
    获取项目列表数据

    retrieve:
    获取项目详情数据

    update:
    更新项目信息

    names:
    获取项目名称

    """
    queryset = Projects.objects.all()
    serializer_class = serializers.ProjectModelSerializer

    filter_backends = [filters.SearchFilter, filters.OrderingFilter]
    search_fields = ['=name', '=leader', '=id']
    ordering_fields = ['id', 'name', 'leader']

    permission_classes = [permissions.IsAuthenticated]



    def get_serializer_class(self):
        """
        a.可以重写父类的get_serializer_class方法,用于为不同的action提供不一样的序列化器类
        b.在视图集对象中可以使用action属性获取当前访问的action方法名称
        :return:
        """
        if self.action == 'names':
            return serializers.ProjectsNamesModelSerailizer
        else:
            return super().get_serializer_class()

 1. NamesMixin によって提供される名前インターフェイス

2. 基本的な追加、削除、変更、およびクエリ。viewsets.ModelViewSet によって提供されます。

3. Get_serializer_class が書き換えられ、ModelViewSet->GenericViewSet->GenericAPIView クラスのメソッドが書き換えられます。

    def get_serializer_class(self):
        """
        a.可以重写父类的get_serializer_class方法,用于为不同的action提供不一样的序列化器类
        b.在视图集对象中可以使用action属性获取当前访问的action方法名称
        :return:
        """
        if self.action == 'names':
            return serializers.ProjectsNamesModelSerailizer
        else:
            return super().get_serializer_class()

書き換え後、アクションが名前の場合、返されるシリアライザーはserializers.ProjectsNamesModelSerailizer

get_serializer_class ソース コード:

 

おすすめ

転載: blog.csdn.net/qq_39208536/article/details/131516771