使用NestJS和Prisma构建REST API:身份验证
Django REST Framework,一个构建 API 的完美库!
今天我们将一起学习如何使用 Django REST Framework(简称 DRF)来构建一个 Web API。无论你是新手,还是有一定经验的开发者,掌握 DRF 都能让你高效地构建 RESTful API,提供灵活的数据访问接口。
在这篇文章中,我会带你从基础入手,一步步建立一个简单的 API 项目,并展示如何使用 DRF 提供的强大功能来处理模型、序列化、视图和路由等以及如何用python命令行格式化json文件。最重要的是,学习这些后,你可以用它们去构建属于自己的应用程序,甚至是后台服务。
一、如何使用 Django REST Framework(简称 DRF)来构建一个 Web API
1、安装 Django 和 Django REST Framework
在开始之前,我们首先要安装 Django 和 Django REST Framework,它们是我们开发 API 的基础。
首先,使用以下命令安装 Django:
pip install django
接着,安装 DRF:
pip install djangorestframework
然后,在你的 Django 项目中的 settings.py
文件里,加入 'rest_framework'
到 INSTALLED_APPS
:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 添加 DRF
]
2、创建一个简单的 API
接下来,我们将通过 DRF 创建一个简单的 API。我们从定义一个模型开始,然后通过序列化器将数据转换成 JSON 格式,最后提供接口让用户访问。
(1)定义模型
在 Django 中,模型是我们用于定义数据结构的地方。比如,我们创建一个 Book
模型,包含书籍的标题、作者和出版日期:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
def __str__(self):
return self.title
代码解析:
Book
类继承自models.Model
,它会自动创建数据库表来存储书籍数据。title
和author
使用CharField
存储文本,published_date
使用DateField
存储日期。
运行以下命令来创建数据库表:
python manage.py makemigrations
python manage.py migrate
(2)创建序列化器
序列化器(Serializer)是将数据转换为 JSON 格式的工具。DRF 提供了一个强大的 ModelSerializer
,它可以自动地将 Django 模型转为 JSON 格式。
在 serializers.py
中创建一个序列化器:
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date']
代码解析:
BookSerializer
继承自ModelSerializer
,它会根据Book
模型自动生成序列化规则。fields
用来指定我们需要序列化哪些字段。
(3)创建视图
DRF 提供了多种视图类,我们可以用它们来处理 HTTP 请求。在这里,我们将使用 ListCreateAPIView
,它支持获取所有书籍数据以及创建新书籍。
在 views.py
中,添加如下代码:
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer
class BookListCreateView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
代码解析:
BookListCreateView
继承自generics.ListCreateAPIView
,它提供了两个功能:列出所有书籍和创建新书籍。queryset
用来获取数据库中的所有书籍。serializer_class
指定我们要用来序列化数据的类。
(4)配置 URL 路由
为了让 API 能被访问,我们需要配置 URL 路由。在 urls.py
中添加以下内容:
from django.urls import path
from .views import BookListCreateView
urlpatterns = [
path('api/books/', BookListCreateView.as_view(), name='book-list-create'),
]
代码解析:
- 这行代码将
/api/books/
映射到BookListCreateView
视图。通过这个 URL,用户可以访问到所有书籍的数据,并可以通过 POST 请求添加新书籍。
(5)如何获取数据库表结构工具
获取数据库表结构工具的步骤如下:
- screw(螺丝钉):
- screw是一个简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/Oracle/PostgreSQL/TIDB/CacheDB数据库。
- 你可以通过Gitee获取screw的源代码和使用教程:screw: 简洁好用的数据库表结构文档工具。
- MySQL Workbench:
- MySQL Workbench是MySQL官方提供的图形化管理工具,可以查看和管理数据库表结构。
- 你可以从MySQL官方网站免费下载MySQL Workbench:MySQL Workbench。
- dbForge Studio for MySQL:
- dbForge Studio for MySQL是一个强大的数据库管理工具,支持MySQL数据库。
- 你可以通过ComponentSource网站购买dbForge Studio for MySQL的许可证:dbForge Studio for MySQL 价格。
- 编程语言的数据库接口:
- 许多编程语言如Python、Java、PHP等都提供了数据库接口,可以在程序中动态获取表结构信息。
- 例如,Python的
sqlite3
模块和pandas
库,Java的JDBC,PHP的PDO扩展等。。
- 数据库管理工具:
- 除了MySQL Workbench,还有其他数据库管理工具如pgAdmin(PostgreSQL)、SQL Server Management Studio (SSMS)(SQL Server)等,它们提供了图形化界面来查看和管理数据库表结构
(6)获取数据库表结构工具有哪些
获取数据库表结构工具有很多,这里列举一些常用的
- MySQL Workbench:
- MySQL官方提供的集成环境,用于数据库设计、开发和管理。
- phpMyAdmin:
- 一个基于Web的MySQL数据库管理工具,可以导出数据库结构和数据。
- Navicat:
- 一个支持多种数据库的图形化管理工具,包括MySQL、PostgreSQL、Oracle等。
- DBeaver:
- 一个开源的数据库管理工具,支持多种数据库,包括MySQL、PostgreSQL、SQLite等。
- Toad:
- 一个数据库管理工具,支持多种数据库系统,提供数据建模、代码生成等功能。
- dbForge Studio:
- 一系列数据库管理工具,支持MySQL、SQL Server、Oracle等。
3、测试 API
现在我们已经完成了 API 的基本设置。你可以通过运行开发服务器来测试 API:
python manage.py runserver
打开浏览器,访问 http://127.0.0.1:8000/api/books/
,你应该能看到一个 JSON 格式的书籍列表。如果你使用 POST
请求并传递数据,新的书籍将被创建。
小贴士:你可以使用 Postman 或 Insomnia 等工具来测试你的 API。通过这些工具,你可以方便地发送 GET、POST、PUT 和 DELETE 请求,查看 API 返回的结果。
4、添加权限控制
在实际开发中,我们通常希望对 API 进行权限控制,确保只有授权用户才能访问某些功能。DRF 提供了权限系统来简化这一过程。
例如,只有认证用户才能访问书籍数据:
from rest_framework.permissions import IsAuthenticated
class BookListCreateView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
permission_classes = [IsAuthenticated]
代码解析:
permission_classes = [IsAuthenticated]
表示只有经过认证的用户才能访问该视图。
5、处理分页
当 API 返回的数据量很大时,我们可以为它添加分页功能,这样用户就能分批获取数据,而不会一次性加载所有数据。
在 settings.py
中,配置分页参数:
REST_FRAMEWORK = {
'PAGE_SIZE': 5,
}
代码解析:
- 这将自动限制每次返回最多 5 条记录。你可以根据需要调整这个值。
6、错误处理
DRF 提供了丰富的错误处理机制,默认情况下,当出现错误时,DRF 会自动返回带有错误信息的响应。比如,当发送无效的数据时,DRF 会返回 400 错误,并显示详细的错误消息。
你也可以自定义错误消息,或者在视图中处理特定的异常。
二、如何用python命令行格式化json文件
在Python中,你可以使用内置的json
模块来格式化JSON文件。以下是一个简单的命令行脚本,它读取一个JSON文件,然后将其格式化并打印到标准输出。这个脚本就是用于“python命令行格式化json文件”的实用工具。如果你想要将格式化后的JSON写回文件,也可以在脚本中添加相应的代码。下面我们来学习下如何用python命令行格式化json文件:
首先,确保你的JSON文件是有效的。以下是一个名为format_json.py
的Python脚本示例,它专门用于“python命令行格式化json文件”:
import json
import sys
def format_json(input_file_path, output_file_path=None):
try:
with open(input_file_path, 'r') as file:
data = json.load(file)
# 格式化JSON数据
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
if output_file_path:
# 将格式化后的JSON写入文件
with open(output_file_path, 'w') as file:
file.write(formatted_json)
else:
# 打印格式化后的JSON到标准输出
print(formatted_json)
except FileNotFoundError:
print(f"Error: The file {input_file_path} does not exist.")
except json.JSONDecodeError:
print("Error: The file contains invalid JSON.")
except Exception as e:
print(f"An unexpected error occurred: {e}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python format_json.py <input_file_path> [output_file_path]")
else:
input_file_path = sys.argv[1]
output_file_path = sys.argv[2] if len(sys.argv) > 2 else None
format_json(input_file_path, output_file_path)
使用这个脚本,你可以通过命令行传递输入文件的路径,如果需要,还可以传递输出文件的路径。例如,如果你想要“python命令行格式化json文件”,可以这样做:
python format_json.py input.json
这将格式化input.json
文件并打印到标准输出。如果你想要将格式化后的JSON写入新文件,可以这样做:
python format_json.py input.json output.json
这将创建一个名为output.json
的文件,其中包含格式化后的JSON数据。这个操作也是“python命令行格式化json文件”的一个应用场景。
请确保在运行脚本之前,你的Python环境已经设置好,并且你有权限读取和写入指定的文件。这个脚本是“python命令行格式化json文件”的一个实际应用,可以帮助你快速格式化JSON数据,无论是打印到控制台还是写入到新文件。
三、总结
今天,我们一起学习了 Django REST Framework,从如何安装、定义模型,到如何使用 DRF 创建 API,最后我们还学会了如何进行权限控制和分页处理以及如何用python命令行格式化json文件、如何获取数据库表结构工具。通过 DRF,你可以轻松地为你的 Django 项目提供 RESTful API,帮助前端和移动端更方便地访问后端数据。
练习题:
- 在现有 API 的基础上,添加一个功能,允许用户更新书籍信息。
- 添加一个功能,允许用户根据书名或作者搜索书籍。
- 为 API 添加用户认证和授权,确保只有管理员才能删除书籍。
今天的 Python 学习之旅就到这里啦!记得动手敲代码,实践是最好的学习方式。祝大家学习愉快,Python 学习节节高!
文章转自微信公众号@打个新