在现代 Web 应用程序中,RESTful API 已经成为了不可或缺的一部分。RESTful API 的设计可以让前端与后端之间的通信更加简单、高效和可扩展。Django 是一个强大的 Web 应用程序框架,它提供了许多有用的工具和功能,可以帮助我们快速构建 RESTful API。在本文中,我们将介绍如何使用 Django 构建 RESTful API,包括如何处理请求、认证和授权、序列化和反序列化等方面。
准备工作
在开始构建 RESTful API 之前,我们需要先安装 Django 和其他必要的库。可以使用 pip 来安装它们:
pip install django djangorestframework django-filter
- Django:Web 应用程序框架。
- Django Rest Framework:一个用于构建 RESTful API 的框架。
- Django Filter:一个用于过滤查询结果的库。
构建 RESTful API
创建 Django 项目和应用
首先,我们需要创建一个 Django 项目和应用。可以使用以下命令来创建它们:
django-admin startproject project_name cd project_name python manage.py startapp app_name
其中,project_name
是项目的名称,app_name
是应用的名称。
配置应用
接下来,我们需要在 settings.py
文件中配置应用。在 INSTALLED_APPS
中添加应用的名称:
INSTALLED_APPS = [ # ... 'rest_framework', 'django_filters', 'app_name', ]
在 MIDDLEWARE
中添加以下中间件:
-- -------------------- ---- ------- ---------- - - - --- ------------------------------------------------ ------------------------------------------------------- -------------------------------------------- -------------------------------------------- ---------------------------------------------------------- ------------------------------------------------------- --------------------------------------------------------- -
在 DATABASES
中配置数据库:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
创建模型
接下来,我们需要创建模型。模型用于定义数据结构,它们将被转换为数据库表。在 models.py
文件中添加以下代码:
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()
创建序列化器
在 Django Rest Framework 中,序列化器用于将模型转换为 JSON 或其他格式。在 serializers.py
文件中添加以下代码:
from rest_framework import serializers from app_name.models import Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = '__all__'
创建视图
视图用于处理请求并返回响应。在 views.py
文件中添加以下代码:
from rest_framework import viewsets from app_name.models import Book from app_name.serializers import BookSerializer class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer
创建 URL
最后,我们需要将视图映射到 URL。在 urls.py
文件中添加以下代码:
-- -------------------- ---- ------- ---- ----------- ------ -------- ---- ---- -------------- ------ ------- ---- -------------- ------ ----------- ------ - ----------------------- ------------------------- ------------ ----------- - - -------- ---------------------- -
运行应用
现在,我们已经完成了 RESTful API 的构建。可以使用以下命令来启动应用:
python manage.py runserver
在浏览器中访问 http://localhost:8000/books/
,就可以看到我们刚刚创建的 API。
认证和授权
在实际应用程序中,我们通常需要对 API 进行认证和授权。Django Rest Framework 提供了许多认证和授权选项,包括基于令牌的认证、基于 Session 的认证、基于 OAuth2 的认证等。
基于令牌的认证
基于令牌的认证是一种常见的认证方式,它将令牌作为凭证进行验证。可以使用以下命令来安装 djangorestframework-simplejwt
库:
pip install djangorestframework-simplejwt
在 settings.py
文件中添加以下配置:
-- -------------------- ---- ------- -------------- - - --------------------------------- - ------------------------------------------------------------ -- - ---------- - - ------------------------ ---------------------- ------------------------- ------------------ -
在 urls.py
文件中添加以下代码:
-- -------------------- ---- ------- ---- ------------------------------ ------ - -------------------- ----------------- - ----------- - - ------------------ ------------------------------ -------------------------- -------------------------- --------------------------- ---------------------- -
现在,我们已经完成了基于令牌的认证的配置。可以使用以下命令来测试它:
curl -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "admin123"}' http://localhost:8000/api/token/
该命令将返回一个带有访问令牌和刷新令牌的 JSON 响应。
基于权限的授权
基于权限的授权是一种常见的授权方式,它根据用户的权限来限制其访问资源的方式。Django Rest Framework 提供了许多权限类,包括 IsAuthenticated、IsAdminUser、AllowAny 等。
在 views.py
文件中添加以下代码:
from rest_framework.permissions import IsAuthenticated class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer permission_classes = [IsAuthenticated]
现在,只有已经认证的用户才能访问 API。
过滤和搜索
在实际应用程序中,我们通常需要对查询结果进行过滤和搜索。Django Rest Framework 提供了许多过滤器和搜索类,可以帮助我们实现这些功能。
在 views.py
文件中添加以下代码:
-- -------------------- ---- ------- ---- ----------------------------- ------ ------------------- ---- ---------------------- ------ ------------- -------------- ----- ----------------------------------- -------- - ------------------ ---------------- - -------------- ------------------ - ----------------- --------------- - --------------------- ------------- --------------- ---------------- - --------- --------- ------------- - --------- --------- --------------- - ------------------
现在,我们可以使用以下命令来测试过滤和搜索功能:
curl -X GET http://localhost:8000/books/?title=Python curl -X GET http://localhost:8000/books/?search=Python curl -X GET http://localhost:8000/books/?ordering=published_date
结论
在本文中,我们介绍了如何使用 Django 构建 RESTful API,包括如何处理请求、认证和授权、序列化和反序列化等方面。我们还介绍了如何使用基于令牌的认证、基于权限的授权、过滤和搜索等技术来增强 API 的功能。希望这篇文章能够帮助您更好地理解 Django 和 RESTful API 的构建实践。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6759408036908a98ca6be488