zoukankan      html  css  js  c++  java
  • Django学习笔记(12)基于前后端分离模式-添加用例接口实现

    Django之前学习的的都是实现前后的不分离式的,Django也可以实现前后端分离式的开发,即视图中不使用render返回渲染的html页面,而是改用JsonResponse返回json字符串

    1.创建testcaset应用,并将'testcase.apps.TestcaseConfig',添加到settings.py的INSTALLED_APPS中

    2.models.py  ----------表结构设计

     1 from django.db import models
     2 
     3 # Create your models here.
     4 class BaseModel(models.Model):
     5     create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
     6     update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
     7     is_delete = models.BooleanField(verbose_name='是否删除', default=False)
     8 
     9     class Meta:
    10         abstract = True #声明这个类只是用来继承的,不会创建这张表
    11 
    12 class CaseSet(BaseModel):#用例集合和用例多对多关系
    13     name = models.CharField(verbose_name='集合名称',max_length=60)
    14     desc = models.CharField(verbose_name='集合描述',max_length=70)
    15     class Meta:
    16         db_table = 'case_set'
    17         verbose_name = '用例集合表'
    18         verbose_name_plural = verbose_name
    19 
    20     def __str__(self):
    21          return self.name
    22 
    23 class Case(BaseModel):
    24     title = models.CharField(verbose_name='用例标题',max_length=80,db_index=True)
    25     desc = models.CharField(verbose_name='用例描述',max_length=120)
    26     method_choice = [
    27         [0,'get'],
    28         [1,'post'],
    29         [2,'put'],
    30         [3,'delete']
    31     ] #枚举
    32     method = models.SmallIntegerField(choices=method_choice,verbose_name='请求方式',default=0)
    33     url = models.URLField(max_length=50,verbose_name='请求url')
    34     params = models.TextField(verbose_name='请求参数')
    35     run_count = models.IntegerField(verbose_name='运行次数',default=0)
    36     run_time = models.DateTimeField(verbose_name='运行时间',default=None)
    37     case_set = models.ManyToManyField(CaseSet,db_constraint=False,verbose_name='用例集合')
    38 
    39     class Meta:
    40         db_table = 'case'
    41         verbose_name = '用例表'
    42         verbose_name_plural = verbose_name
    43 
    44     def __str__(self):
    45          return self.title

    3.views.py---------------------视图实现返回接口

     1 from django.forms import model_to_dict
     2 from django.http import JsonResponse
     3 from django.shortcuts import render
     4 from django.views import View
     5 
     6 from . import models
     7 
     8 
     9 # Create your views here.
    10 # django前后端分离,开发后端接口
    11 def case_set(request):
    12     # 添加用例集合
    13     name = request.POST.get('name')
    14     desc = request.POST.get('desc')
    15     if name.strip() and desc.strip():
    16         models.CaseSet.objects.create(name=name, desc=desc)
    17         data = {'code': 0, 'msg': '添加成功'}
    18     else:
    19         data = {'code': -1, 'msg': '参数错误'}
    20     return JsonResponse(data)  # 通过JsonResponse类返回json字符串,data必须传字典,不然会报错
    21 
    22 
    23 def case_set_all(req):
    24     case_sets = models.CaseSet.objects.filter(is_delete=False)
    25     data = []
    26     for c in case_sets:
    27         d = model_to_dict(c)
    28         data.append(d)
    29     response = {'code': 0, 'msg': '添加成功', 'data': data}
    30     return JsonResponse(response, json_dumps_params={'ensure_ascii': False})  # 汉字不转义
    31 
    32 
    33 # restful代码设计风格,不同的请求方式整个在一个方法中,不需要定义多个方法
    34 def case_set_new(req):
    35     if req.method == 'GET':
    36         case_sets = models.CaseSet.objects.filter(is_delete=False)
    37         data = []
    38         for c in case_sets:
    39             d = model_to_dict(c)
    40             data.append(d)
    41         response = {'code': 0, 'msg': '添加成功', 'data': data}
    42         return JsonResponse(response, json_dumps_params={'ensure_ascii': False})  # 汉字不转义
    43     elif req.method == 'POST':
    44         name = req.POST.get('name')
    45         desc = req.POST.get('desc')
    46         if name.strip() and desc.strip():
    47             models.CaseSet.objects.create(name=name, desc=desc)
    48             data = {'code': 0, 'msg': '添加成功'}
    49         else:
    50             data = {'code': -1, 'msg': '参数错误'}
    51         return JsonResponse(data)  # 通过JsonResponse类返回json字符串
    52     elif req.method == 'PUT':
    53         pass
    54     elif req.method == 'DELETE':
    55         pass
    56 
    57 
    58 # cvb
    59 class CaseSet(View):
    60     def get(self):
    61         case_sets = models.CaseSet.objects.filter(is_delete=False)
    62         data = []
    63         for c in case_sets:
    64             d = model_to_dict(c)
    65             data.append(d)
    66         response = {'code': 0, 'msg': '添加成功', 'data': data}
    67         return JsonResponse(response, json_dumps_params={'ensure_ascii': False})  # 汉字不转义
    68 
    69     def post(self, req):
    70         name = req.POST.get('name')
    71         desc = req.POST.get('desc')
    72         if name.strip() and desc.strip():
    73             models.CaseSet.objects.create(name=name, desc=desc)
    74             data = {'code': 0, 'msg': '添加成功'}
    75         else:
    76             data = {'code': -1, 'msg': '参数错误'}
    77         return JsonResponse(data)  # 通过JsonResponse类返回json字符串
    78 
    79     def put(self, req):
    80         pass
    81 
    82     def delete(self, req):
    83         pass

    4.testcase/urls.py-----------配置urls

    1 from django.urls import path
    2 from . import views
    3 
    4 urlpatterns = [
    5     path('add_case_set/',views.case_set),
    6     path('case_set/',views.case_set_all),
    7     path('case_set_new/',views.case_set_new)
    8 ]

    5.dj_test/urls.py-----------项目中配置url

    1 from django.contrib import admin
    2 from django.urls import path,include
    3 from testcase import urls
    4 
    5 urlpatterns = [
    6     #引用子应用中的url
    7     path('testcase/',include(urls))
    8 ]

    6.浏览器输入:http://127.0.0.1:8000/testcase/case_set_new  或者postman进行访问

  • 相关阅读:
    django之数据库orm
    Python的迭代器和生成器
    xhprof 安装使用
    http_load
    sysbench
    LINUX系统下MySQL 压力测试工具super smack
    apache ab工具
    关于流量升高导致TIME_WAIT增加,MySQL连接大量失败的问题
    mysql5.6优化
    php-fpm超时时间设置request_terminate_timeout分析
  • 原文地址:https://www.cnblogs.com/bugoobird/p/13365431.html
Copyright © 2011-2022 走看看