使用DRF實(shí)現(xiàn)接口的流程

一 注冊(cè)DRF

在根setting里面注冊(cè)DRF應(yīng)用,如下是三部分,第一部分是官方的,空一行第二部分是第三方的,再空一行是第三部分自己寫(xiě)的應(yīng)用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework' #DRF 應(yīng)用
    
    'ProjectModule' #注冊(cè)應(yīng)用
]

二 在自己的項(xiàng)目里面編寫(xiě)models;模型格式如下

class Project(models.Model):
    """項(xiàng)目表"""
    git_id = ForeignKey(Repositories, on_delete=models.CASCADE, verbose_name='倉(cāng)庫(kù)編號(hào)') #外鍵
    branch = models.CharField(max_length=20, verbose_name='分支')
    name = models.CharField(max_length=20, verbose_name='項(xiàng)目名稱(chēng)')
    user_id = models.CharField(max_length=20, verbose_name='創(chuàng)建人編號(hào)')
    update_date = models.DateTimeField(verbose_name='用例同步時(shí)間')
    create_date = models.DateTimeField(verbose_name='創(chuàng)建時(shí)間')

    class Meta:
        db_table = 'Project' #指明數(shù)據(jù)庫(kù)表名
        verbose_name = '項(xiàng)目'  #在admin站點(diǎn)中顯示的名稱(chēng)
        verbose_name_plural = verbose_name #顯示的復(fù)數(shù)名稱(chēng)
    def __str__(self):
        """定義每個(gè)數(shù)據(jù)對(duì)象的顯示信息"""
        return self.name

新建完models模型后需要執(zhí)行的命令
1 python3 manage.py makemigrations (目的是檢查模型有沒(méi)有變化)
2 python3 manage.py migrate (目的是將變化前移至數(shù)據(jù)表)

三 模型寫(xiě)完之后可以編寫(xiě)序列化器,新建serializers文件(序列化器的作用就是模型轉(zhuǎn)字典,字典轉(zhuǎn)模型)

class ProjectModuleSerializer(serializers.ModelSerializer):
    """定義序列化器"""
    class Meta:
        model = Project    #指定序列化從那個(gè)模型映射字段
        fields = '__all__'   #映射那些字段,all意思是全部字段

四 編寫(xiě)API views,定義類(lèi)視圖,繼承自ModelViewSet,指定查詢(xún)集,指定序列化器

基于類(lèi)的視圖有四種選擇:

  • 使用基礎(chǔ)的APIView類(lèi)(可讀性最高、代碼最多、靈活性最高。當(dāng)你需要對(duì)的API行為進(jìn)行個(gè)性化定制時(shí),建議使用這種方式。)
  • 使用Mixins類(lèi)和GenericAPI類(lèi)混配
  • 使用通用視圖generics.*類(lèi), 比如generics.ListCreateAPIView(可讀性好、代碼適中、靈活性較高。當(dāng)你需要對(duì)一個(gè)模型進(jìn)行標(biāo)準(zhǔn)的增刪查改全部或部分操作時(shí)建議使用這種方式。)
  • 使用視圖集ViewSet和ModelViewSet(可讀性較低、代碼最少、靈活性最低。當(dāng)你需要對(duì)一個(gè)模型進(jìn)行標(biāo)準(zhǔn)的增刪查改的全部操作且不需定制API行為時(shí)建議使用這種方式。)
class ProjectModuleView(ModelViewSet):
    """定義類(lèi)視圖"""
    pass
    #指定查詢(xún)集
    queryset = Project.objects.all()

    #指定序列化器
    serializer_class = ProjectModuleSerializer

五 配置路由,創(chuàng)建路由器,先在自己項(xiàng)目里面編寫(xiě)urls文件

urlpatterns = [

]

router = DefaultRouter() #創(chuàng)建路由器
router.register(r'', views.ProjectModuleView)#注冊(cè)路由,router.register(路由前綴, 視圖集)
urlpatterns += router.urls  #把生成好的路由拼接到urlpatterns里面

六 把子應(yīng)用的urls 注冊(cè)到根urls

七 運(yùn)行Django服務(wù)

python3 manage.py runserver

from django.db import models

# Create your models here.
from django.db.models import ForeignKey


class Repositories(models.Model):
    """代碼倉(cāng)庫(kù)表"""
    git_repo = models.CharField(max_length=20, verbose_name='倉(cāng)庫(kù)名')
    path = models.CharField(max_length=20, verbose_name='倉(cāng)庫(kù)地址')

    class Meta:
        db_table = 'Repositories' #指明數(shù)據(jù)庫(kù)表名
        verbose_name = '代碼倉(cāng)庫(kù)'  #在admin站點(diǎn)中顯示的名稱(chēng)
        verbose_name_plural = verbose_name #顯示的復(fù)數(shù)名稱(chēng)
    def __str__(self):
        """定義每個(gè)數(shù)據(jù)對(duì)象的顯示信息"""
        return self.git_repo


class Platform(models.Model):
    """平臺(tái)表"""
    platform = models.CharField(max_length=20, verbose_name='平臺(tái)')

    class Meta:
        db_table = 'Platform'  # 指明數(shù)據(jù)庫(kù)表名
        verbose_name = '平臺(tái)表'  # 在admin站點(diǎn)中顯示的名稱(chēng)
        verbose_name_plural = verbose_name  # 顯示的復(fù)數(shù)名稱(chēng)

    def __str__(self):
        """定義每個(gè)數(shù)據(jù)對(duì)象的顯示信息"""
        return self.platform


class Project(models.Model):
    """項(xiàng)目表"""
    git_id = ForeignKey(Repositories, on_delete=models.CASCADE, verbose_name='倉(cāng)庫(kù)編號(hào)') #外鍵
    branch = models.CharField(max_length=20, verbose_name='分支')
    name = models.CharField(max_length=20, verbose_name='項(xiàng)目名稱(chēng)')
    user_id = models.CharField(max_length=20, verbose_name='創(chuàng)建人編號(hào)')
    update_date = models.DateTimeField(verbose_name='用例同步時(shí)間')
    create_date = models.DateTimeField(verbose_name='創(chuàng)建時(shí)間')

    class Meta:
        db_table = 'Project' #指明數(shù)據(jù)庫(kù)表名
        verbose_name = '項(xiàng)目'  #在admin站點(diǎn)中顯示的名稱(chēng)
        verbose_name_plural = verbose_name #顯示的復(fù)數(shù)名稱(chēng)
    def __str__(self):
        """定義每個(gè)數(shù)據(jù)對(duì)象的顯示信息"""
        return self.name

class Case(models.Model):
    """用例表"""
    project_id = ForeignKey(Project, on_delete=models.CASCADE, verbose_name='所屬項(xiàng)目編號(hào)')
    name = models.CharField(max_length=20, verbose_name='用例名稱(chēng)')#表結(jié)構(gòu)設(shè)計(jì)里面少了這個(gè)
    module = models.CharField(max_length=20, verbose_name='導(dǎo)包路徑')
    file_path = models.CharField(max_length=20, verbose_name='文件路徑')
    delete = models.BooleanField(default=False)

    class Meta:
        db_table = 'Case'  # 指明數(shù)據(jù)庫(kù)表名

    def __str__(self):
        return self.name


class CaseHash(models.Model):
    """測(cè)試用例記錄表"""
    case_id = ForeignKey(Case, on_delete=models.CASCADE, verbose_name='用例編號(hào)')
    hash = models.CharField(max_length=20, verbose_name='git文件歷史標(biāo)識(shí)')
    name = models.CharField(max_length=20, verbose_name='名稱(chēng)')#這個(gè)地方的name是否要移到Case表里面?
    author = models.CharField(max_length=20, verbose_name='作者')
    create_date = models.DateTimeField(verbose_name='用例創(chuàng)建時(shí)間')
    update_date = models.DateTimeField(verbose_name='用例更新時(shí)間')#這個(gè)地方是不是要加一個(gè)更新時(shí)間?

    class Meta:
        db_table = 'CaseHash'

    def __str__(self):
        return self.case_id

class CasePlatform(models.Model):
    """測(cè)試用例支持平臺(tái)表"""
    case_hash_id = ForeignKey(CaseHash, on_delete=models.CASCADE, verbose_name='測(cè)試用例記錄編號(hào)')
    platform_id = ForeignKey(Platform, on_delete=models.CASCADE, verbose_name='平臺(tái)編號(hào)')

    class Meta:
        db_table = 'CasePlatform'

    def __str__(self):
        return self.case_hash_id

class CaseEnv(models.Model):
    """測(cè)試用例支持環(huán)境表"""
    case_hash_id = ForeignKey(CaseHash, on_delete=models.CASCADE, verbose_name='測(cè)試用例記錄編號(hào)')
    env = models.CharField(max_length=20, verbose_name='環(huán)境')

    class Meta:
        db_table = 'CaseEnv'

    def __str__(self):
        return self.case_hash_id

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容