Tôi đang đấu tranh với các câu hỏi triết học trong cấu trúc DRF của mình bằng cách sử dụng trình xử lý thanh toán Stripe. Tôi đang bán một sản phẩm có mẫu django Product
thông qua API REST DRF của tôi. Tôi tự hỏi nếu tôi nên tạo các Product
và sau đó xử lý các thanh toán trong create
tôi xem như sau:Django Rest Framework và Stripe, thực hành tốt nhất?
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
...
hoặc thay vào đó, nếu tôi nên xử lý các payement trong serializer của 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
Phương pháp nào tốt hơn? Hoặc, tôi hoàn toàn bỏ lỡ điểm và nên làm điều đó một cách khác nhau?
Thứ hai, có cách nào để nhúng Stripe.js và biểu mẫu bắt buộc trong mẫu API có thể duyệt cho tuyến đường create
để tôi có thể kiểm tra REST của mình mà không cần bất kỳ giao diện người dùng nào không?
Cảm ơn bạn đã giúp đỡ của bạn
Cảm ơn. Tôi chỉ đơn giản là sạc sau khi xác nhận dữ liệu 'serializer.is_valid (raise_exception = True)' nhưng trước khi tạo đối tượng 'product = serializer.save()' trong khung nhìn của tôi. Đó là một chút buồn tôi phải lấy một số dữ liệu từ 'request.data' để tính phí ... Bạn có thể thêm chi tiết hơn (ví dụ bit bit) vào phần thứ hai không? – user2024621