Асинхронные представления на основе классов в Django

Я новичок в Django и работаю над приложением на основе Stripe и обнаружил, что мои представления на основе классов работают очень медленно, а мне нужно сделать так, чтобы они работали как можно быстрее. Я обнаружил, что в Django есть Asynchronous Support, но я не могу понять, как я могу использовать его в представлениях, основанных на классах, везде, где я нахожу, есть примеры, основанные на функциях.

Документация по Django, которую я изучал, была: Django Asynchronous Support

Я добавляю пример кода, где я хочу преобразовать его в представление с поддержкой async

VIEW:

class BillInfo(DisablePATCHMethod, generics.RetrieveAPIView):

serializer_class = BillSerializer

SERIALIZER:

class BillSerializer(ReturnNoneSerializer, serializers.ModelSerializer):
interval = serializers.CharField(read_only=True, required=False)
amount = serializers.IntegerField(read_only=True, required=False)
date = serializers.DateTimeField(read_only=True, required=False)
is_active = serializers.BooleanField(read_only=True, required=False)
subscription_expiry = serializers.BooleanField(read_only=True, required=False)
active_jobs = serializers.IntegerField(read_only=True, required=False)

class Meta:
    model = Billing
    fields = "__all__"

def to_representation(self, validated_data):
    stripe.api_key = settings.STRIPE_API_KEY
      stripe_sub = (stripe.Subscription.retrieve(self.context["request"].billing.stripe_subscription_id))
        stripe_object = stripe_sub.get("items")
        quantity = stripe_object.get("data")[0].get("quantity")
        amount = stripe_object.get("data")[0].get("price").get("unit_amount") // 100 * quantity
        interval = stripe_object.get("data")[0].get("plan").get("interval")
        date = datetime.fromtimestamp(stripe_sub.current_period_end).strftime("%Y-%m-%d %H:%M:%S")
        if validated_data.subscription_end < make_aware(datetime.now()):
            is_active = False
        else:
            is_active = True
        if validated_data.subscription_end <= make_aware(datetime.now()):
            subscription_expiry = True
        else:
            subscription_expiry = False
        return {
            "date": date,
            "interval": interval,
            "amount": amount,
            "quantity": quantity,
            "is_active": is_active,
            "subscription_expiry": subscription_expiry,
        }

Я хочу сделать мой вызов Stripe быстрее. Любая помощь будет оценена по достоинству, я новичок и изучаю Django.

Когда вам нужно повысить производительность, начните с профайлера. Медленная часть может оказаться не тем, что вы ожидаете.

В частности, я подозреваю, что вызов Stripe API как часть обычного преобразования JSON может быть медленным. Возможно, вы захотите кэшировать копию данных Stripe API в модели Subscription, чтобы не обращаться к внешнему API при каждом запросе. Однако... опять же... сначала убедитесь, что вы профилируетесь.

Вернуться на верх