Django编写post、get接口

首先创建项目创建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,及相应的表字段
在数据库中可以看到,表名是APP的名字_表名拼接起来的

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请求接口,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
练习中的相关问题及解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值