首先创建项目创建APP与前后端未分离时是一样的,参考第一步第二步即可:https://blog.csdn.net/weixin_43844071/article/details/105363442
1.设置链接的数据库、注册APP
在项目的settings.py文件中修改DATABASS和INSTALLED_APPS的值
# 连接数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': 'test123',
'HOST': 'localhost',
'PORT': '3306',
}
}
# 注册App,告诉django给哪个APP建表
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework.authtoken',
'tool_box',# 这个新添加的
]
2.创建表字段建表
创建模型(建表),在app的models.py文件中添加以下代码:
from django.db import models
class products_dddd(models.Model):
"""
产品表
"""
productName = models.CharField("产品名称",max_length=30,default="",null=False,help_text="产品名称")
productDesc = models.CharField("产品描述",max_length=255,default="",null=False,help_text="产品描述")
accountDatabase = models.CharField("账号数据表",max_length=128,default="",null=False,help_text="账号数据表")
class Meta:
verbose_name = "公司的所有产品表"
verbose_name_plural = verbose_name
unique_together = ('productName', 'accountDatabase')
def _str_(self):
return self.productName
在终端窗口输入命令:
python manage.py makemigrations # 创建表
python manage.py migrate # 执行数据库建表操作
查看数据库是否生产products_dddd,及相应的表字段
3.编写视图层
在APP/views.py文件中添加以下代码:
from framework.viewsets_processor import *
from tool_box.serializers.products_serializer import *
from tool_box.service.tools.products_service import ProductsService
# 导入路径写到.py文件
class testProductListView(BaseListModelViewSet):
"""
list:
产品列表
"""
queryset = products_dddd.objects.all()# 将查询的model(products_dddd)的所有结果返回给queryset集合 all()是Django API提供的内置函数
serializer_class = ProductsddSerializer
response_operation_func = {ProductsService: 'edit_productName'}# 回传参数处理函数{类名:‘方法名’}
# permission_classes = (IsAuthenticated, )
class testProductCreateView(BaseCreateModelViewSet):
"""
create:
新增产品
"""
serializer_class = ProductsddSerializer
# permission_classes = (IsAuthenticated, )
perform_creat_func = {ProductsService:'creat_productName'}# 定义post接口的数据库自动以业务处理逻辑
class testProductEditView(BaseUpdateModelViewSet):
"""
update:
编辑产品
"""
queryset = products_dddd.objects.all()
serializer_class = ProductsddSerializer
# permission_classes = (IsAuthenticated, )
perform_update_func = {ProductsService:'update_productName'}# 定义put接口的数据库自动以业务处理逻辑
object是Manager类型的对象,定义在from django.db import models中,是默认生成的,也就是objects。
Modes.Manage() 用途是数据库和模型对象交互的接口(api)。book_set返回的是个集合,book_list返回的是个列表。
Book.objects.all(),这个翻译成银行得话就是,一个叫BOOK得人来到银行,通过一个名叫objects的柜员,查询BOOK的银行余额和银行卡信息,结果得到一个queryset对象在book = BOOK.objects.get()或者book = BOOK.objects.all()中。
4.编写序列化类
接口返回的字段,在APP/serializers/products_serializer.py文件中添加以下代码:
from rest_framework import serializers
from tool_box.models import *
class ProductsddSerializer(serializers.ModelSerializer):
class Meta:
model = products_dddd # 序列化的模型,与model中创建的表名一致
fields = ['id', 'productName', 'productDesc', 'accountDatabase'] # 需要序列化的字段
5.编写业务层
在APP/service/products_service.py文件中添加以下代码:
class ProductsService(object):
def edit_productName(self, **kwargs):
"""
处理产品名称字段
:param kwargs:'data':data
'request':self.request,
:return:最终回传数据
"""
request = kwargs['request']
data = kwargs['data']
for product in data:
if product['productName']:
product['productName'] +='-beatiful'
return data
def creat_productName(self, **kwargs):
"""
:param kwargs:
:return:
"""
serializer = kwargs['serializer']
if 'productName' in serializer.validated_data:
serializer.validated_data['productName'] = serializer.validated_data['productName'] + "hahahaha"
else:
serializer.validated_data['productName'] = "hahahahA"
# 数据库存储
serializer.sava()
return serializer
def update_productName(self, **kwargs):
serializer = kwargs['serializer']
serializer.validated_data['productName'] = serializer.validated_data['productName'] + "meimei"
# 数据库存储
serializer.save()
return serializer
6.配置路由
路由都写在项目的urls.py文件中
#产品测试
router.register(r'api_automation/product/testProductsList', testProductListView, base_name="testProductListView")
router.register(r'api_automation/product/testAddProduct', testProductCreateView, base_name="testProductCreateView")
router.register(r'api_automation/product/testEditProduct', testProductEditView, base_name="testProductEditView")
到这里完整的post 接口和get接口已经完成了
运行项目后通过Jmeter请求接口,
练习中的相关问题及解答