使用django创建简单restful应用接口的步骤

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
可观测链路 OpenTelemetry 版,每月50GB免费额度
简介: 【6月更文挑战第2天】本文简介使用Django创建API服务涉及安装djangorestframework,创建api应用,定义URL路由,编写视图和序列化器。这个过程展示了如何用Django Rest Framework构建JSON格式的API。

1 创建api服务

本文简介使用django3和restful插件创建应用时的步骤,以及如何在INSTALLED_APPS中添加 api.apps.ApiConfig 。路由配置包括在顶级和api应用的urls.py中添加路径。视图使用rest_framework的generics,而序列化器在serializers.py中创建。完成后,通过访问127.0.0.1:1999/api/可测试API。

  • 安装插件

安装 库

     pip install django 
    pip install djangorestframework\~=3.11.0

创建应用:

  django-admin startproject bookstore_project
  cd bookstore_project
  python manage.py startapp books 

2 模型和基本配置

现在,进入项目的settings.py文件中,将新的应用程序和REST Framework添加到INSTALLED_APPS中:

      INSTALLED_APPS = [
    ...
    'rest_framework',
    'books',
    ...
  ]

api 返回的数据为json格式, 我们的API将公开一系列端点,该端点在JSON中列出所有书籍。

所以据此需要新的URL路由,新的视图,新的序列化文件 URL view serializer file。

可以通过多种方式来组织这些文件,但是我的首选方法是创建专用的api应用,这样可以保证扩展性。即使我们将来添加更多应用,每个应用仍可以包含专用网页所需的模型,视图,模板和url。

整个项目将保存在专用的api应用程序中的 API专用文件创建 api 应用

python manage.py startapp api

注册应用 如果添加了这一行,就不能再添加 books,相互冲突

INSTALLED_APPS = ['api.apps.ApiConfig',
                'books.apps.BooksConfig',   
                ...


                'books'    # 与之上的'books.apps.BooksConfig'效果一样,同时添加将导致冲突
                ]
  • 创建模型
    创建一个models.py文件来定义书籍模型:

          # books/models.py
    
          from django.db import models
    
          class Book(models.Model):
            title = models.CharField(max_length=100)
            author = models.CharField(max_length=100)
            price = models.DecimalField(max_digits=10, decimal_places=2)
    
          def __str__(self):
            return self.title
    
  • 序列化

接着,在books应用程序中创建一个serializers.py文件来定义序列化器

   # books/serializers.py
   from rest_framework import serializers
   from .models import Book

  class BookSerializer(serializers.ModelSerializer):
      class Meta:
          model = Book
            fields = '__all__'

3 路由

api应用的urls

定义顶层路由 路径 形如: api/

添加路径

config/urls.py  
    urlpatterns = [path('api/', include('api.urls')), ...# new]

添加路径

api/urls.py 
    from django.urls import path
    from .views import BookAPIView
    urlpatterns = [
        path('', BookAPIView.as_view()),
    ]    

完整代码示例:

  # bookstore_project/urls.py

  from django.contrib import admin
  from django.urls import path, include
  from rest_framework import routers
  from books.views import BookViewSet

  router = routers.DefaultRouter()
  router.register(r'books', BookViewSet)

  urlpatterns = [
      path('admin/', admin.site.urls),
      path('', include(router.urls)),
  ]

3 视图

api 应用的 Views 将依赖 django-restframwork的 内建视图

内建rest视图故意模仿传统Django基于类的通用视图的格式,但是它们并不一样

为了在调用api视图时,不至于混淆框架视图文件views.py,

视图处理api/views.py

    from rest_framework import generics  
    from books.models import Book        
    from .serializers import BookSerializer  
    class BookAPIView(generics.ListAPIView):
        queryset = Book.objects.all()
        serializer_class = BookSerializer

4 序列化和数据库迁移处理

序列化处理,创建serializers.py, touch api/serializers.py

    from rest_framework import serializers
    from books.models import Book
    class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = Book
            fields = ('title', 'subtitle', 'author', 'isbn')

没有数据库改动,就不需要执行 python manage.py makemigrations && python manage.py migrate

5 访问测试

运行服务:

     python manage.py runserver

指令:curl 127.0.0.1:1999/api/
可以发现有一个此页面中内置的许多功能,比如可视化
通过url 127.0.0.1:1999/api/ 。

6 小结

通过该 :1999/api/ 接口进行书籍的创建、更新和删除操作,django3配合django-restframwork可以更方便有效构建符合风格的应用接口。

以方便使用者专注以实现业务。

目录
相关文章
|
5天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
27 6
|
1月前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
27天前
|
Java 测试技术 API
构建高效RESTful API的五个关键步骤
【8月更文挑战第31天】在数字化时代,RESTful API成为连接不同软件系统的重要桥梁。本文旨在通过五个关键步骤引导开发者构建高效的RESTful API,包括设计、实现、测试、部署和维护。我们将探讨每个步骤的重要性,并提供实用的代码示例。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导和灵感。
|
28天前
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
28 0
|
1月前
|
存储 缓存 关系型数据库
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
34 0
|
1月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
2月前
|
SQL API 网络架构
Pythoner必看!RESTful API设计秘籍,让你的Web应用瞬间高大上!
【7月更文挑战第24天】在 Python Web 开发中, RESTful API 设计至关重要, 它不仅展现技术实力, 更提升应用的可维护性与用户体验。
42 5
|
2月前
|
API 数据安全/隐私保护 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
【7月更文挑战第23天】Python的RESTful API设计在Web开发中流行,提升效率与体验。REST强调HTTP方法(GET, POST, PUT, DELETE)操作资源。使用Flask框架可快速实现API,如管理用户信息。示例代码展示如何创建、读取、更新和删除用户,通过不同HTTP方法和URL路径。实际应用中,增加验证、错误处理和权限控制可增强API的安全性和稳定性。安装Flask后,可运行代码测试API功能。
61 6
|
2月前
|
安全 API 网络架构
Python RESTful API设计新篇章,打造高效、易用、安全的Web服务接口,你准备好了吗?
【7月更文挑战第22天】在数字化转型中,RESTful API借助Python的Flask和Django REST Framework,提供高效、易用和安全的接口设计。Flask示例展示了简洁的CRUD操作,Swagger等工具增进API文档的易用性,而HTTPS、JWT和输入验证确保安全性。Python RESTful API设计涉及效率、可用性和安全,是不断进化的Web服务接口的关键。准备好踏上这一新篇章了吗?一起探索,创造卓越!
46 2
|
2月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
124 6