我在哪里将用于验证请求并将其转换为DRF的模型对象的逻辑?

问题描述 投票:0回答:1

我有一个正在工作的python应用,正在尝试使用django和django rest在webapp中进行转换。现在,我只想发出包含一些数据的发布请求:

{
"orderside" :"long",
"symbol" : "BTCUSDT",
"leverage" : "20",
"entry_price" : "100",
"order_cost" : "5.2",
"sl_price" :"99.4",
"tp_price" : "101.2"
}

基于此数据,我需要进行一些有效性检查和一些计算。如果数据有效,我想将结果作为贸易实体保存在数据库中(从请求到模型的映射没有1对1的关系)。

这是交易的模型:

from django.db import models

class Trade(models.Model):
    created_datetime = models.DateTimeField(auto_now_add=True)
    entry_filled_datetime = models.DateTimeField()
    tp_sl_filled_datetime = models.DateTimeField()
    orderside = models.CharField(max_length=10)
    symbol = models.CharField(max_length=10)
    leverage = models.PositiveSmallIntegerField()
    entry_price = models.FloatField()
    quantity = models.FloatField()
    sl_price = models.FloatField()
    tp_price = models.FloatField()
    entry_id = models.CharField(max_length=25)
    tp_id = models.CharField(max_length=25)
    sl_id = models.CharField(max_length=25)
    state = models.PositiveSmallIntegerField()
    side = models.CharField(max_length=10)

    class Meta:
        ordering = ['created_datetime']

我必须在哪里放置用于验证请求数据的代码,在哪里放置计算逻辑?我可以像下面一样将它们都放在视图类中吗?串行器在哪里适合呢?

class TradeView(APIView):

    def post(self, request, format=None):

        if check_valid_request_data(request.data):

            # do_calculations here and return model instance?
            trade = do_calculations(request.data)  # tuple for example

            # save trade to db
            trade.save()

            return Response(status=status.HTTP_201_CREATED)

        return Response(status=status.HTTP_400_BAD_REQUEST)



    def check_valid_request_data(data):
        # validation checklist


    def do_calculations(data):
        # calculate trade parameters like quantity etc
        # return model instance from calculations and fields in request
python django django-models django-rest-framework django-serializer
1个回答
0
投票

您将创建一个类,TradeSerializer()。验证将在该类的validate方法中进行。新的Trade对象的创建将在TradeSerializer类的create方法中完成。

[This页面应回答您所有其他的后续问题。

© www.soinside.com 2019 - 2024. All rights reserved.