Где я могу разместить логи c для проверки и преобразования запроса в объект модели в DRF? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть работающее приложение python, которое я пытаюсь преобразовать в веб-приложение, используя django и django rest. Сейчас я просто хочу сделать почтовый запрос, содержащий некоторые данные:

{
"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']

Куда я должен поместить код для проверки данных запроса, и куда я должен поместить лог расчета c? Могу ли я поставить оба в классе представления, как показано ниже? И где к этому подходит сериализатор?

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

1 Ответ

0 голосов
/ 26 марта 2020

Вы бы создали класс, TradeSerializer(). Проверка будет выполнена в методе validate этого класса. Создание нового объекта Trade будет выполнено в методе create вашего класса TradeSerializer.

Эта страница должна ответить на все ваши остальные вопросы.

...