DRF是Django Rest Framework单词的简写,是在Django框架中实现Restful API的一个插件,使用他可以非常方便的实现接口数据的返回。Django中也可以使用JsonResponse直接返回json格式的数据,但是DRF相比直接使用Django返回json数据有以下几个好处:
API文档,在前后端分离开发的时候进行沟通比较有用。OAuth1和OAuth2验证。ORM模型和非ORM数据的序列化。json数据更加的高效。通过命令:pip install djangorestframework==3.15.1 ,即可安装。课程中的版本是3.15.1
安装完后,使用他还需要进行在settings.INSTALLED_APPS中进行安装。
INSTALLED_APPS = [
...
'rest_framework',
]
创建一个名叫meituan的app,然后在meituan.models中创建以下模型:
from django.db import models
from django.contrib.auth.models import User
class Merchant(models.Model):
"""
商家
"""
name = models.CharField(max_length=200,verbose_name='商家名称',null=False)
address = models.CharField(max_length=200,verbose_name='商家',null=False)
logo = models.CharField(max_length=200,verbose_name='商家logo',null=False)
notice = models.CharField(max_length=200, verbose_name='商家的公告',null=True,blank=True)
up_send = models.DecimalField(verbose_name='起送价',default=0,max_digits=6,decimal_places=2)
lon = models.FloatField(verbose_name='经度')
lat = models.FloatField(verbose_name='纬度')
created = models.ForeignKey(User,on_delete=models.SET_NULL,null=True)
class GoodsCategory(models.Model):
"""
商家商品分类
"""
name = models.CharField(max_length=20,verbose_name='分类名称')
merchant = models.ForeignKey(Merchant,on_delete=models.CASCADE,verbose_name='所属商家',related_name='categories')
class Goods(models.Model):
"""
商品
"""
name = models.CharField(max_length=200,verbose_name='商品名称')
picture = models.CharField(max_length=200,verbose_name='商品图片')
intro = models.CharField(max_length=200)
price = models.DecimalField(verbose_name='商品价格',max_digits=6,decimal_places=2) # 最多6位数,2位小数。9999.99
category = models.ForeignKey(GoodsCategory,on_delete=models.CASCADE,related_name='goods_list')
创建完模型后,运行makemigrations和migrate后把模型映射到mysql数据库中。然后在navicat中,把meituan_merchant.sql文件运行后,添加测试数据。
在meituan这个app中新创建一个文件serializers.py,然后添加以下代码:
from rest_framework import serializers
from .models import Merchant,GoodsCategory,Goods
class MerchantSerializer(serializers.ModelSerializer):
class Meta:
model = Merchant
fields = "__all__"
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = "__all__"
class GoodsSerializer(serializers.ModelSerializer):
class Meta:
model = Goods
fields = "__all__"