使用DRF实现接口的流程

一 注册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,指定查询集,指定序列化器

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

  • 使用基础的APIView类(可读性最高、代码最多、灵活性最高。当你需要对的API行为进行个性化定制时,建议使用这种方式。)
  • 使用Mixins类和GenericAPI类混配
  • 使用通用视图generics.*类, 比如generics.ListCreateAPIView(可读性好、代码适中、灵活性较高。当你需要对一个模型进行标准的增删查改全部或部分操作时建议使用这种方式。)
  • 使用视图集ViewSet和ModelViewSet(可读性较低、代码最少、灵活性最低。当你需要对一个模型进行标准的增删查改的全部操作且不需定制API行为时建议使用这种方式。)
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容