使用DRF实现接口的流程

2022-10-08  本文已影响0人  你猜猜我是谁or宇宙第一帅

一 注册DRF

在根setting里面注册DRF应用,如下是三部分,第一部分是官方的,空一行第二部分是第三方的,再空一行是第三部分自己写的应用

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

    'rest_framework' #DRF 应用
    
    'ProjectModule' #注册应用
]

二 在自己的项目里面编写models;模型格式如下

class Project(models.Model):
    """项目表"""
    git_id = ForeignKey(Repositories, on_delete=models.CASCADE, verbose_name='仓库编号') #外键
    branch = models.CharField(max_length=20, verbose_name='分支')
    name = models.CharField(max_length=20, verbose_name='项目名称')
    user_id = models.CharField(max_length=20, verbose_name='创建人编号')
    update_date = models.DateTimeField(verbose_name='用例同步时间')
    create_date = models.DateTimeField(verbose_name='创建时间')

    class Meta:
        db_table = 'Project' #指明数据库表名
        verbose_name = '项目'  #在admin站点中显示的名称
        verbose_name_plural = verbose_name #显示的复数名称
    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.name

新建完models模型后需要执行的命令
1 python3 manage.py makemigrations (目的是检查模型有没有变化)
2 python3 manage.py migrate (目的是将变化前移至数据表)

三 模型写完之后可以编写序列化器,新建serializers文件(序列化器的作用就是模型转字典,字典转模型)

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

四 编写API views,定义类视图,继承自ModelViewSet,指定查询集,指定序列化器

基于类的视图有四种选择:

class ProjectModuleView(ModelViewSet):
    """定义类视图"""
    pass
    #指定查询集
    queryset = Project.objects.all()

    #指定序列化器
    serializer_class = ProjectModuleSerializer

五 配置路由,创建路由器,先在自己项目里面编写urls文件

urlpatterns = [

]

router = DefaultRouter() #创建路由器
router.register(r'', views.ProjectModuleView)#注册路由,router.register(路由前缀, 视图集)
urlpatterns += router.urls  #把生成好的路由拼接到urlpatterns里面

六 把子应用的urls 注册到根urls

七 运行Django服务

python3 manage.py runserver

from django.db import models

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


class Repositories(models.Model):
    """代码仓库表"""
    git_repo = models.CharField(max_length=20, verbose_name='仓库名')
    path = models.CharField(max_length=20, verbose_name='仓库地址')

    class Meta:
        db_table = 'Repositories' #指明数据库表名
        verbose_name = '代码仓库'  #在admin站点中显示的名称
        verbose_name_plural = verbose_name #显示的复数名称
    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.git_repo


class Platform(models.Model):
    """平台表"""
    platform = models.CharField(max_length=20, verbose_name='平台')

    class Meta:
        db_table = 'Platform'  # 指明数据库表名
        verbose_name = '平台表'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.platform


class Project(models.Model):
    """项目表"""
    git_id = ForeignKey(Repositories, on_delete=models.CASCADE, verbose_name='仓库编号') #外键
    branch = models.CharField(max_length=20, verbose_name='分支')
    name = models.CharField(max_length=20, verbose_name='项目名称')
    user_id = models.CharField(max_length=20, verbose_name='创建人编号')
    update_date = models.DateTimeField(verbose_name='用例同步时间')
    create_date = models.DateTimeField(verbose_name='创建时间')

    class Meta:
        db_table = 'Project' #指明数据库表名
        verbose_name = '项目'  #在admin站点中显示的名称
        verbose_name_plural = verbose_name #显示的复数名称
    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.name

class Case(models.Model):
    """用例表"""
    project_id = ForeignKey(Project, on_delete=models.CASCADE, verbose_name='所属项目编号')
    name = models.CharField(max_length=20, verbose_name='用例名称')#表结构设计里面少了这个
    module = models.CharField(max_length=20, verbose_name='导包路径')
    file_path = models.CharField(max_length=20, verbose_name='文件路径')
    delete = models.BooleanField(default=False)

    class Meta:
        db_table = 'Case'  # 指明数据库表名

    def __str__(self):
        return self.name


class CaseHash(models.Model):
    """测试用例记录表"""
    case_id = ForeignKey(Case, on_delete=models.CASCADE, verbose_name='用例编号')
    hash = models.CharField(max_length=20, verbose_name='git文件历史标识')
    name = models.CharField(max_length=20, verbose_name='名称')#这个地方的name是否要移到Case表里面?
    author = models.CharField(max_length=20, verbose_name='作者')
    create_date = models.DateTimeField(verbose_name='用例创建时间')
    update_date = models.DateTimeField(verbose_name='用例更新时间')#这个地方是不是要加一个更新时间?

    class Meta:
        db_table = 'CaseHash'

    def __str__(self):
        return self.case_id

class CasePlatform(models.Model):
    """测试用例支持平台表"""
    case_hash_id = ForeignKey(CaseHash, on_delete=models.CASCADE, verbose_name='测试用例记录编号')
    platform_id = ForeignKey(Platform, on_delete=models.CASCADE, verbose_name='平台编号')

    class Meta:
        db_table = 'CasePlatform'

    def __str__(self):
        return self.case_hash_id

class CaseEnv(models.Model):
    """测试用例支持环境表"""
    case_hash_id = ForeignKey(CaseHash, on_delete=models.CASCADE, verbose_name='测试用例记录编号')
    env = models.CharField(max_length=20, verbose_name='环境')

    class Meta:
        db_table = 'CaseEnv'

    def __str__(self):
        return self.case_hash_id

上一篇下一篇

猜你喜欢

热点阅读