Django Rest Framework 与 PostgreSQL:CRUD 教程 ALTER USER myuser CREATEDB;

2025-06-08

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操作( GETPOST和)。PUTDELETE

本教程的目标是创建一个具有数据库 CRUD 功能的 RESTful API。我们将设置 Django REST 框架,创建 API 的视图和相应的 URL 模式,以及

具体来说,我们将讨论以下内容:

  • Django 是什么
  • 什么是 RESTful API
  • 什么是 Django Rest Framework
  • 什么是 CRUD 操作
  • 什么是 PostgreSQL

  • 设置Django Rest框架

  • 设置 PostgreSQL

  • 创建 Postgres 数据库

  • 使用 API 连接 Postgres 数据库

  • 为 CRUD 操作创建视图

  • 为视图创建相应的 URL 模式

先决条件

  • 安装包管理Pythonpip
  • 有创建 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
Enter fullscreen mode Exit fullscreen mode

在 macOS 上,您可以posgresql使用terminal以下命令安装brew

brew install postgresql
Enter fullscreen mode Exit fullscreen mode

postresql现在,您可以在安装后使用以下命令启动。

brew services start postgresql
Enter fullscreen mode Exit fullscreen mode

如果您使用 Windows 机器,您可以从 PostgreSQL 官方网站下载兼容的PostgreSQL 安装程序。

创建数据库

作为安装的一部分,PostgreSQL 默认创建了一个用户,postgres用于执行管理职责。我们将切换到该用户来创建数据库和新用户。

sudo su - postgres
Enter fullscreen mode Exit fullscreen mode

psql让我们访问 Postgres 交互式终端,在那里我们可以使用 PostgreSQL 查询。

psql
Enter fullscreen mode Exit fullscreen mode

现在,我们将为该项目创建一个数据库。请务必为每个项目创建一个单独的数据库。

CREATE DATABASE mydb;
Enter fullscreen mode Exit fullscreen mode

在上面的命令中,我们使用了CREATESQL 中的命令创建了名为 的数据库mydb。我们还用 SQL 中每个命令后面的分号结束了该行。

创建数据库用户

现在,我们将为数据库创建一个数据库用户。我们将该用户命名为myuser。请password在下方替换为一个强密码。

CREATE USER myuser WITH PASSWORD 'password';
Enter fullscreen mode Exit fullscreen mode

现在让我们授予新用户访问权限,以使其能够在数据库上工作。

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
Enter fullscreen mode Exit fullscreen mode

然后我们可以退出当前用户的 shell 会话并返回到postgres用户的会话

\q
Enter fullscreen mode Exit fullscreen mode

现在,让我们离开 PostgreSQL 交互式终端回到终端。

exit
Enter fullscreen mode Exit fullscreen mode

安装 Django 并设置 Django 项目

使用 Django 应用时,务必使用虚拟环境包(例如)在隔离环境中创建新的 Django 项目virtualenv。虚拟环境可以帮助我们使用不同版本的 Python 以及其他包,以及我们机器上不同的项目。让我们获取virtualenv用于创建虚拟环境的包。

sudo pip install virtualenv
Enter fullscreen mode Exit fullscreen mode

然后,让我们创建一个文件夹来存放我们的项目,并将目录更改为新文件夹。

mkdir myproject && cd myproject
Enter fullscreen mode Exit fullscreen mode

在新文件夹中,我们将为我们的项目创建虚拟环境。

virtualenv env
Enter fullscreen mode Exit fullscreen mode

上述命令为我们提供了隔离环境中的 Python 和一些其他库的副本。

我们将激活虚拟环境,以便在我们的项目中使用它。

source env/bin/activate
Enter fullscreen mode Exit fullscreen mode

终端应该如下所示。虚拟环境的名称将出现在该行前面的括号中,以表明虚拟环境已激活。

(env) user@host:_
Enter fullscreen mode Exit fullscreen mode

接下来,我们将安装 Django 并在虚拟环境中设置我们的 Django 应用程序。

pip install django djangorestframework psycopg2
Enter fullscreen mode Exit fullscreen mode

我们安装了以下软件包:

  • Django:Django 包,允许我们使用 Django 框架并创建 Django 应用程序
  • Django Rest Framework:该工具包为我们提供了使用 Django 创建和使用 RESTful API 的功能
  • psycopg2:将我们的应用程序连接到 PostgreSQL 的 PostgreSQL 包

现在,我们将使用命令创建一个 Django 项目django-admin

django-admin startproject crm_project
Enter fullscreen mode Exit fullscreen mode

cd进入crm-project目录和cd子目录crm-project。我们需要将添加rest_framework到文件中settings.py,以便它在我们的项目中处于活动状态。让我们将其添加到INSTALLED_APPS列表中:

INSTALLED_APPS = [
   ...
    'rest_framework', #new
]
Enter fullscreen mode Exit fullscreen mode

设置Django数据库配置

我们已经创建了一个PostgreSQL数据库和一个 Django 项目。现在,我们将配置我们的 Django 项目以使用 PostgreSQL 数据库。

settings.py在项目文件中,您将看到该DATABASES部分。它如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
Enter fullscreen mode Exit fullscreen mode

我们需要将 SQLite 数据库配置更改为PostgreSQL我们创建的数据库。因此,将DATABASES代码替换为以下内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}
Enter fullscreen mode Exit fullscreen mode

创建 Django 应用

让我们在 Django 项目中使用manage.py项目根目录中的文件创建一个应用程序。它允许我们以各种方式使用 Django,例如创建应用程序、从模型创建数据库表、运行内置服务器等。每当您想要运行该manage.py文件时,请确保您位于manage.py存在的根目录中。

python manage.py startapp customer
Enter fullscreen mode Exit fullscreen mode

customer检查目录,会发现已创建一个新的子目录。让我们将新customer应用添加到.app 文件的列表INSTALLED_APPSsettings.pycrm-project

INSTALLED_APPS = [
   ...
    'rest_framework',
    'customer', #new
]
Enter fullscreen mode Exit fullscreen mode

如果您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
Enter fullscreen mode Exit fullscreen mode

Customer上述代码中的类扩展自 Django 的 Model 类。CharFieldEmailFieldDateField适合各个字段的数据类型。

此时,我们将通过迁移过程创建包含模型字段的数据库列。我们将使用该manage.py文件来应用迁移。

python manage.py makemigrations
Enter fullscreen mode Exit fullscreen mode

然后,

python manage.py migrate
Enter fullscreen mode Exit fullscreen mode

使用 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']

Enter fullscreen mode Exit fullscreen mode

上面的代码ModelSerializer有助于序列化Customer对象的数据。

现在,我们将扩展GenericAPIViewsDjango 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

Enter fullscreen mode Exit fullscreen mode

上面的代码使我们能够使用CustomerCreate视图创建一个新的客户对象,并且该CustomerList视图将用于列出数据库中的所有客户。

如果我们想检查单个客户,我们可以添加CustomerDetail如下视图:

...
class CustomerDetail(generics.RetrieveAPIView):
    # API endpoint that returns a single customer by pk.
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer

Enter fullscreen mode Exit fullscreen mode

我们将为该Update行动提供一个观点,

...
class CustomerUpdate(generics.RetrieveUpdateAPIView):
    # API endpoint that allows a customer record to be updated.
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer
Enter fullscreen mode Exit fullscreen mode

让我们为 DELETE 操作添加一个视图,

...
class CustomerDelete(generics.RetrieveDestroyAPIView):
    # API endpoint that allows a customer record to be deleted.
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer
Enter fullscreen mode Exit fullscreen mode

现在,在目录中创建一个新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')
]
Enter fullscreen mode Exit fullscreen mode

每个端点处理一个特定的 HTTP 方法。第一个端点处理POSTCREATE 操作的方法。第二个和第三个端点处理GETREAD 操作的方法。第四个端点处理PUTUPDATE 操作的方法,最后一个端点处理 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
]
Enter fullscreen mode Exit fullscreen mode

该文件已经包含了urlpatternDjango-admin 应用程序,它为我们提供了管理员功能。

Django 自带一个服务器,可以用来测试。现在我们将使用以下命令通过该服务器运行我们的应用程序:

python manage.py runserver
Enter fullscreen mode Exit fullscreen mode

在浏览器中访问 URL http://127.0.0.1:8000/customer,我们将看到 Browsable API 的接口。Browsable API 是 REST 框架的一部分,允许我们在没有客户端应用的情况下与 API 进行交互。我们可以访问应用程序中先前定义的每个路由urlpatternscustomer并执行 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 开发的知识。感谢您抽出时间。欢迎提出问题,分享您的想法和建议。

Twitter | LinkedIn

鏂囩珷鏉ユ簮锛�https://dev.to/entuziaz/django-rest-framework-with-postgresql-a-crud-tutorial-1l34
PREV
应对申请数百份工作后被拒绝的情况
NEXT
如何不寻求帮助