Django常用的接口封装类有render_to_response、JsonResponse、Response等,各类的使用及参数设置方法文档里都有说明,不赘述。尽管封装方法多样,但是url-view映射自定义接口的封装模式相对比较麻烦。
DJANO 从1.10版本开始,可以使用Edjangorestframework模块来进行WEB APIs管理,如文档所言,REST framework是一款灵活、强大的API管理工具包,绝对是一款利器!
安装使用要点(示例):
1,环境要求:
python2.7 , 3.2及以上;Django >1.10.
2,安装:
pip install djangorestframework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support
3,使用
(1)settings.py配置
<1>
INSTALLED_APPS中加入rest_framework
INSTALLED_APPS= {
...
'rest_framework',
}
< 2>权限认证
REST_FRAMEWORK= {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}
(2) 模型定义,序列化
models.py模型定义:
classTemplateMail(models.Model): """邮件参数模板表模型类"""
name= models.CharField(max_length=255, unique=True)
description= models.TextField(max_length=1023, blank=True, null=True)
subject= models.TextField(max_length=2047)
#其他字段 序列化serialiser:
class TemplateMailSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model= TemplateMail
fields= ("id", "name", "description", "subject", ) #其他字段
方法定义:
def create(self, validated_data):
"""
Create and return a new `Snippet` instance, given the validated data.
"""
return TemplateMail.objects.create(**validated_data)
def update(self, instance, validated_data):
"""
Update and return an existing `Snippet` instance, given the validated data.
"""
instance.name= validated_data.get('name', instance.name)
instance.description= validated_data.get('description', instance.description)
instance.subject= validated_data.get('subject', instance.subject)
# 其他 字段
instance.save()
return instance
(3) Viewset(app/views.py中)
@api_view(["GET", "POST"])
def templatemail_list(request, format=None):
"""
List all code TemplateMail, or create a newTemplateMail.
"""
if request.method== 'GET':
mailtpls= TemplateMail.objects.filter(active=True)#all()
serializer= TemplateMailSerializer(mailtpls, many=True)
return Response(serializer.data)
elif request.method== 'POST':
serializer= TemplateMailSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET', 'PUT', 'DELETE'])
def templatemail_detail(request, id, format=None):
"""
Retrieve, update or delete a code snippet.
"""
try:
tplmail= TemplateMail.objects.get(id=id, active=True)
except TemplateMail.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method== 'GET':
serializer= TemplateMailSerializer(tplmail)
return Response(serializer.data)
elif request.method== 'PUT':
serializer= TemplateMailSerializer(tplmail, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method== 'DELETE':
tplmail.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
(4) 添加路由(如果需要在WEB端使用)
app/urls.py下
urlpatterns= [...
url(r'^mailtpl$', templatemail_list), # 列表、create
url(r'^mailtpl/(?P<id>[0-9]+)$', templatemail_detail), # 更新/删除
]
(5)API调用
依照标准restful API调用模式
1> 获取模型对象列表 site/mailtpl, GET方法;
2>创建模型对象:~/mailtpl, POST方法,传递对象信息;
3>更新模型对象:~/mailtpl/(对象id), PUT方法,传递对象信息;
4>删除模型对象:~/mailtpl/(对象id),GET方法;
OK ,如需其他接口,可参考以上模式进行封装。
以上结合自己的应用实践,讲了一些rest_framework的使用要点,详细使用方法可直接参照官方文档。
django rest framework真的非常强大,没有用起来的小伙伴抓紧了。
希望对未使用或打算使用DJANGO rest_framwork来进行WEB API 管理的同学有所帮助。
网友评论