Django Rest 框架与 PostgreSQL:CRUD 教程
更改用户 myuser CREATEDB;
对于大多数 Web 开发者来说,使用 API 至关重要。从为应用扩展其他服务,到为其他应用和服务提供资源,API 对于现代 Web 系统的应用间通信至关重要。
API 是应用程序编程接口 (Application Programming Interface)的缩写,是客户端与服务器端交互以响应用户请求的一种方式。它是一种建立软件组件之间如何通信的协议。
在本教程中,我们将介绍如何使用 Django 和 PostgreSQL 数据库为客户管理应用创建 REST API。我们将使用 Django Rest 框架搭建一个 Django 应用。此外,我们还将安装 PostgreSQL 并将其连接到我们的 API。此外,我们还将对 API执行 CRUD操作( GET
、POST
和)。PUT
DELETE
本教程的目标是创建一个具有数据库 CRUD 功能的 RESTful API。我们将设置 Django REST 框架,创建 API 的视图和相应的 URL 模式,以及
具体来说,我们将讨论以下内容:
- Django 是什么
- 什么是 RESTful API
- 什么是 Django Rest Framework
- 什么是 CRUD 操作
-
什么是 PostgreSQL
-
设置Django Rest框架
-
设置 PostgreSQL
-
创建 Postgres 数据库
-
使用 API 连接 Postgres 数据库
-
为 CRUD 操作创建视图
-
为视图创建相应的 URL 模式
先决条件
- 已安装包管理
Python
器pip
- 有创建 Django 应用程序的经验
- 具有 Python 编程基础知识
- 具有使用命令行的基本经验
什么是 Django?
Django 是一个用于构建高性能 Web 应用程序的开源 Python 框架。它采用模型-视图-控制器 (MVC)设计。该框架的一个显著优势是,它使您能够快速构建网站,而无需重复造轮子。
什么是 REST API?
RESTful API 是一种使用 HTTP 请求数据的 API 架构标准。这些数据可用于创建、更新、读取和删除资源。REST 是表述性状态转移 (Representational State Transfer) 的缩写,它使用 HTTP 从特定 URL 请求数据,并以 JSON、HTML 等不同格式返回数据。
什么是 Django Rest Framework
Django REST 框架 (DRF) 是一个功能丰富、用于构建 Web API 的工具包。它不仅应用广泛,而且高度可定制。
什么是 CRUD 操作?
CRUD 是指关系数据库系统中使用的四种基本操作 - 创建、读取、更新和删除。
CRUD 实现了在 REST 环境中创建、读取、更新和删除资源的基本功能。CRUD 操作通常映射到标准 HTTP 方法 - POST 用于创建,GET 用于读取,PUT 用于更新,DELETE 用于删除。
从数据库管理的角度,下面解释 CRUD 操作如何工作。
- CREATE:INSERT 创建新的数据库记录
- 读取:SELECT 从数据库表中检索数据
- UPDATE:根据指定的主键更新记录
- 删除:删除数据库表中的一行
什么是 PostgreSQL?
PostgreSQL 是一个免费的开源关系数据库系统。它为开发人员提供了可扩展性和可伸缩性。它兼容多种编程语言,并支持所有主流操作系统,例如 Windows、macOS 和 Linux。我们将使用 PostgreSQL 作为我们构建的 CRUD 应用程序的数据库。
安装 PostgreSQL
您可以在终端中使用以下命令安装 PostgreSQL。
sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib
在 macOS 上,您可以posgresql
使用terminal
以下命令安装brew
:
brew install postgresql
postresql
现在,您可以在安装后使用以下命令启动。
brew services start postgresql
如果您使用 Windows 机器,您可以从 PostgreSQL 官方网站下载兼容的PostgreSQL 安装程序。
创建数据库
作为安装的一部分,PostgreSQL 默认创建了一个用户,postgres
用于执行管理职责。我们将切换到该用户来创建数据库和新用户。
sudo su - postgres
psql
让我们访问 Postgres 交互式终端,在那里我们可以使用 PostgreSQL 查询。
psql
现在,我们将为该项目创建一个数据库。请务必为每个项目创建一个单独的数据库。
CREATE DATABASE mydb;
在上面的命令中,我们使用了CREATE
SQL 中的命令创建了名为 的数据库mydb
。我们还用 SQL 中每个命令后面的分号结束了该行。
创建数据库用户
现在,我们将为数据库创建一个数据库用户。我们将该用户命名为myuser
。请password
在下方替换为一个强密码。
CREATE USER myuser WITH PASSWORD 'password';
现在让我们授予新用户访问权限,以使其能够在数据库上工作。
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
然后我们可以退出当前用户的 shell 会话并返回到postgres
用户的会话
\q
现在,让我们离开 PostgreSQL 交互式终端回到终端。
exit
安装 Django 并设置 Django 项目
使用 Django 应用时,务必使用虚拟环境包(例如)在隔离环境中创建新的 Django 项目virtualenv
。虚拟环境可以帮助我们使用不同版本的 Python 以及其他包,以及我们机器上不同的项目。让我们获取virtualenv
用于创建虚拟环境的包。
sudo pip install virtualenv
然后,让我们创建一个文件夹来存放我们的项目,并将目录更改为新文件夹。
mkdir myproject && cd myproject
在新文件夹中,我们将为我们的项目创建虚拟环境。
virtualenv env
上述命令为我们提供了隔离环境中的 Python 和一些其他库的副本。
我们将激活虚拟环境,以便在我们的项目中使用它。
source env/bin/activate
终端应该如下所示。虚拟环境的名称将出现在该行前面的括号中,以表明虚拟环境已激活。
(env) user@host:_
接下来,我们将安装 Django 并在虚拟环境中设置我们的 Django 应用程序。
pip install django djangorestframework psycopg2
我们安装了以下软件包:
Django
:Django 包,允许我们使用 Django 框架并创建 Django 应用程序- Django Rest Framework:该工具包为我们提供了使用 Django 创建和使用 RESTful API 的功能
psycopg2
:将我们的应用程序连接到 PostgreSQL 的 PostgreSQL 包
现在,我们将使用命令创建一个 Django 项目django-admin
。
django-admin startproject crm_project
cd
进入crm-project
目录和cd
子目录crm-project
。我们需要将添加rest_framework
到文件中settings.py
,以便它在我们的项目中处于活动状态。让我们将其添加到INSTALLED_APPS
列表中:
INSTALLED_APPS = [
...
'rest_framework', #new
]
设置Django数据库配置
我们已经创建了一个PostgreSQL
数据库和一个 Django 项目。现在,我们将配置我们的 Django 项目以使用 PostgreSQL 数据库。
settings.py
在项目文件中,您将看到该DATABASES
部分。它如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
我们需要将 SQLite 数据库配置更改为PostgreSQL
我们创建的数据库。因此,将DATABASES
代码替换为以下内容:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
创建 Django 应用
让我们在 Django 项目中使用manage.py
项目根目录中的文件创建一个应用程序。它允许我们以各种方式使用 Django,例如创建应用程序、从模型创建数据库表、运行内置服务器等。每当您想要运行该manage.py
文件时,请确保您位于manage.py
存在的根目录中。
python manage.py startapp customer
customer
检查目录,会发现已创建一个新的子目录。让我们将新customer
应用添加到.app 文件的列表INSTALLED_APPS
中。settings.py
crm-project
INSTALLED_APPS = [
...
'rest_framework',
'customer', #new
]
如果您cd
进入客户,您会看到它有其models.py
文件views.py
。
我们将为customer
应用程序创建模型。打开应用程序models.py
文件customer
,用以下代码替换其中的内容。
from django.db import models
class Customer(models.Model):
name = models.CharField("Name", max_length=240)
email = models.EmailField()
created = models.DateField(auto_now_add=True)
def __str__(self):
return self.name
Customer
上述代码中的类扩展自 Django 的 Model 类。、CharField
和EmailField
是DateField
适合各个字段的数据类型。
此时,我们将通过迁移过程创建包含模型字段的数据库列。我们将使用该manage.py
文件来应用迁移。
python manage.py makemigrations
然后,
python manage.py migrate
使用 Django Rest Framework 创建 REST API
我们将在 Django Rest Framework 上构建 API。我们将处理视图、序列化器和 URL 端点。这些端点附加到用于获取 Web 请求响应的视图上。
序列化器有助于在 JSON、XML 和原生 Python 对象之间进行转换。在customer
目录中创建一个新文件并将其命名为serializers.py
。在其中输入以下代码。
from rest_framework import serializers
from .models import Customer
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = ['pk', 'name', 'email', 'created']
上面的代码ModelSerializer
有助于序列化Customer
对象的数据。
现在,我们将扩展GenericAPIViews
Django Rest Framework 自带的 来创建我们的视图。在应用程序views.py
的中添加以下代码customer
。
...
from django.shortcuts import render
from .models import Customer
from rest_framework import generics
from .serializers import CustomerSerializer
class CustomerCreate(generics.CreateAPIView):
# API endpoint that allows creation of a new customer
queryset = Customer.objects.all(),
serializer_class = CustomerSerializer
class CustomerList(generics.ListAPIView):
# API endpoint that allows customer to be viewed.
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
上面的代码使我们能够使用CustomerCreate
视图创建一个新的客户对象,并且该CustomerList
视图将用于列出数据库中的所有客户。
如果我们想检查单个客户,我们可以添加CustomerDetail
如下视图:
...
class CustomerDetail(generics.RetrieveAPIView):
# API endpoint that returns a single customer by pk.
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
我们将为该Update
行动提供一个观点,
...
class CustomerUpdate(generics.RetrieveUpdateAPIView):
# API endpoint that allows a customer record to be updated.
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
让我们为 DELETE 操作添加一个视图,
...
class CustomerDelete(generics.RetrieveDestroyAPIView):
# API endpoint that allows a customer record to be deleted.
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
现在,在目录中创建一个新urls.py
文件customer
并向其中添加以下代码。
from django.urls import include, path
from .views import CustomerCreate, CustomerList, CustomerDetail, CustomerUpdate, CustomerDelete
urlpatterns = [
path('create/', CustomerCreate.as_view(), name='create-customer'),
path('', CustomerList.as_view()),
path('<int:pk>/', CustomerDetail.as_view(), name='retrieve-customer'),
path('update/<int:pk>/', CustomerUpdate.as_view(), name='update-customer'),
# path('delete/<int:pk>/', CustomerDelete.as_view(), name='delete-customer')
]
每个端点处理一个特定的 HTTP 方法。第一个端点处理POST
CREATE 操作的方法。第二个和第三个端点处理GET
READ 操作的方法。第四个端点处理PUT
UPDATE 操作的方法,最后一个端点处理 UPDATEDELETE
操作的方法。
尽管如此,我们仍然需要将根urls.py
文件指向应用程序urls.py
的文件customer
。让我们回到crm_project
子目录并urls.py
在那里打开文件。然后我们将包含customer
应用程序端点。
from django.contrib import admin
from django.urls import path, include #new
urlpatterns = [
path('admin/', admin.site.urls),
path('customer/', include('customer.urls')), #new
]
该文件已经包含了urlpattern
Django-admin 应用程序,它为我们提供了管理员功能。
Django 自带一个服务器,可以用来测试。现在我们将使用以下命令通过该服务器运行我们的应用程序:
python manage.py runserver
在浏览器中访问 URL http://127.0.0.1:8000/customer,我们将看到 Browsable API 的接口。Browsable API 是 REST 框架的一部分,允许我们在没有客户端应用的情况下与 API 进行交互。我们可以访问应用程序中先前定义的每个路由urlpatterns
,customer
并执行 CRUD 操作。
对于位于http://127.0.0.1:8000/customer/create的客户创建端点,可浏览 API 如下所示
结论
干得好!我们学习了如何使用 Django 设置 Rest API 并连接到 PostgreSQL 数据库。您可以在这里获取本教程项目的完整代码。
本教程帮助我们使用 Django REST 框架构建 RESTful API。我们还学习了如何为 Django 项目设置 PostgreSQL。我们使用命令行创建了 PostgreSQL 数据库和用户。我们将 PostgreSQL 数据库连接到一个基本的 Django 客户管理应用程序,并为 API 添加了 CRUD 功能。
凭借所学知识,我们应该能够在 Web 项目中创建 API。我们还能学习更多关于 API 开发的知识。感谢您抽出时间。欢迎提出问题,分享您的想法和建议。
鏂囩珷鏉ユ簮锛�https://dev.to/entuziaz/django-rest-framework-with-postgresql-a-crud-tutorial-1l34