关于 django REST CRUD 的简单示例
simple example about django REST CRUD
我正在为餐厅开发 Django REST API 项目。
我必须获取客户端请求,对于某些请求,我会发送模型对象,对于更新或删除请求,我会向客户端发送反馈。
假设我的 models.py
是这样的:
# models.py
---------------------------------------------------------------------------
class Table(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30, null=False, blank=False)
is_free = models.BooleanField(default=True)
def __str__(self):
return '%s %s %s' % (self.id, self.name, self.is_free)
class Order(models.Model):
order_id = models.AutoField(primary_key=True)
table_id = models.ForeignKey(Table, on_delete=models.CASCADE)
total_price = models.IntegerField()
def __str__(self):
return '%s %s' % (self.order_id, self.total_price)
我想为客户端 GET 请求发送所有订单的列表,为更新和删除请求发送反馈,并发送 True 或 False 是否具有从客户端发送的特定 table是否免费。
不幸的是,我看了这么多文档后感到困惑。
能否请您举一个简单的例子来实现这些目的?
之后你能举个例子说明如何序列化 none 模型对象供客户使用吗?
提前致谢。
也许最简单的方法是使用 ModelViewSet
和 ModelSerializer
,它们将提供基本的 CRUD 操作。
serializers.py
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ('order_id', 'table_id', 'total_price')
views.py
class OrderViewSet(viewsets.ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrderSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('table_id',)
urls.py
from rest_framework import routers
router = routers.SimpleRouter()
router.register(r'orders', OrderViewSet)
urlpatterns = router.urls
获取所有订单:
http://host/orders/
通过 id 获取订单:
http://host/orders/123/
获取特定 table 的所有订单:
http://host/orders/?table_id=456
使用 PUT 更新订单:
# PUT using form data total_price=100
http://host/orders/123/
# Response
{"order_id": 123, "table_id": 456, "total_price": 100}
使用 DELETE 删除订单:
# DELETE
http://host/orders/123/
# Response has no content
要查询具有特定 id 的 table 是否免费,您可以使用相同的方法,但使用 TableViewSet
:
# Get a table with a specific id
http://host/tables/456/
然后在您返回的 JSON 响应中计算 is_free
属性。
# Response
{"id": 456, "name": "table name", "is_free": true}
我正在为餐厅开发 Django REST API 项目。
我必须获取客户端请求,对于某些请求,我会发送模型对象,对于更新或删除请求,我会向客户端发送反馈。
假设我的 models.py
是这样的:
# models.py
---------------------------------------------------------------------------
class Table(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30, null=False, blank=False)
is_free = models.BooleanField(default=True)
def __str__(self):
return '%s %s %s' % (self.id, self.name, self.is_free)
class Order(models.Model):
order_id = models.AutoField(primary_key=True)
table_id = models.ForeignKey(Table, on_delete=models.CASCADE)
total_price = models.IntegerField()
def __str__(self):
return '%s %s' % (self.order_id, self.total_price)
我想为客户端 GET 请求发送所有订单的列表,为更新和删除请求发送反馈,并发送 True 或 False 是否具有从客户端发送的特定 table是否免费。
不幸的是,我看了这么多文档后感到困惑。
能否请您举一个简单的例子来实现这些目的?
之后你能举个例子说明如何序列化 none 模型对象供客户使用吗?
提前致谢。
也许最简单的方法是使用 ModelViewSet
和 ModelSerializer
,它们将提供基本的 CRUD 操作。
serializers.py
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ('order_id', 'table_id', 'total_price')
views.py
class OrderViewSet(viewsets.ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrderSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('table_id',)
urls.py
from rest_framework import routers
router = routers.SimpleRouter()
router.register(r'orders', OrderViewSet)
urlpatterns = router.urls
获取所有订单:
http://host/orders/
通过 id 获取订单:
http://host/orders/123/
获取特定 table 的所有订单:
http://host/orders/?table_id=456
使用 PUT 更新订单:
# PUT using form data total_price=100
http://host/orders/123/
# Response
{"order_id": 123, "table_id": 456, "total_price": 100}
使用 DELETE 删除订单:
# DELETE
http://host/orders/123/
# Response has no content
要查询具有特定 id 的 table 是否免费,您可以使用相同的方法,但使用 TableViewSet
:
# Get a table with a specific id
http://host/tables/456/
然后在您返回的 JSON 响应中计算 is_free
属性。
# Response
{"id": 456, "name": "table name", "is_free": true}