百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

在Django Rest Framework中创建您的第一个REST API

ccwgpt 2024-10-31 12:33 28 浏览 0 评论

在Django Rest Framework中创建API的教程

在这篇文章中,我将讨论Django Rest Framework或DRF。 DRF用于在Django中创建RESTful API,以后可以由各种应用程序使用。 移动,网络,桌面等。我们将讨论如何在您的计算机上安装DRF,然后将为系统编写API。

在讨论DRF之前,让我们先谈谈REST本身。

什么是Rest

来自维基百科

Representational state transfer (REST) 是一种软件体系结构样式,它定义了一组用于创建Web服务的约束。符合REST体系结构样式的Web服务(称为RESTful Web服务)提供Internet上计算机系统之间的互操作性。 RESTful Web服务允许请求系统通过使用统一且预定义的无状态操作集来访问和操纵Web资源的文本表示。其他类型的Web服务,例如SOAP Web服务,公开了它们自己的任意操作集。[1]

Rest API(应用程序编程接口)是一种无状态的客户端-服务器体系结构,并使用典型的URL方案进行数据交换。它由Roy Fielding于2000年在他的著名论文中首次提出。用于在客户端和服务器之间提供通信的URL通常称为端点。为此使用了不同的HTTP方法:

  • GET:-返回请求的数据,该数据可以是记录列表或单个记录。
  • POST:-它创建一个新记录。
  • PUT / PATCH:-更新现有记录。
  • DELETE;删除记录。

返回的数据可以是XML, JSON或其他格式,但前两种是最常见的。

好的,现在您已经了解了REST API,让我们讨论Django Rest Framework本身。

什么是Django Rest Framework

Django Rest Framework是一个开放源代码框架,用于以Python编写RESTful API。 它基于Django框架,因此尽管不是必需的知识,但Django的知识是非常有益的。

因此,我们将为“联系人管理系统”制作API,使用户能够使用我们的API创建/更新和删除联系人。 返回的数据将为JSON格式。

安装与设置

我将使用Pipenv为我们的API设置开发环境。 无论您的计算机上安装了什么东西,Pipenv都使隔离开发环境变得更加容易。 它还允许您选择与计算机上已安装的版本不同的Python版本。 它使用Pipfile来管理所有与项目相关的依赖项。 我不会在这里详细介绍Pipenv,因此只会使用项目所需的命令。

您可以通过运行PyPy安装Pipenv

pip install pipenv

安装后,我们现在必须为项目选择Python版本。 我愿意使用Python 3.8版本而不是机器上已经安装的Py3.7。 要安装Python 3.8,您所要做的就是运行以下命令:

pipenv install --python 3.8

它将如下安装:



您也可以运行

pipenv install --three

,其中三 表示Python3.x。

安装完成后,您可以通过运行以下命令激活虚拟环境

pipenv shell
?  ContactAPIs pipenv shell
Launching subshell in virtual environment…
. /Users/AdnanAhmad/.local/share/virtualenvs/ContactAPIs-tI040CTn/bin/activate
?  ContactAPIs  . /Users/AdnanAhmad/.local/share/virtualenvs/ContactAPIs-tI040CTn/bin/activate

进入外壳后(您会看到类似(ContactAPIs)?ContactAPIs的提示),您将能够安装所需的库。 首先,我们将通过运行以下命令来安装Django:

pipenv install django

请注意,它是pipenv,而不是pip。 当您进入shell时,将使用pipenv。 它的底层使用的是pip,但所有条目都存储在Pipfile中。 然后运行pipenv安装

pipenv install djangorestframework

Pipfile将如下所示:


现在我们必须创建一个Django项目。 要创建Django项目,我们将运行django-admin命令,如下所示:

django-admin startproject contact_api .

它将创建如下目录结构:


到目前为止,我们来看是否可以运行本地开发服务器。 运行命令

python manage.py runserver

如果一切顺利,您应该会看到类似以下的窗口:

美丽,不? 好吧,让我们运行一些现有的迁移。 为此,我们将运行命令

python manage.py migrate

Django默认使用Sqlite3,但您可以始终通过更改设置来使用自己喜欢的RDBMS引擎。 好了,因此创建了所有与系统相关的表。 我们应该可以访问http://127.0.0.1:8000/admin/,但是我们无法登录。在没有任何凭据的情况下,我们怎么办? 所以现在,我们将创建一个超级用户。

python manage.py createsuperuser --email me@example.com --username admin

它将提示您设置密码。 完成操作后,您将进入“管理员”页面,该窗口将类似于以下内容:

现在,我们将创建一个Django App。 为此,我首先进入contact_api文件夹,然后运行以下命令:

(ContactAPIs) ?  ContactAPIs cd contact_api
(ContactAPIs) ?  contact_api  django-admin startapp contact

之后,文件夹结构将如下所示:

(ContactAPIs) ?  contact_api tree .
.
├── __init__.py
├── asgi.py
├── contact
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── settings.py
├── urls.py
└── wsgi.py

Django开发人员可能会发现在项目文件夹中创建应用程序很不寻常,但建议在DRF官方网站上使用。 您始终可以按照自己的方式从项目文件夹中创建应用程序。

现在,我们将在INSTALLED_APPS中包含我们的DRF框架和新创建的应用程序。 因此,转到contact_api文件夹中的settings.py并添加如下所示的条目:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'contact_api.contact',
]

请注意最后两个条目。 我们添加了rest_framework以便拥有API功能。 其次,我们添加了新创建的应用程序。 注意该路径。 由于应用在文件目录contact_api 创建了WITHIN,因此我们必须使用点标记来提供完整路径。

现在,我们将为API端点创建模型和视图。 在models.py文件中,我们将编写模型。 该模型将是通过API检索或插入数据的唯一责任。

from django.db import models
# Create your models here.
class Contact(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.CharField(max_length=50)
    address = models.CharField(max_length=100)

因此,这是我们的模型,其中包含一些领域。 现在是创建迁移然后进行迁移的时候,以便可以在数据库文件中生成架构。 我们将运行命令

python manage.py makemigrations contact

它将产生类似以下的输出:

(ContactAPIs) ?  ContactAPIs python manage.py makemigrations contact  
Migrations for 'contact':
  contact_api/contact/migrations/0001_initial.py
    - Create model Contact

迁移文件已创建。 是要迁移它!

(ContactAPIs) ?  ContactAPIs python manage.py migrate               
Operations to perform:
  Apply all migrations: admin, auth, contact, contenttypes, sessions
Running migrations:
  Applying contact.0001_initial... OK
(ContactAPIs) ?  ContactAPIs

除了创建以前的迁移,它还创建了我们刚刚创建的迁移。 现在,我们将在admin.py中注册我们的模型,以便我们可以在管理界面中与模型进行交互:

from django.contrib import admin
from .models import Contact
# Register your models here.
admin.site.register(Contact)

如果您访问http://127.0.0.1:8000/admin,您将在那儿找到新创建的Contact模型。

接下来,我们将创建视图和数据序列化器。

首先,我们将创建序列化器。

Serializers 有助于将模型和querySet转换为本地Python数据类型,以便随后将它们呈现为JSON或XML。 由于它们将数据序列化,因此您始终可以将它们反序列化回模型和querySets。 序列化的文件如下所示:

from rest_framework import serializers
from .models import Contact
class Contactializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Contact
        fields = ('id', 'url', 'first_name', 'last_name', 'email', 'address')

导入必要的类后,我们创建了一个类并提到了要序列化的类。 我们还提到了要公开从而序列化的字段。

接下来,我们将创建视图,为此,我们将使用ViewSet。

视图集在一个类下结合了多个视图的逻辑。

现在我们必须设置我们的API端点,为此,我们需要做一些艰苦的工作。 首先,我们必须在我们的app文件夹(即contact文件夹)中创建一个urls.py文件。

from rest_framework import routers
from django.urls import path,include
from . import views
router = routers.DefaultRouter()
router.register('contacts', views.ContactView)
urlpatterns = [
    path('',include(router.urls))
]

在这里,您将学习一个新概念Router。如果您来自Laravel,Rails甚至NodeJS的背景,那么您将对路由器的功能有所了解。它将请求路由到适当的资源。 DRF提供三种路由器:简单,默认和自定义。默认路由器类似于简单路由器,它返回所有与CRUD相关的终结点,以及每个记录的终结点的URL和可选的JSON视图。接下来,我们将视图集注册到一个根名称中,该根名称是此处的contacts 联系人。因此,所有端点将在API端点中包含contacts/。一旦注册,您将使用相同的旧include通过包含router.urls来设置端点的路径。在RoR和Laravel世界中,这些被称为足智多谋的溃败,因为您不必创建单独的视图及其各自的URL来进行创建,更新,获取,发布和删除。当然,您总是可以通过添加方法并使用@action装饰器进行装饰来添加自己的自定义端点。例如,检查以下内容:

@action(detail=False, methods=['get'])
    def lol(self, request, pk=None):
        return Response({'status': 'OK'})

在这里,我们添加了另一条自定义路线,因此当访问http://127.0.0.1:8000/contacts/lol/时,它会返回JSON响应。 我们将detail=False设置为因为它不是一个足智多谋的端点,因此仅服务于一个端点。

好吧,事情还不止于此。 接下来,我们必须将API添加到主urls.py中,为此,我们将在contact/urls.py中执行以下操作

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

因此,除了Admin之外,我们终于在主项目的urls.py中包含了我们的API,这使我们可以浏览Admin或其他应用程序URL之外的API。

现在该品尝我们的努力成果了。 转到浏览器上的http://127.0.0.1:8000/contacts/,您将看到类似以下的内容:

它显示了一个用于添加记录和其他内容的精美界面。 您还会看到一个Extra Option按钮,它是针对我们刚刚添加的自定义方法的。 让我们一起玩吧。 我创建了一个动画Gif,供您查看如何以HTML和JSON格式添加记录。 如何列出记录以及如何浏览单个记录。

当然,当您直接通过CURL或其他库访问它时,您将不会看到所有基于HTML的界面。

(ContactAPIs) ?  ContactAPIs curl http://127.0.0.1:8000/contacts/
[{"id":1,"url":"http://127.0.0.1:8000/contacts/1/","first_name":"Adnan","last_name":"Ahmad","email":"adnan@mail.com","address":"A29 Sweet House"},{"id":2,"url":"http://127.0.0.1:8000/contacts/2/","first_name":"Ali","last_name":"Ahmad","email":"ali@email.com","address":"5th Street New way Town"}]%

哦,顺便说一句,您可以随时访问http://127.0.0.1:8000/contacts/lol/ 大声笑!

结论

在本教程中,您学习了如何使用Django Rest Framework在Python中创建REST API。 我刚刚给您做了介绍,您可以做很多事情,例如在登录名/密码后面保护某个API端点或使用JWT或其他现代身份验证机制。 我将在以后的文章中尝试覆盖它们。 与往常一样,该代码在Github上可用

https://github.com/kadnan/django-rest-framework-api-tutorial

相关推荐

NestJS入门教程系列一

介绍Nest(NestJS)是用于构建高效,可扩展的Node.js服务器端应用程序的框架。它使用渐进式JavaScript,内置并完全支持TypeScript(但开发人员仍然能够使用JavaScrip...

【推荐】一个网盘资源搜索与转存工具,支持移动端与PC端!

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍CloudSaver是一个基于Vue3和Express的网盘资源搜索与转存开源实用工具。它支持...

Appium原理精讲

目前使用Appium新版本和旧版本的企业数目都很多,而两个版本的安装过程和api的使用又有较大的区别。但是无论表面上的东东如何变化,内部原理都是一样的。在这里我给大家介绍一下appium的核心,增进大...

Kubernetes最小部署单元Pod

一、Kubernetes与Pod简介在当今云计算和容器化技术盛行的时代,Kubernetes已然成为容器编排领域的中流砥柱。它是一个开源的容器编排平台,由Google基于其内部使用的Bo...

最常用的四种跨域解决方案

前置知识什么是跨域?浏览器发送的请求地址(URL)与所在页面的地址不同(端口/协议/域名其一不同)。简言之,浏览器发出的请求url,与其所在页面的url不一样。此时,同源策略会让浏览器拒收服务器...

Bolt.New —— 全栈AI Web自动编程

Bolt.New是由StackBlitz公司推出的,全栈AI工具,代码编辑、运行、部署,通通一站式搞定。它使用WebContainers技术,无需任何本地安装或配置,在浏览器中,就可以运行完整的No...

Nodejs Express新手教程&高手进阶

NodejsExpress新手教程&高手进阶Express是一个NodeJS平台的框架,主要用于构于Web服务器项目。本文将通过示例介绍适合新手入门的Express基础使用,以及高手进阶知识,如:c...

Express.js 创建Node.js Web应用

Express.js是一个基于Node.js的Web应用框架,框架的设计目的是构建应用的架构和简化应用的开发。框架会解决一些通用的问题,在Express.js中,Express框架会处理如:中间件、代...

JavaScript 的 Express.js 功能及应用场景详解

Express.js是一个基于Node.js的轻量级Web应用框架,主要用于快速构建服务器端应用和API。它的核心功能包括以下关键点:1.路由管理URL路径与HTTP方法映射:通过...

nodejs的express4文件下载

在nodejs的express框架中,下载变得非常简单,就一个方法,res.download()首先express命令行生成项目基本框架:不会的看这里:http://blog.csdn.net/zz...

Express 系列:快速生成一个项目

系列预告本系列将以一个项目入手结合相关技术细节来带领大家一起学习Express这个基于Node.js的后端框架。本文首先将介绍:如何快速的生成一个具有一定结构的Express项目。Express项目结...

nodejs的express自动生成项目框架

nodejs版本为:4.X,express版本为4.X1.全局安装2个模块express、express-generator在命令行输入:npminstall-gexpressnpminsta...

express开发(一)简介与搭建

上周末去了趟上海书城,不愧是上海数得上号的书城,流行的科技书应有尽有,话不多说直接上图。最经典的C语言O(∩_∩)O最流行的java(づ ̄3 ̄)づ超酷的R语言/(ㄒoㄒ)/~~然而,身为一个坚定的前...

Vue+Echarts可视化大屏系统后端框架搭建(附代码)

各位同学,大家好。上节课,前面我们讲解了Vue+Echarts前端部分的设计方法。这节课程,我们开始讲解使用Express进行后端设计的方法。01项目相关理论介绍什么是expressExpress是...

Shopify电商API接口开发

Shopify电商API接口开发上线流程主要包括以下步骤。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎洽谈合作。前期准备-注册Shopify账号:在Shopify官网注册,用于后续开发测试...

取消回复欢迎 发表评论: