我在使用支付处理程序Stripe时,为DRF结构中的哲学问题而苦恼。 我通过DRF REST API销售具有Django模型Product
的产品。 我在思考是否应该创建Product
,然后像下面这样在我的create
视图中处理付款:
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
...
或者,反之,如果我应该在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
哪种做法更好?或者,我完全错了,应该采用不同的方法吗?
其次,是否有一种方法可以在Browsable API模板中嵌入Stripe.js和所需的表单,以便我可以在不需要任何前端的情况下测试我的REST?
谢谢你的帮助。
product= serializer.save()
之前,我只是在验证数据serializer.is_valid(raise_exception=True)
后进行充电。有点遗憾的是,我必须从request.data
中检索一些数据来收费...你能在第二部分添加更多细节(例如代码片段)吗? - user2024621