相關文章:
Django實現(xiàn)接口自動化平臺(十)自定義action names【持續(xù)更新中】_做測試的喵醬的博客-CSDN博客
本章是項目的一個分解,查看本章內容時,要結合整體項目代碼來看:
python django vue httprunner 實現(xiàn)接口自動化平臺(最終版)_python+vue自動化測試平臺_做測試的喵醬的博客-CSDN博客
官方文檔:
Serializers - Django REST framework
一、Projects 相關接口
項目數(shù)據(jù)的基本增刪改查
請求方式 | URI | 對應action | 實現(xiàn)功能 |
GET | /projects/ | .list() | 查詢project列表 |
POST | /projects/ | .create() | 創(chuàng)建一條數(shù)據(jù) |
GET | /projects/{id}/ | .retrieve() | 檢索一條project的詳細數(shù)據(jù) |
PUT | /projects/{id}/ | update() | 更新一條數(shù)據(jù)中的全部字段 |
PATCH | /projects/{id}/ | .partial_update() | 更新一條數(shù)據(jù)中的部分字段 |
DELETE | /projects/{id}/ | .destroy() | 刪除一條數(shù)據(jù) |
GET | /projects/names/ | .names() 自定義 | 查詢project列表 |
本章節(jié),只是單純的實現(xiàn)了項目接口的增刪改查,后續(xù)擴展功能在其他章節(jié)
1.1 項目列表?查詢peoject列表?.list()
GET | /projects/ | .list() | 查詢project列表 |
?1.2??創(chuàng)建一條project .create()
POST | /projects/ | .create() | 創(chuàng)建一條數(shù)據(jù) |
?1.3 查看詳情/更新項目?retrieve()??update()?.partial_update()
查看詳情與編輯?
- 查看詳情 .retrieve()?
- 更新?update()? partial_update()
1.4? 項目列表 自定義action names?
GET | /projects/names/ | .names() 自定義 | 查詢project列表 |
應用場景:
在創(chuàng)建接口時,需要調用項目列表。設置該接口歸屬為哪個項目。
這里的項目列表,只展示項目的id 與 name,其他字段都不展示的。
names()?列表 與 list() 列表,對應的序列化器是不一樣的。
?
?二、Projects 數(shù)據(jù)庫模型model
projects項目表的字段
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('開發(fā)人員', max_length=50, help_text='開發(fā)人員')
publish_app = models.CharField('發(fā)布應用', max_length=100, help_text='發(fā)布應用')
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="創(chuàng)建時間",
verbose_name="創(chuàng)建時間")
class Meta:
db_table = 'tb_projects'
verbose_name = '項目信息'
verbose_name_plural = verbose_name
ordering = ('id',)
def __str__(self):
return self.name
id、項目名稱、負責人、測試人員、開發(fā)人員、應用名稱、描述、修改時間、創(chuàng)建時間。
詳解:
1、表名:db_table = 'tb_projects'
2、數(shù)據(jù)排序:ordering = ('id',)
三、序列化器serializer
# -*- 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')
一共兩個序列化器
1、正常的序列化器,包含全部的字段
2、 names action 對應的序列化器,只展示id 與name
四、視圖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:
獲取項目列表數(shù)據(jù)
retrieve:
獲取項目詳情數(shù)據(jù)
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、names接口,由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()
重寫后,當action為names時,返回序列化器為serializers.ProjectsNamesModelSerailizer
get_serializer_class 源碼:
文章來源:http://www.zghlxwxcb.cn/news/detail-571585.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-571585.html
到了這里,關于Django實現(xiàn)接口自動化平臺(十一)項目模塊Projects序列化器及視圖【持續(xù)更新中】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!