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

本文涉及的产品
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【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可以更方便有效构建符合风格的应用接口。

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

目录
相关文章
|
2月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
81 1
|
2月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
42 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
2月前
|
XML JSON API
深入浅出:RESTful API 设计实践与最佳应用
【9月更文挑战第32天】 在数字化时代的浪潮中,RESTful API已成为现代Web服务通信的黄金标准。本文将带您一探究竟,了解如何高效地设计和维护一个清晰、灵活且易于扩展的RESTful API。我们将从基础概念出发,逐步深入到设计原则和最佳实践,最终通过具体案例来展示如何将理论应用于实际开发中。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的指导和灵感。
|
3月前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
111 6
|
2月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
120 0
|
2月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
20 0
|
2月前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
24 0
|
4月前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
4月前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
80 0
|
4月前
|
Java 测试技术 API
构建高效RESTful API的五个关键步骤
【8月更文挑战第31天】在数字化时代,RESTful API成为连接不同软件系统的重要桥梁。本文旨在通过五个关键步骤引导开发者构建高效的RESTful API,包括设计、实现、测试、部署和维护。我们将探讨每个步骤的重要性,并提供实用的代码示例。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导和灵感。