千家信息网

用Django REST framework写API的示例分析

发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,本篇文章给大家分享的是有关用Django REST framework写API的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。D
千家信息网最后更新 2025年01月30日用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安全错误 数据库的锁怎样保障安全 ktv收银服务器插u盘有用吗 蓝启网络技术有限公司 计算机三级网络技术第四题 服务器返回状态500什么意思 小白续航最新数据库 小度你的服务器 小学网络安全教育测试题 5g网络安全面临的机遇 dz论坛数据数据库文件 管理员查询数据库账号密码 安徽通用软件开发市场报价 国家网络安全宣传周交接旗帜 为什么有人喜欢计算机网络技术 数据库有几类 青海银行网络安全项目 数据库技术演示 网络安全部滴滴出行 腾讯云服务器2核能绑定几个IP 行网络安全法的第一条 河南智云医软件开发有限公司 广州军区网络安全王武军 软件开发外包主要是我那些 世界上影响最大的两大引文数据库 江西三套家庭教育网络安全 服务器是由什么组成的 如何一次性百度出所有数据库 长期网络安全保护义务 计算机专业网络安全维护 hp服务器1785报错 软件开发 主管
0