Mam problemy filozoficzne w mojej strukturze DRF za pomocą handlarza płatności Stripe. Sprzedaję produkt, który ma model django Product
poprzez mój interfejs API REST DRF. Zastanawiam się, czy należy utworzyć Product
a następnie obsługiwać płatności w moim create
widzenia następująco:Django Rest Framework and Stripe, najlepsza praktyka?
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
...
lub zamiast tego, czy należy obsłużyć PAYEMENT w serializatora z 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
Która z nich jest lepszą praktyką? Czy też całkowicie pomijam ten punkt i powinienem zrobić to inaczej?
Po drugie, czy istnieje sposób na osadzenie Stripe.js i wymaganego formularza w szablonie interfejsu API do przeglądania dla trasy create
, aby przetestować mój REST bez potrzeby jakiegokolwiek frontendu?
Dziękuję za pomoc
Dzięki. Po prostu ładuję po sprawdzeniu danych 'serializer.is_valid (raise_exception = True)', ale przed utworzeniem obiektu 'product = serializer.save()' w moim widoku. To trochę smutne, że muszę pobierać niektóre dane z 'request.data', by ładować ... Czy możesz dodać więcej szczegółów (np. Bit kodu) w drugiej części? – user2024621