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

posted @ 2020-01-07 14:17  小马哥007  阅读(222)  评论(0编辑  收藏  举报