django rest framework官方文档地址:https://www.django-rest-framework.org/

django rest framework介绍

下面是你可能会选择 REST framework的几个点:

  • Web browsable API 对于你的开发来说,是一个强需求。

  • 身份验证策略 包括了 OAuth1a 和 OAuth2。

  • 序列化 支持 ORM 和 非ORM 的数据源。

  • 高度可定制化 - 如果你不需要更多、更强大的 功能,也可以直接使用 常规的、基于函数的视图 。

  • 丰富的文档, 和 强大的社区支持。

  • 被大量国际知名公司使用和信任,它们包括: Mozilla, Red Hat, Heroku, 和 Eventbrite。

安装drf

在全量或者虚拟环境下安装drf以及相关依赖包

pip install markdown==3.1.1
pip install Pygments==2.4.2
pip install django-filter==2.2.0
pip install django-guardian==2.0.0
pip install coreapi==2.3.3
pip install djangorestframework==3.10.2
pip install django-crispy-forms==1.7.2

settings.py配置

打开settings.py添加如下

INSTALLED_APPS = [
    ...,
    'crispy_forms',
    'rest_framework',
    ...,
]

使用APIView方法实现文章列表序列化

我们开始使用Web API的第一件事就是提供一种将代码片段实例序列化和反序列化为表示形式 (如 json) 的方法。我们可以通过声明与 Django forms非常相似的序列化器 (serializers) 实现。在blogs的目录下创建一个名为serializers.py文件,并添加以下内容

from rest_framework import serializers

from blogs.models import Article

class ArticleSerializer(serializers.Serializer):
    """
    文章列表
    """
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(max_length=150)
    content = serializers.CharField(style={'base_template': 'textarea.html'})
    click_num = serializers.IntegerField(default=0)
    cover = serializers.ImageField()
    add_time = serializers.DateTimeField()

    def create(self, validated_data):
        """
        Create and return a new `Article` instance, given the validated data.
        """
        return Article.objects.create(**validated_data)

在blogs下的views.py里编写,新增get和post方法

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView

from .serializers import ArticleSerializer
from .models import Article

class ArticleListView(APIView):
    """
    列出所有文章
    """
    def get(self, request, format=None):
        article = Article.objects.all()[:5]
        serializer = ArticleSerializer(article, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = ArticleSerializer(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)

LehuXuexi文件下配置api认证路由,在urls.py新增

urlpatterns = [
    ...,
    # api 认证
    re_path(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    ...,

运行项目在浏览器输入 http://localhost:8000/articles/ ,打开了接口页面,接下来简单介绍下页面功能

  • 点击OPTIONS会发起一个请求,列出当前接口允许的请求数据

  • 点击GET可以选择json或者api方式展示

  • 使用POST方法可以选择 application/jsonapplication/x-www-form-urlencodedmultipart/form-data三种类型提交

  • 看到cover字段的值自动加上了 media路径 markdown

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://zhangyanc.club/subject/article/django-drf/

许可协议:署名-非商业性使用 4.0 国际许可协议