django中编写resetful API可以使用django-rest-framework,django-rest-framework的安装很简单:
pip install djangorestframework
pip install markdown
pip install django-filter
安装完成之后需要在settings中配置一下
rest_framework中有许多现成的组件可以使我们更方便的编写API:
- 认证相关的组件Authentication
- 权限相关的组件Permissions
- 限流相关的组件Throttling,此组件可以对接口访问的次数进行限制,以减轻服务器的压力。
- 过滤相关的组件Filtering,此组件必须安装django-filter ,需要注册app,可以实现查询过滤的功能。
- 序列化相关的组件Serializers,可以实现序列化以及反序列化。
- 分页相关的组件Pagination
- 异常处理相关的组件Exceptions
这些组件的使用都需要配置,配置主要有两种方式:全区配置和局部配置,像序列化、过滤、分页、异常处理等组件在视图中配置就可以了,也就是局部配置。其他组件及可以在视图中配置,也可以在settings中配置,以认证组件为例:
全局配置(seeting.py)
局部配置(views.py)
配置完成之后我们就可以愉快的写API了,以序列化接口为例。
首先要导入相关模块:
from rest_framework import serializers # 导入序列化模块
from rest_framework.views import APIView,Response
from Store.models import Goods # 导入相关models模块
序列化的使用类似django中的form组件的使用,可以对用户请求的数据进行验证以及序列化,序列化即将对象的状态信息转化成可以储存或传输的字符串形式,反序列化即将字符串转化为对象。我们可以使用Serializer自定义序列化的字段,也可以使用ModelSerializer继承数据库里的字段进行序列化。
自定义序列化:
class GoodsSerializers(serializers.Serializer):
goods_name = serializers.CharField(max_length=32)
goods_price = serializers.FloatField()
goods_number = serializers.IntegerField()
goods_description = serializers.CharField(max_length=100)
class Goodss(APIView):
def get(self,req):
goods = Goods.objects.all()
serializer = GoodsSerializers(goods,many=True) # many=True序列化queryset以及model
return Response(serializer.data)
结果如下:
同样我们也可以使用ModelSerializer继承数据库字段进行序列化:
class GoodsSerializers(serializers.ModelSerializer):
class Meta:
model = Goods
fields = ("goods_name","goods_price","goods_number","goods_description")
class Goodss(APIView):
def get(self,req):
goods = Goods.objects.all()
serializer = GoodsSerializers(goods,many=True)
return Response(serializer.data)
得到的结果和自定义的相同。
以上就是关于django中restfull API编写的基础介绍,有时间在对这些组件进行详细的介绍。
具体序列化操作可参考:https://blog.csdn.net/zhangmengran/article/details/84887206