快速生成API,后端分离。
1.使用了 https://github.com/zmrenwu/django-blog-tutorial.git 该项目作为模板,
教程参考:一份官方文档:http://www.django-rest-framework.org/tutorial/1-serialization/
一份gitbook文档(翻译版):https://whatwewant.gitbooks.io/django-rest-framework-tutorial-cn/content/1.Serialization.html
两份文档在代码上存在略微差异,需要细细比较,对照。
2.学习部分:
一、使用serializer,序列化:
serializers.py: 存在手动serializer 每个model 的field,也存在快速serializer。
views.py: 定义list和detail的方法(使用JOSNResponse响应数据以及状态码)
urls.py; 更新url
二、使用 REST框架的 Response 和 APIView
views.py: 使用Response ,用装饰器 @api_view ,在方法中添加format格式
urls.py: 更新urlpatterns,添加格式后缀模式format_suffix_patterns(urlpatterns)
三、 使用视图类 ——>使用REST框架的混合类(mixin classes),再使用一般类(generic class)
views.py: 基于视图的类一样重写根视图 APIView 使用混合类(mixin classes),使用一般类(generic class)。以此不断减少代码。
url.py: 更新demo.as_view()
四、创建permissions.py,关联User
models.py: 外键关联django自带的User
serializers.py: 引入UserSerializer --------报错;'Category' object is not iterable ,此时检查超链接字段中不能包含 many=True 详情参考 官方文档:Dealing with nested objects
views.py; 添加perform_create 方法, 之后在serializer 中手动添加序列化字段 关联user和APP, 在view添加 permission_classes
urls.py: 在urls.py
底部为API添加一个包括登录和退出视图的url样式,添加url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
permissions.py: 新建permissions.py ,创建自定义权限, 在view中permission_classes添加自定义权限,授权API
五、创建超链接
views.py: 创建api_root方法,使用reverse
serializers.py 继承serializer.HyperlinkedModelSerializer类,此处添加URL时,不知道什么原因,会找不到 demo-detail报错:You may have failed to include the related model in you r API,此时应重写url参数:url = serializers.HyperlinkedIdentityField(view_name='blog:user-detail',) 在视图名内带上APP名称 ,
urls.py 为每个view的类带上name,方便查找,规范url
settings.py REST_FRAMEWORK = { 'PAGE_SIZE': 10 }
添加分页
六、使用ViewSets、router 来减少代码量
views.py: 继承viewsets,其他不变
urls.py: 可以手动绑定url和viewsets,也可以使用router,直接简便的绑定url。