Sto lottando con le domande filosofiche nella mia struttura DRF usando il gestore paghe Stripe. Sto vendendo un prodotto che ha un modello django Product
attraverso la mia API REST DRF. Mi chiedo se devo creare il Product
e poi gestire il pagamento a mio create
vista come segue:Django Rest Framework e Stripe, best practice?
class ProductViewSet(viewsets.ModelViewSet):
...
def create(self, request):
serializer = ProductSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
product = serializer.save()
try:
response = stripe.Charge.create(
amount=product.cost,
currency="usd",
source=request.data["token"], # Done with Stripe.js
description="Product"
)
product.charge_id = response.charge_id
...
o, invece, se devo gestire il payement nel serializzatore di Product
:
class ProductSerializer(serializers.Serializer):
...
def create(self, validated_data):
product = Product.objects.create(**validated_data)
# Will raise an Excetpion and stop the creation:
response = stripe.Charge.create(
amount=product.cost,
currency="usd",
source=validated_data["token"], # Done with Stripe.js
description="Product"
)
return product
Qual è la migliore pratica? Oppure, mi manca completamente il punto e dovrei farlo in modo diverso?
In secondo luogo, c'è un modo per incorporare Stripe.js e il modulo richiesto nel modello API navigabili per il percorso create
in modo da poter testare il mio REST senza la necessità di alcun frontend?
Grazie per il vostro aiuto
Grazie. Sto semplicemente caricando dopo aver convalidato i dati 'serializer.is_valid (raise_exception = True)' ma prima di creare l'oggetto 'product = serializer.save()' nella mia vista. È un po 'triste dover recuperare alcuni dati da 'request.data' per caricare ... Puoi aggiungere più dettagli (ad es. Bit di codice) sulla seconda parte? – user2024621