関連記事:
Django がインターフェイス自動化プラットフォームを実装 (10) カスタム アクション名 [継続的に更新]_Do テスト ニャー ソース ブログ - CSDN ブログ
この章はプロジェクトの内訳です。この章の内容を参照する場合は、プロジェクト コード全体と併せて参照する必要があります。
Python django vue httprunner はインターフェイス自動化プラットフォーム (最終バージョン) を実装します
公式ドキュメント:
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 ソース コード: