Django实战搭建mock系统(七)_完善model

一.构建mock模块的model

新建一个mock app(manage.py 里执行命令startapp mock)
再在setting里面给mock app注册一下
在这里插入图片描述

mock系统的主要功能就是提供一个个伪造的接口,然后在前端或者安卓ios调用这些接口时,给出相应的相应,如500,200之类
而每个接口都如下,有服务器,有具体的路径
在这里插入图片描述

所以我们先来给mock app建model,这个model存储服务器名,服务器根路径等字段
在这里插入图片描述

再定义一个model,这个model存储跟在上一个model根路径后面的请求字段等等,这边用到了外键,并且其中的参数on_delete有多种用法,可以参考https://blog.csdn.net/kuangshp128/article/details/78946316
在这里插入图片描述

再定义一个model,这个model存放着针对每个接口的响应请求,如500,200
在这里插入图片描述

贴一下model

from django.db import models

# Create your models here.

#服务器model
class ServerName(models.Model):
    name = models.CharField(max_length=20,verbose_name='服务器名')
    path = models.CharField(max_length=40,verbose_name='服务器根路径')

    class Meta:
        db_table = 'mock_server_name'
        verbose_name = '服务器'
        verbose_name_plural = verbose_name
        ordering = ['-id']

    def __str__(self):
        return self.name

#服务器下的接口model
class Api_Str(models.Model):
    api_kind = models.CharField(max_length=50,verbose_name='接口的种类')
    path = models.CharField(max_length=100,verbose_name='接口路由')
    #定义一个外键,指明在哪个服务器下面。models.CASCADE代表如果关联的键被删除,这个表里响应的数据也被删除
    server = models.ForeignKey(ServerName,verbose_name='所属服务器',on_delete=models.CASCADE)
    class Meta:
        db_table = 'mock_api_name'
        verbose_name = '服务器下接口地址'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.api_kind

class Response(models.Model):
    name = models.CharField(max_length=20,verbose_name='响应名称')
    json = models.TextField(verbose_name='返回报文')
    delay = models.IntegerField(default=1,verbose_name='响应延迟')
    #这个响应有针对的固定请求,所以需要一个外键,指向上一个model
    to_api = models.ForeignKey(Api_Str,verbose_name='响应指向接口',on_delete=models.CASCADE)

    class Meta:
        db_table = 'mock_response_name'
        verbose_name = '接口响应'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


把mock的model同步到数据库
在这里插入图片描述

二.给model添加数据

在admin里注册一下刚刚创建的mock app,可以在后台对其创建的model进行操作
在这里插入图片描述

from django.contrib import admin

# Register your models here.
from mock.models import ServerName, Api_Str, Response


class admin_ServerName(admin.ModelAdmin):
    list_display = ('name','path')
    search_fields = ('name','path')
    list_filter = ('name',)

class admin_Api(admin.ModelAdmin):
    list_display = ('api_kind','path','server')
    search_fields = ('api_kind','server')
    list_filter = ('server',)

class admin_Response(admin.ModelAdmin):
    list_display = ('name','json','delay','to_api')
    search_fields = ('name',)
    list_filter = ('name',)


admin.site.register(ServerName,admin_ServerName)
admin.site.register(Api_Str,admin_Api)
admin.site.register(Response,admin_Response)

注册完成后通过admin后台为这几个model添加数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三.逻辑处理

然后我们来做几个url,从数据库读取数据组成接口,在浏览器输入,可以正常访问
在这里插入图片描述

在这里插入图片描述

先测试一下有没有成功获取正则表达式传过来的两个变量,获取成功
在这里插入图片描述

详细补充一下view里面的方法
在这里插入图片描述

class mock_server(View):
    def get(self,request,server_name,api_name):
        if server_name ==None or server_name=='':
            return HttpResponse('服务器名不能为空')
        if api_name == None or api_name == '':
            return HttpResponse('接口路径不能为空')
        # filter查找出来的是一个列表对象
        server_list = ServerName.objects.filter(path=server_name)
        if not server_list:
            return HttpResponse('服务器名不存在')

        api_list = Api_Str.objects.filter(path=api_name,server=server_list[0])
        if not api_list:
            return HttpResponse('接口名错误')

        response_list = Response.objects.filter(to_api=api_list[0])
        if not response_list:
            return HttpResponse('无响应')

        #响应有成功失败等多个,任选一个
        response = response_list[random.randint(0,len(response_list)-1)]
        delay = response.delay
        json = response.json

        time.sleep(delay)
        return HttpResponse(json)

在我们请求访问的时候,由于view里面的time.sleep,所以要等一会才会刷新页面,出结果
在这里插入图片描述

mock系统的核心内容到此就结束了。

四.一点补充

如果一个url需要在登陆后才能访问,可以在url里加上一个login_required函数,这样这个url就需要登录后才能访问(也可以在登录admin后台后再访问这个路由,可以访问成功。)
在这里插入图片描述

如果登陆后需要在页面上显示登录用户的信息
在这里插入图片描述

这两个问题是我在实现页面的增删改查的时候遇到的。我会把项目完整的源代码放在Django实战搭建mock系统(一)最前面,其他的都是些基础的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值