Django-13-REST framework接口开发

1. 安装及配置

安装:
pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support
配置:

在项目设置文件中的,INSTALLED_APPS添加'rest_framework'

#settings.py
INSTALLED_APPS = (
    ...
    'rest_framework',
)

在项目根urls文件中添加api-auth路径,包含rest_framework的登录/注销页面,当做了用户认证管理后可以跳转到rest framework的登录页。

#urls.py
urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls'))
]
运行python manager.py migrate创建rest_framework相关的数据库表


2. 创建接口

现有模型如下:

class Comment(models.Model):
    def __str__(self):
        return '%s' % self.comment
    message = models.ForeignKey(Message, related_name='comments', on_delete=models.CASCADE, verbose_name='留言')
    comment = models.CharField(default='', max_length=200, verbose_name='评论')
    comment_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comment_by', verbose_name='评论人')
    date = models.DateTimeField(default=timezone.now, editable=False, verbose_name='提交时间')

    class Meta:
        ordering = ('-date',)
        verbose_name = '评论'
        verbose_name_plural = '评论'

message为外键,Message为留言的模型,每个留言下可以有多条评论Comment。

第一步:序列化Serializaiton

序列化的作用是让模型中的各字段可以以json形式展现出来。也就是在这里定义接口返回的字段信息。

现在在应用路径下新建文件serialization.py,在这个文件中写入

from rest_framework import serializers
from home.models import Comment

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = '__all__'

这里序列化Comment模型中所有字段。

注意:这里用到的ModelSerializer其实是rest framework封装之后的写法,其作用相当于简化了以下步骤:

Django-13-REST framework接口开发_第1张图片

详见官网: http://www.django-rest-framework.org/tutorial/1-serialization/

第二步:创建视图

在应用的views.py文件中添加:

class CommentViewSet(viewsets.ModelViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = (permissions.IsAuthenticated,)

这里的ViewSet相当于一个类视图集合,将原本分开定义的CommentList和CommentDetail类视图(继承generics.ListCreateAPIView等这类generic Class-based View的视图)集合在一起,简化了代码。

rest framework中的generic Class-based View相当于Django中的基础视图generic View, 比如ListView,DetailView等,定义类视图时可以基于这些基础视图,用于简化自定义的方法视图。

建议还是了解一下代码简化的过程,怎么从方法视图简化到类视图,再简化到viewset。可以看官网的几个页面:
http://www.django-rest-framework.org/tutorial/2-requests-and-responses/
http://www.django-rest-framework.org/tutorial/3-class-based-views/
http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/

另外,这里serializer_class定义序列化的类,关联到上一步的CommentSerializer。permission_classes设置接口访问权限,这里设为授权后即可,也就是登录后的用户就可以看到了。可以查看permissions文件看看其它几种权限。

第三步:routers注册接口路径

在应用的urls.py文件中添加:

from django.urls import path, include
from rest_framework.routers import DefaultRouter

from . import views

router = DefaultRouter()
router.register(r'comment', views.CommentViewSet)

...
urlpatterns = [
    ...
    path('api/', include(router.urls)),
]

这样注册后,评论列表的api路径为:http://127.0.0.1:8000/api/comment/
然后就可以直接在浏览器查看到接口的返回啦。

Django-13-REST framework接口开发_第2张图片

可以在地址后面加上评论的id,跳转到评论详情的接口地址。
Django-13-REST framework接口开发_第3张图片

你可能感兴趣的:(Django-13-REST framework接口开发)