如何使用 Django 编写 Python Web API

Django 是最流行的 Python API 开发框架之一。在本快速教程中学习如何使用它。
145 位读者喜欢这篇文章。
Hands on a keyboard with a Python book

WOCinTech Chat。由 Opensource.com 修改。CC BY-SA 4.0

Django 是一个综合性的 Web 框架,所有其他框架都以此为衡量标准。作为 Python API 开发中最受欢迎的框架之一,Django 自 2005 年问世以来,受欢迎程度迅速飙升。

Django 由 Django 软件基金会维护,并获得了强大的社区支持,全球拥有超过 11,600 名成员。 在 Stack Overflow 上,Django 拥有约 191,000 个标记问题。Spotify、YouTube 和 Instagram 等网站都依赖 Django 进行应用程序和数据管理。

本文演示了一个简单的 API,用于使用 HTTP 协议的 GET 方法从服务器获取数据。

设置项目

首先,为你的 Django 应用程序创建一个结构;你可以在系统上的任何位置执行此操作

$ mkdir myproject
$ cd myproject

然后,创建一个虚拟环境,以在项目目录本地隔离包依赖项

$ python3 -m venv env
$ source env/bin/activate

在 Windows 上,使用命令 env\Scripts\activate 激活你的 Python 虚拟环境。

安装 Django 和 Django REST framework

接下来,安装 Django 和 Django REST 的 Python 模块

$ pip3 install django
$ pip3 install djangorestframework

实例化一个新的 Django 项目

现在你已经为你的应用程序准备好了工作环境,你必须实例化一个新的 Django 项目。与 Flask 这样的极简框架不同,Django 包含用于此过程的专用命令(请注意第一个命令中结尾的 . 字符)

$ django-admin startproject tutorial .
$ cd tutorial
$ django-admin startapp quickstart

Django 使用数据库作为其后端,因此你应该在开始开发之前同步你的数据库。数据库可以使用在运行 django-admin 命令时创建的 manage.py 脚本进行管理。因为你当前位于 tutorial 目录中,所以使用 ../ 表示法来运行该脚本,它位于上一级目录中

$ python3 ../manage.py makemigrations
No changes detected
$ python4 ../manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

在 Django 中创建用户

创建一个名为 admin 的初始用户,示例密码为 password123

$ python3 ../manage.py createsuperuser \
  --email admin@example.com \
  --username admin

当提示时,创建密码。

在 Django 中实现序列化器和视图

为了使 Django 能够将信息传递到 HTTP GET 请求,信息对象必须转换为有效的响应数据。Django 为此实现了 serializers

在你的项目中,通过创建一个名为 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']

view Django 中的视图是一个函数,它接受 Web 请求并返回 Web 响应。响应可以是 HTML、HTTP 重定向、HTTP 错误、JSON 或 XML 文档、图像或 TAR 文件,或者你可以通过互联网获得的任何其他内容。要创建一个视图,请打开 quickstart/views.py 并输入以下代码。此文件已存在并且其中包含一些样板文本,因此请保留该文本并将此文本附加到文件中

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint  allows users to be viewed or edited.
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer

class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint  allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

使用 Django 生成 URL

现在你可以生成 URL,以便人们可以访问你刚起步的 API。在文本编辑器中打开 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)

# Use automatic URL routing
# Can also include login URLs for the browsable API
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

调整你的 Django 项目设置

此示例项目的设置模块存储在 tutorial/settings.py 中,因此在文本编辑器中打开它并将 rest_framework 添加到 INSTALLED_APPS 列表的末尾

INSTALLED_APPS = [
    ...
    'rest_framework',
]

测试你的 Django API

现在你已准备好测试你构建的 API。首先,从命令行启动内置服务器

$ python3 manage.py runserver

你可以使用 curl 访问你的 API,方法是导航到 URL https://#:8000/users

$ curl --get https://#:8000/users/?format=json
[{"url":"https://#:8000/users/1/?format=json","username":"admin","email":"admin@example.com","groups":[]}]

或者使用 Firefox 或你选择的 开源 Web 浏览器

A simple Django API

有关使用 Django 和 Python 的 RESTful API 的更深入知识,请参阅优秀的 Django 文档

我为什么要使用 Django?

Django 的主要优势

  1. Django 社区的规模不断扩大,因此即使是复杂的项目,你也有大量的资源可以获得指导。
  2. 默认情况下包含模板、路由、表单、身份验证和管理工具等功能。你不必寻找外部工具或担心第三方工具引入兼容性问题。
  3. 用户、循环和条件的简单结构使你可以专注于编写代码。
  4. 这是一个成熟且优化的框架,非常快速且可靠。

Django 的主要缺点是

  1. Django 很复杂!从开发人员的角度来看,Django 可能比更简单的框架更难学习。
  2. Django 周围有一个庞大的生态系统。一旦你熟悉了 Django,这很棒,但当你还在学习时,它可能会让人感到不知所措。

Django 是你的应用程序或 API 的绝佳选择。下载它,熟悉它,然后开始开发一个令人惊叹的项目!

接下来阅读
标签
User profile image.
一位充满热情的科技博主,在软件开发行业拥有超过 15 年的技术专长。我是一位技术爱好者,热衷于撰写关于最新编程技术(如 Python、DevOps 等)的文章。

1 条评论

最佳技术爱好者分享。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.