文章目录
在学习Django REST Framework(DRF)之前,你必须先学会django,本文不会对django相关的内容做太多解释。
一、DRF的基本使用方法
1.1 DRF的安装
-
使用pip安装Django REST Framework:
pip install djangorestframework
DRF依赖django框架,但pip会自动帮我们安装好django。
-
使用
django-admin startproject 项目名称
创建好项目后,向settings.py文件中的INSTALLED_APPS列表中,添加'rest_framework'
:INSTALLED_APPS = [ ... 'rest_framework' ]
1.2 DRF的简单使用
1.2.1 环境搭建
- 先创建目录:
mkdir tutorial
,切换到tutorial目录:cd tutorial
。 - 创建虚拟环境:
python3 -m venv env
- 激活环境:
source env/bin/activate
(linux下),windows下:env\Scripts\activate
。 - 安装DRF:
pip install djangorestframework
。 - 在当前目录下新建项目:
django-admin startproject tutorial .
,注意末尾的.
。 - 向settings.py文件中的INSTALLED_APPS列表中,添加
'rest_framework'
。 - 新建django app:
django-admin startapp quickstart
。 - 执行数据库迁移:
python manage.py migrate
。 - 创建一个初始用户,用户名为admin或自定义:
python manage.py createsuperuser
。
1.2.2 开始使用
这里只是简单体验一下流程,注意要编写哪些东西即可,看不懂的地方不用纠结。
-
创建普通模型类
这里我们使用django自带的User和Group模型,不再自己写了。
-
创建序列化器
先创建一个新的模块tutorial/quickstart/serializers.py(名称可以自定义),在其内部定义两个序列化器:
from django.contrib.auth.models import User, Group 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']
-
编写视图
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] class GroupViewSet(viewsets.ModelViewSet): """查看和编辑用户组的API""" queryset = Group.objects.all() serializer_class = GroupSerializer permission_classes = [permissions.IsAuthenticated]
如果需要可以把上面的操作分解为多个单独的视图函数,但是使用上面这种视图集的形式,可以使代码逻辑更加清晰、简洁。
-
添加url
将视图集注册到
routers.DefaultRouter
类的实例对象中,就能自动生成API的url配置,不需要像常规视图那样,一个个单独添加到urlpatterns中。当然,如果想对API的url进行更多的控制,就可以一个个单独添加。
from django.urls import include, path from rest_framework import routers from quickstart import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'groups', views.GroupViewSet) urlpatterns = [ path('admin/', admin.site.urls), path('', include(router.urls)), # 用于登录和注销的url及视图,这是可选的 path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
-
分页(可选)
分页用来控制每页返回的对象数量,要启用分页,请将以下内容添加到项目的settings.py中:
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 }
-
设置
参考安装教程中的方法,在settings.py中的INSTALLED_APPS列表中注册
'rest_framework'
。
1.2.3 测试接口
运行django项目,打开http://127.0.0.1:8000/
,就可以看到如下页面
点击users链接或者groups链接,就可以查看和编辑用户、用户组了。
也可以使用curl或者http访问API,admin是用户名,123456是密码:
# curl命令
curl -H 'Accept: application/json; indent=4' -u admin:123456 http://127.0.0.1:8000/users/
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "admin@example.com",
"groups": [],
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin"
},
{
"email": "tom@example.com",
"groups": [],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}
# http命令
http -a admin:123456 http://127.0.0.1:8000/users/
HTTP/1.1 200 OK
...
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "admin@example.com",
"groups": [],
"url": "http://localhost:8000/users/1/",
"username": "paul"
},
{
"email": "tom@example.com",
"groups": [],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}