django_前后端分离01
1.前后端分离 单独开发后端,发送请求不依赖前端的html,依赖工具 如postman
2.开发思路 新建模块名为testcase
a.先定义数据库
from django.db import models # Create your models here. class BaseModel(models.Model):#定义一个类,用来继承的 共用的一些东西 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') is_delete = models.BooleanField(verbose_name='是否删除', default=False) class Meta: abstract = True #这个类只是抽象类,是用来继承的 不会真的创建BaseModel表 class CaseSet(BaseModel):#定义用例集合表 name = models.CharField(verbose_name='集合名称',max_length=50) desc = models.CharField(verbose_name='集合描述',max_length=50) def __str__(self): return self.name class Meta: db_table = 'caseset' verbose_name = '用例集合表' verbose_name_plural = verbose_name class Case(BaseModel):#定义用例表 title = models.CharField(verbose_name='用例标题',max_length=20,db_index=True) desc = models.CharField(verbose_name='用例描述',max_length=20) method_choices = [ [0,'get'], [0,'post'], [0,'put'], [0,'delete'] ] #choices枚举类型,默认是0,get请求 method = models.SmallIntegerField(verbose_name='请求方式',choices=method_choices,default=0) url = models.URLField(verbose_name='请求URL',max_length=50) params = models.TextField(verbose_name='请求参数') run_count = models.IntegerField(verbose_name='运行次数',default=0) run_time = models.DateTimeField(verbose_name='运行时间',default=None,null=True,blank=True) case_set = models.ManyToManyField(CaseSet,db_constraint=False,verbose_name='用例集合',null=True,blank=True) def __str__(self): return self.title class Meta: db_table = 'case' verbose_name = '测试用例表' verbose_name_plural = verbose_name
b.在views中写逻辑
from django.forms import model_to_dict from django.http import JsonResponse from django.shortcuts import render from django.views import View from . import models # Create your views here. #常规写法@1,@2,用例集合表 #用例集合添加 post请求 需要传两个参数 即集合表的增加操作@1 def case_set(request): name = request.POST.get('name') desc = request.POST.get('desc') if name.strip() and desc.strip() and models.CaseSet.objects.filter(name=name).count()<1: models.CaseSet.objects.create(name=name,desc=desc) data = {'code':0,'msg':'添加成功'} else: data = {'code':-1,'msg':'添加失败'} return JsonResponse(data) #查询集合 get请求 不需要传参 获取集合表的数据 查询操作@2 def case_set_all(request): case_sets = models.CaseSet.objects.filter(is_delete=False)#查询所有集合 data = [] #把查询出来的转换成字典通过model_to_dict方法,并添加进data列表中,最终返回[{'xx':xx},{'xx':xx}] for c in case_sets: d = model_to_dict(c) data.append(d) response = {'code':0,'msg':'成功','data':data} return JsonResponse(response,json_dumps_params={'ensure_ascii':False}) #一个函数写两个URL请求的逻辑上述两种方式的结合 def case_set_new(request): name = request.POST.get('name') desc = request.POST.get('desc') if request.method=='GET': case_sets = models.CaseSet.objects.filter(is_delete=False) # 查询所有集合 data = [] # 把查询出来的转换成字典通过model_to_dict方法,并添加进data列表中,最终返回[{'xx':xx},{'xx':xx}] for c in case_sets: d = model_to_dict(c) data.append(d) response = {'code': 0, 'msg': '成功', 'data': data} return JsonResponse(response, json_dumps_params={'ensure_ascii': False}) elif request.method=='POST': if name.strip() and desc.strip() and models.CaseSet.objects.filter(name=name).count()<1: models.CaseSet.objects.create(name=name, desc=desc) data = {'code': 0, 'msg': '添加成功'} else: data = {'code': -1, 'msg': '添加失败'} return JsonResponse(data) #cvb方式,用例集合表,根据请求不同,执行响应的操作 class CaseSet(View): #增加数据 def post(self,request): name = request.POST.get('name') desc = request.POST.get('desc') if name.strip() and desc.strip() and models.CaseSet.objects.filter(name=name).count() < 1: models.CaseSet.objects.create(name=name, desc=desc) data = {'code': 0, 'msg': '添加成功'} else: data = {'code': -1, 'msg': '添加失败'} return JsonResponse(data) #查找数据 def get(self,request): case_sets = models.CaseSet.objects.filter(is_delete=False) # 查询所有集合 data = [] # 把查询出来的转换成字典通过model_to_dict方法,并添加进data列表中,最终返回[{'xx':xx},{'xx':xx}] for c in case_sets: d = model_to_dict(c) data.append(d) response = {'code': 0, 'msg': '成功', 'data': data} return JsonResponse(response, json_dumps_params={'ensure_ascii': False}) ##cvb方式,用例表 class CaseView(View): #增加数据 def post(self,request): title = request.POST.get('title') desc = request.POST.get('desc') method = request.POST.get('method') url = request.POST.get('url') params = request.POST.get('params') models.Case.objects.create(title=title, desc=desc,url=url,method=method,params=params) data = {'code': 0, 'msg': '成功'} return JsonResponse(data) #查找数据 def get(self,request): case_sets = models.Case.objects.filter(is_delete=False) # 查询所有集合 data = [] # 把查询出来的转换成字典通过model_to_dict方法,并添加进data列表中,最终返回[{'xx':xx},{'xx':xx}] for c in case_sets: d = model_to_dict(c) data.append(d) response = {'code': 0, 'msg': '成功', 'data': data} return JsonResponse(response, json_dumps_params={'ensure_ascii': False}) #删除数据 def delete(self,request): id = request.GET.get('id') models.Case.objects.filter(id=id).update(is_delete=True) response = {'code': 0, 'msg': '成功'} return JsonResponse(response, json_dumps_params={'ensure_ascii': False})
c.更改url,在这个模块中,自定义一个urls.py文件
#在testcase中自定义一个url 只属于这个模块的,同时需要在总体的urls下配一下 from django.contrib import admin from django.urls import path # from .views import case_set,case_set_all,case_set_new,CaseSet,CaseView from . import views urlpatterns = [ path('add_case_set/',views.case_set),#添加集合 path('case_set_all/',views.case_set_all),#查询集合 path('case_set_new/',views.case_set_new),#两个请求写一个url path('CaseSet/',views.CaseSet.as_view()),#cvb方式 path('CaseView/',views.CaseView.as_view()),#cvb方式
d.在总的urls.py中更改path
from django.contrib import admin from django.urls import path,include from user.views import index,test,blog,detail,add_article,ArticleView from testcase import urls urlpatterns = [ path('admin/', admin.site.urls), path('index/', index),#添加访问的url,index/可自定义,index是views.py中的方法 path('test/', test), path('blog/', blog), # path('category/<int:id>', category), path('detail/', detail), # path('add_article/', add_article),#fvb方式 path('add_article/', ArticleView.as_view()),#cvb方式 #这是子模块testcase里面的url,需要用include导入, #浏览器里访问http://127.0.0.1:8000/testcase/case_set_all #浏览器里访问http://127.0.0.1:8000/testcase/case_set path('testcase/',include(urls)) ]
使用postman 发送请求
get:获取用例集合
http://127.0.0.1:8000/testcase/case_set_all
post:添加集合数据(要传name,desc)参数
http://127.0.0.1:8000/testcase/add_case_set/
使用一个url发请求
http://127.0.0.1:8000/testcase/case_set_new(get,post)
delete:删除id=1的数据
http://127.0.0.1:8000/testcase/case_set_new/?id=1