千家信息网

用Django REST framework写API的示例分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章给大家分享的是有关用Django REST framework写API的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。D
千家信息网最后更新 2026年10月31日用Django REST framework写API的示例分析

本篇文章给大家分享的是有关用Django REST framework写API的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Django默认是前后端绑定的,提供了Template和Form,现在流行前后端分离项目,Python大佬坐不住了,于是便有了Django REST framework:https://github.com/tomchristie

官网:https://www.django-rest-framework.org/

Django REST framework(简称DRF)是个Python技术栈的后端框架,用来构建RESTful API。

RESTful API

REST,是指REpresentational State Transfer,有个精辟的解释什么是RESTful:

  • 看URL就知道要什么

  • 看Method就知道干什么

  • 看Status Code就知道结果如何

良好的RESTful API设计的基本原则是:

  • 返回JSON

  • 严禁乱用状态码

  • 处理好分页

  • 返回具体的实体数据而不是返回通用的JSON数据

  • 请求对象有默认值

创建项目

接下来我们使用DRF创建一个简单的API,允许管理员查看和编辑用户和组。

先创建名为tutorial的project和名为quickstart的app:

# 创建项目目录mkdir tutorialcd tutorial# 创建Python虚拟环境python -m venv env# 激活虚拟环境env\Scripts\activate.bat  # Mac中使用`source env/bin/activate`# 在虚拟环境中安装Django和Django REST frameworkpip install djangopip install djangorestframework# 创建project,注意最后有个".",表示在当前目录创建django-admin startproject tutorial .cd tutorial# 创建appdjango-admin startapp quickstartcd ..

创建好的目录结构如下:

$ pwd/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/settings.py./tutorial/urls.py./tutorial/wsgi.py

一般不会把app放到project里面,这里是为了避免命名冲突。

接着同步数据库:

python manage.py migrate

然后创建一个超级管理员,密码password123:

python manage.py createsuperuser --email admin@example.com --username admin

Serializers

序列化是指把数据库模型转换为JSON。新建模块tutorial/quickstart/serializers.py:

from django.contrib.auth.models import User, Groupfrom rest_framework import serializersclass UserSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = User        fields = ['url', 'username', 'email', 'groups']class GroupSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = Group        fields = ['url', 'name']

Views

视图用来接受Web请求并且返回Web响应。打开tutorial/quickstart/views.py,添加代码:

from django.contrib.auth.models import User, Groupfrom rest_framework import viewsetsfrom rest_framework import permissionsfrom tutorial.quickstart.serializers import UserSerializer, GroupSerializerclass UserViewSet(viewsets.ModelViewSet):    """    API endpoint that allows users to be viewed or edited.    """    queryset = User.objects.all().order_by('-date_joined')    serializer_class = UserSerializer    permission_classes = [permissions.IsAuthenticated]class GroupViewSet(viewsets.ModelViewSet):    """    API endpoint that allows groups to be viewed or edited.    """    queryset = Group.objects.all()    serializer_class = GroupSerializer    permission_classes = [permissions.IsAuthenticated]

URLs

配置路由,打开tutorial/urls.py,添加代码:

from django.urls import include, pathfrom rest_framework import routersfrom tutorial.quickstart import viewsrouter = routers.DefaultRouter()router.register(r'users', views.UserViewSet)router.register(r'groups', views.GroupViewSet)# Wire up our API using automatic URL routing.# Additionally, we include login URLs for the browsable API.urlpatterns = [    path('', include(router.urls)),    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))]

因为这里用的不是view而是viewsets,所以可以自动生成API的URLconf,只需要注册class即可。

也可以不用viewsets,用view,再自定义API URL。

Pagination

分页用来控制每页返回多少数据,在tutorial/settings.py中添加:

REST_FRAMEWORK = {    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',    'PAGE_SIZE': 10}

Settings

在tutorial/settings.py中,把'rest_framework'添加到

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

测试API

启动项目:

python manage.py runserver

访问http://127.0.0.1:8000/users/,点击右上角用超管登录,即可看到:

终于修复了从博客园复制粘贴到公众号代码块自动换行没有滚动条的问题,F12看了才知道有个样式被覆盖了,加上这句就搞定了:

#topics .postBody pre {    white-space: pre !important;}

以上就是用Django REST framework写API的示例分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

数据 项目 代码 环境 目录 示例 分析 数据库 更多 知识 管理员 篇文章 管理 精辟 良好 接下来 不用 公众 原则 基本原则 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 新华互联网科技 A股互联网金融科技公司 互联网科技资迅 互联网科技小贷 互联网科技logo 联恩商钥互联网科技有限公司 四个字互联网科技公司取名 浙江互联网科技研学营 移动互联网科技公司 互联网科技公司有风险吗 玉溪新华互联网科技好不好 互联网科技公司营业执照怎么办理 产业互联网科技服务公司 互联网科技资金流入 江苏互联网智能科技软件 互联网相关科技技术 半导体行业属于互联网高科技类吗 如何强化互联网金融科技 小牛互联网科技有限公司地址 美国互联网科技巨头监管 互联网 科技创新 智网互联网科技 人人互联网科技是培训 江苏南京365互联网科技 青岛中康互联网医疗科技有限公司 互联网系的金融科技公司 互联网公司黑科技创始人 中国互联网公司排名锤子科技 上海旺乐尼互联网科技有限公司
0