Python利用Django 构建Rest Api: 快速入门教程

简介: Python利用Django 构建Rest Api: 快速入门教程

1. 前言


在本篇中,我们将为大家介绍如何基于Python构建一个以Django Rest框架为特征的博客应用程序API服务,并且该API服务支持CRUD (Create-Read-Update-Delete)功能。


PS: API(应用程序编程接口)为开发人员提供了与应用程序数据库交互的接口。

2. Django项目配置


首先在本地为我们的代码创建一个新的目录。例如,本文将它放在一个叫做blog_api的文件夹里,但是你可以把它放在任何地方,然后配置我们的项目。

# Create the project directory
mkdir blog_api
cd blog_api
# Create a virtual environment to isolate our package dependencies locally
python3 -m venv env
source env/bin/activate  # On Windows use `env\Scripts\activate`
# Install Django and Django REST framework into the virtual environment
pip install django
pip install djangorestframework
# Set up a new project with a single application
django-admin startproject blog_project 
cd blog_project
django-admin startapp blog_api
cd ..

经过上述的操作后,我们创建了名为env的虚拟隔离开发环境,并在此环境下面,创建了一个名为`blog_project`的Django项目,并且创建一个Django App :`blog_api`因为添加了一个新的app,我们需要告诉Django。因此,请确保将blog_api添加到setting.py文件中的INSTALLED_APPS列表。

# blog_project/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog_api',]

3. 定义数据模型、执行数据同步


定义数据模型,此处我们创建四个字段: title、content、created_at和updated_at。

# blog_api/models.py
from django.db import models
class Post(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.title

创建新的迁移文件并更新同步到数据库。

(env) $ python manage.py makemigrations
(env) $ python manage.py migrate

4. 配置管理后台Admin


我们希望在Django的后台中管理我们的数据,因此,让我们将Post添加到下面。

# posts/admin.py
from django.contrib import admin
from . models import Post
admin.site.register(Post)


然后创建一个超级管理员帐户。


(env) $ python manage.py createsuperuser

现在我们就可以启动django web服务了。


(env) $ python manage.py runserver

浏览器输入 localhost:8000/admin,并使用刚刚创建的账户登陆。

微信图片_20220524091527.png


点击帖子旁边的“+ Add”按钮,输入一些新的内容,例如下图所示。

微信图片_20220524091439.png

到此,我们已经完成了Django部分,由于我们本篇示例,是为了创建一个API服务,所以我们不需要创建模板和视图。相反,我们还需要继续添加Django Rest库来处理将模型数据转换为Rest API。

5. Django Rest Framework 安装、配置


DjangoRestFramework,简称为DRF,它是负责将数据库模型转换为RESTful API。这个过程有两个主要步骤:首先通过序列化器将数据转换成JSON,这样就可以通过internet发送数据,然后使用view来定义发送的数据。


1、在前面第二步中,我们已经安装好了安装Django Rest库,如果仍未安装,可输出下述命令安装。


(env) $  pip install djangorestframework

2、然后将它添加到我们的settings.py文件的INSTALLED_APPS部分。

# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog_api',
    'rest_framework',
]

3、紧接着,创建一个新的py文件,文件名为serializers.py。


(env) $ touch blog_api/serializers.py

请记住,序列化器用于将我们的数据转换成JSON格式,serializers.py文件代码如下所示。

from rest_framework import serializers
from . import models
class PostSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ('id', 'title', 'content', 'created_at', 'updated_at',)
        model = models.Post


我们首先从DRF库导入序列化模块。接下来,我们创建一个序列化器类并在其中创建一个元类(Meta)。fields字段控制数据库数据的类型。在本例中,我们将暴露所有字段,包括id,这是Django的主键,由Django自动添加到所有数据库记录。



4、接下来,我们需要创建view。
正如Django有基于类的视图一样,DRF也有我们可以使用的通用视图。例如,本示例中,我们定义一个列出所有博客文章和一个文章内容详细视图以及更新文章内容的视图,脚本如下所示。

from rest_framework import generics
from . import models
from . import serializers
class PostList(generics.ListAPIView):
    queryset = models.Post.objects.all()
    serializer_class = serializers.PostSerializer
class PostDetail(generics.RetrieveAPIView):
    queryset = models.Post.objects.all()
    serializer_class = serializers.PostSerializer
class PostDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = models.Post.objects.all()
    serializer_class = serializers.PostSerializer


在脚本中,我们从DRF中导入基础视图类generics,以及我们的模型和序列化文件。然后我们创建三个view方法,前两个方法都是用于GET,后一个方面,用于POST。



5、在项目根目录中配置修改urls.py路由规则。

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('blog_api.urls')),]


我们为blog_api创建了一个名为api/的路径。接下来创建blog_api app的 urls.py文件。


(env) $ touch blog_api/urls.py

然后输入下面的代码。

from django.urls import path
from . import views
urlpatterns = [
    path('', views.PostList.as_view()),
    path('<int:pk>/', views.PostDetail.as_view()),]


所有的博客url都将在 api/里。所以我们的PostList将在api/里,postDetail 则在api/#里,其中#表示条目的id。例如,第一篇博客文章的id为1,所以它的路径为api/1, api/2则为第二篇文章,等等。

6. Rest Api实战示例效果


1、首先启动服务器。


(env) $ python manage.py runserver

2、浏览器打开 http://127.0.0.1:8000/api/,如下所示。

微信图片_20220524091837.png

api/端点以JSON格式显示本篇示例添加的2篇博客文章。


3、接着访问http://127.0.0.1:8000/api/2/,您将查看到第二篇文章的详细内容。

微信图片_20220524091917.png

在详细视图中,您可以使用“Delete”按钮来删除内容,“Put”来更新内容,“Get”可以像以前一样获取它。例如,此外我们希望更新第二篇贴子的内容,在Title后面增加“狂师”二字,增加后点击PUT按钮,即可完成更新。

微信图片_20220524091946.png

4、更新完成之后,重新访问查看api列表http://127.0.0.1:8000/api,如下所示,发现列表中的第二篇文章,已经是我们更新后的内容了。

微信图片_20220524092023.png

当然,如果你喜欢用命令行来调用接口,也可以通过httpie工具在命令行终端获取:


http http://127.0.0.1:8000/api/

微信图片_20220524092205.png


到此,本篇分享介绍完毕,正在读文的你,学会了吗

目录
打赏
0
1
1
0
134
分享
相关文章
构建智能天气助手:基于大模型API与工具函数的调用实践
在人工智能快速发展的今天,大语言模型(LLM)已经成为构建智能应用的重要基础设施。本文将介绍如何利用大模型API和工具函数集成,构建一个能够理解自然语言并提供精准天气信息的智能助手。
58 11
构建智能 API 开发环境:在 Cursor 中连接 Apifox MCP Server
本文介绍了如何将Apifox MCP Server与Cursor结合,通过AI直接获取和理解API文档,大幅提升开发效率。首先需配置Apifox的Access Token和项目ID,并在Cursor中设置MCP连接。实际应用场景包括快速生成模型代码、同步更新接口文档与代码、生成CRUD操作、搜索API文档及自动生成测试用例。此外,还提供了管理多项目、安全性实践和优化AI响应质量的技巧。这种组合可显著减少从API规范到代码实现的时间,降低错误率并加速迭代过程,为开发者带来更高效的体验。
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
解锁 DeepSeek API 接口:构建智能应用的技术密钥
在数字化时代,智能应用蓬勃发展,DeepSeek API 作为关键技术之一,提供了强大的自然语言处理能力。本文详细介绍 DeepSeek API,并通过 Python 请求示例帮助开发者快速上手。DeepSeek API 支持文本生成、问答系统、情感分析和文本分类等功能,具备高度灵活性和可扩展性,适用于多种场景。示例展示了如何使用 Python 调用 API 生成关于“人工智能在医疗领域的应用”的短文。供稿者:Taobaoapi2014。
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
在完成HarmonyOS Camera API开发后,我深入研究了数字版权管理(DRM)技术。最新DRM API 13提供了强大的工具,用于保护数字内容的安全传输和使用。通过学习该API的核心功能,如获取许可证、解密内容和管理权限,我实现了一个简单的数字视频保护系统。该系统包括初始化DRM模块、获取许可证、解密视频并播放。此外,我还配置了开发环境并实现了界面布局。未来,随着数字版权保护需求的增加,DRM技术将更加重要。如果你对这一领域感兴趣,欢迎一起探索和进步。
117 18
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
92 12
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
363 45
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
225 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
156 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等