Django REST Framework 与 Django Web 框架协同工作以创建 Web API。 我们不能仅使用 Django Rest Framework 来构建 Web API 。 在安装和配置 Django 本身之后,必须始终将其添加到项目中。
在本章中,我们将回顾传统 Django 和 Django REST Framework 之间的异同。 最重要的一点是,Django 创建的网站包含网页,而 Django REST Framework 创建的 Web API 是 URL 端点的集合,这些 URL 端点包含返回 JSON 的可用 HTTP 动词。
为了说明这些概念,我们将使用传统的 Django 建立一个基本的 Library 网站,然后使用 Django REST Framework 将其扩展为 Web API 。
Django 快速开发
首先,我们需要在计算机上有一个专用目录来存储代码。 它可以放置在任何地方,但为了方便起见,如果您使用的是 Mac,我们可以将其放在“桌面”文件夹中。
$ cd ~/Desktop $ mkdir code && cd code
该代码文件夹将成为本书所有代码的位置。 下一步是为我们的库站点创建一个专用目录,通过 Pipenv 安装 Django ,然后使用 shell 命令进入虚拟环境。 您应该始终为每个新的 Python 项目使用专用的虚拟环境。
$ mkdir library && cd library $ pipenv install django==2.2.6 $ pipenv shell (library) $
Pipenv 在当前目录中创建一个 Pipfile
和一个 Pipfile.lock
。 命令行前括号中的(library
)表明我们的虚拟环境处于活动状态。
传统的 Django 网站由一个项目 project 和一个(或多个)代表不同功能的应用 apps 组成。 让我们使用 startproject 命令创建一个新项目。 别忘了加上句号。 最后将代码安装在当前目录中。 如果不包括句点,则 Django 默认会创建一个附加目录。
(library)$ django-admin startproject library_project .
Django 会自动为我们生成一个新项目,我们可以使用 tree
命令看到它。 (注意:如果在 Mac 上无法使用 tree ,请使用 Homebrew :brew install tree
安装。)
(library) $ tree . ├── Pipfile ├── Pipfile.lock ├── library_project │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py
这些文件具有以下定义:
__init__.py
是将目录视为软件包的 Python 方法; 它是空的settings.py
包含我们项目的所有配置urls.py
控制顶级 URL 路由wsgi.py
代表 Web 服务器网关界面,可帮助 Django 服务于最终网页manage.py
执行各种 Django 命令,例如运行本地 Web 服务器或创建新应用。
运行 migrate
将数据库与 Django 的默认设置同步,然后启动本地 Django Web 服务器。
(library) $ python manage.py migrate (library) $ python manage.py runserver
打开 Web 浏览器,访问 http://127.0.0.1:8000/
以确认我们的项目已成功安装。
第一个 app
典型的下一步是开始添加代表功能不同区域的应用程序。 一个 Django 项目可以支持多个应用程序。
通过键入 Control + c
停止本地服务器,然后创建一个 books 应用程序。
(library) $ python manage.py startapp books
现在再查看一下 Django 生成了什么文件。
. ├── Pipfile ├── Pipfile.lock ├── books │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── db.sqlite3 ├── library_project │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py
每个应用程序都有一个 __init__.py
文件,将其标识为 Python 软件包。 创建了 6 个新文件:
admin.py
是内置 Django Admin 应用程序的配置文件apps.py
是应用程序本身的配置文件migrations/
目录存储用于数据库更改的迁移文件models.py
是我们定义数据库模型的地方tests.py
用于我们的应用程序特定测试views.py
是我们处理 Web 应用程序的请求/响应逻辑的地方
通常,开发人员还会在每个应用程序内创建一个 urls.py 文件进行路由。
让我们构建文件,以便我们的图书馆项目列出首页上的所有书籍。 将您选择的文本编辑器打开到 settings.py 文件。 第一步是将新应用添加到我们的 INSTALLED_APPS 配置中。 我们总是在底部添加新应用,因为 Django 会按顺序读取它们,并且我们希望内置的核心 Django 应用(例如 admin 和 auth )在加载我们的应用之前已经被加载。
# library_project/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Local 'books.apps.BooksConfig', # new ]
然后运行迁移以使我们的数据库与更改同步。
(library) $ python manage.py migrate
传统 Django 中的每个网页都需要多个文件:视图,URL 和模板。 但是首先我们需要一个数据库模型,所以让我们从这里开始。
Models
在您的文本编辑器中,打开文件 book/models.py
并进行如下更新:
# books/models.py from django.db import models class Book(models.Model): title = models.CharField(max_length=250) subtitle = models.CharField(max_length=250) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13) def __str__(self): return self.title
这是一个基本的 Django 模型,我们在最上面一行从 Django 导入模型,然后创建一个扩展它的 Book 类。 有四个字段:标题,副标题,作者和 isbn 。 我们还包括 __str__
方法,以便稍后在管理员中显示书名。
请注意,ISBN 是分配给每本出版书籍的唯一的 13 个字符的标识符。
由于我们创建了一个新的数据库模型,因此我们需要创建一个迁移文件来进行处理。 指定应用名称是可选的,但建议在此处使用。 我们可以只键入 python manage.py makemigrations
,但是如果有多个应用程序进行了数据库更改,那么这两个应用程序都将被添加到迁移文件中,这使得将来的调试更加困难。 保持您的迁移文件尽可能具体。
然后运行迁移以更新我们的数据库。
(library) $ python manage.py makemigrations books (library) $ python manage.py migrate
到目前为止,一切都很好。