coreapi (1.32.0+) - Schema generation support.
Markdown (2.1.0+) - Markdown support for the browsable API.
django-filter (1.0.1+) - Filtering support.
django-crispy-forms - Improved HTML display for filtering.
django-guardian (1.1.1+) - Object level permissions support.
$ pip install coreapi markdown django-filter django-crispy-forms django-guardian djangorestframework
INSTALLED_APPS = (
...
‘rest_framework‘,
)
from django.conf.urls import include
urlpatterns = [
...
url(r‘^api-auth/‘, include(‘rest_framework.urls‘))
]
projects/apps/goods/models.py
from django.db import models
class Goods(models.Model):
"""
商品
"""
name = models.CharField(max_length=100, verbose_name="商品名")
category = models.ForeignKey(GoodsCategory, verbose_name="商品类别", on_delete=models.CASCADE)
sold_num = models.IntegerField(default=0, verbose_name="商品销售量")
fav_num = models.IntegerField(default=0, verbose_name="收藏数")
goods_num = models.IntegerField(default=0, verbose_name="库存数")
price = models.FloatField(default=0, verbose_name="本店价格")
class Meta:
verbose_name = ‘商品‘
verbose_name_plural = verbose_name
def __str__(self):
return self.name
$ python manage.py makemigrations goods $ python manage.py migrate
如同Django提供了Form类和ModelForm类一样,REST framework包括Serializer类和ModelSerializer类.
from rest_framework import serializers
from goods.models import Goods
class GoodsSerializer(serializers.ModelSerializer):
class Meta:
model = Goods
# fields = ("name","sold_num","fav_num","price")
fields = "__all__"
上述代码还存在一个问题,由于category字段是Category表的外键,因此此处我们显示的结果仅仅是Category表中的id,而不是该表的所有字段
解决方法:
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = "__all__"
class GoodsSerializer(serializers.ModelSerializer):
category = CategorySerializer()
class Meta:
model = Goods
# fields = ("name","sold_num","fav_num","price")
fields = "__all__"
如果应用于多对多关系,则应将此参数设置为True,category = CategorySerializer(many=True)
django-rest-framework(serialization)
原文:https://www.cnblogs.com/zenan/p/10470247.html