【Django进阶】django-rest-framework中文文档——快速入门
【Django进阶】django-rest-framework中文文档——快速入门
简介
Django REST 框架是一个强大且灵活的工具包,用于构建 Web API。 您可能想要使用 REST 框架的一些原因:
-
Web可浏览 API为您的开发人员带来了巨大的可用性优势。
-
身份验证策略包括OAuth1a和OAuth2的包。
-
支持ORM和非 ORM数据源的序列化。
-
完全可定制 -如果您不需要更强大的功能,只需使用常规的基于函数的视图即可。
-
广泛的文档和强大的社区支持。
-
受到Mozilla、Red Hat、Heroku和Eventbrite等国际知名公司的使用和信任。
安装要求
REST 框架需要以下内容:
-
Python(3.6、3.7、3.8、3.9、3.10)
-
Djnago(2.2、3.0、3.1、3.2、4.0、4.1
强烈推荐并仅官方支持每个 Python 和 Django 系列的最新补丁版本。 以下软件包是可选的:
-
PyYAML、uritemplate (5.1+、3.0.0+) - 模式生成支持。
-
Markdown (3.0.0+) - 对可浏览 API 的 Markdown 支持。
-
Pygments (2.4.0+) - 在 Markdown 处理中添加语法突出显示。
-
django-filter (1.0.1+) - 过滤支持。
-
django-guardian (1.1.1+) - 对象级权限支持。
安装
pip install djangorestframework
djangorestframework本身是一个应用程序,需要使用必须在setting.py文件中注册
INSTALLED_APPS = [ ... 'rest_framework', ]
如果您打算使用可浏览的 API,您可能还需要添加 REST 框架的登录和注销视图。将以下内容添加到您的根urls.py文件中。UR路径可以是您想要的任何路径。
urlpatterns = [ ... path('api-auth/', include('rest_framework.urls')) ]
快速使用
我们将创建一个简单的 API 来允许管理员用户查看和编辑系统中的用户和组。
项目设置
创建一个名为 的新 Django 项目tutorial,然后启动一个名为 的新应用程序quickstart。
# 创建tutorial并切换到tutorial目录 mkdir tutorial cd tutorial # 创建虚拟环境,并进入虚拟环境 python3 -m venv env source env/bin/activate # 如果是Windows使用`env\Scripts\activate` # 安装Django和djangorestframework pip install django pip install djangorestframework # 创建名称为tutorial的项目,再创建名称为quickstart的应用程序 django-admin startproject tutorial cd tutorial django-admin startapp quickstart cd ..
截图使用Pycharms创建项目与应用程序,自动安装Django
项目布局
$ pwd <some path>/tutorial $ find . . ./manage.py ./tutorial ./tutorial/__init__.py ./tutorial/quickstart ./tutorial/quickstart/__init__.py ./tutorial/quickstart/admin.py ./tutorial/quickstart/apps.py ./tutorial/quickstart/migrations ./tutorial/quickstart/migrations/__init__.py ./tutorial/quickstart/models.py ./tutorial/quickstart/tests.py ./tutorial/quickstart/views.py ./tutorial/asgi.py ./tutorial/settings.py ./tutorial/urls.py ./tutorial/wsgi.py
同步数据库
python manage.py migrate
默认使用的是sqlite数据库,需安装驱动
创建后台管理员
python manage.py createsuperuser --email admin@example.com --username admin
创建用户名为admin,密码为password123,后面将会使用示例中用该身份进行验证。
通过以上步骤已完成项目和应用程序的创建,同步了数据库以及创建初始用户。
序列化
自定义序列化器,创建一个模块tutorial/quickstart/serializers.py,也可以在应用程序目录下新建存放序列化器的文件
from django.contrib.auth.models import User, Group #导入model中的数据库模块 from rest_framework import serializers #导入序列化器 class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ['url', 'username', 'email', 'groups'] class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ['url', 'name']
请注意,在本例中我们使用的是超链接关系HyperlinkedModelSerializer。您还可以使用主键和各种其他关系,但超链接是很好的 RESTful 设计。
Views
打开tutorial/quickstart/views.py添加视图信息
from django.contrib.auth.models import User, Group from rest_framework import viewsets from rest_framework import permissions from quickstart.serializers import UserSerializer,GroupSerializer class UserViewSet(viewsets.ModelViewSet): """ 允许查看或编辑用户的API. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer permission_classes = [permissions.IsAuthenticated] #设置权限,只有登录成功的用户可以访问接口API class GroupViewSet(viewsets.ModelViewSet): """ 允许查看或编辑组的API. """ queryset = Group.objects.all() serializer_class = GroupSerializer permission_classes = [permissions.IsAuthenticated]
URLS
编辑tutorial/urls.py
from django.urls import include, path from rest_framework import routers from tutorial.quickstart import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'groups', views.GroupViewSet) urlpatterns = [ path('', include(router.urls)), path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
分页
分页允许您控制每页返回的对象数量。要启用它,请将以下行添加到tutorial/settings.py
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 }
设置
添加。'rest_framework'_ INSTALLED_APPS设置模块将位于tutorial/settings.py
INSTALLED_APPS = [ ... 'rest_framework', ]
测试URL
访问测试URL http://127.0.0.1:8000/users/
先点击右上角LOGIN IN 登录