Django REST Framework 简介:使用示例进行开发

已发表: 2020-10-05

Django REST 框架作为标准 Python 包广泛分发,用户可能需要它来开始开发 RESTful API。 它复杂、功能强大、非常易于使用,并为 API 提供了一个有吸引力且可浏览的版本。 Django REST 框架提供了返回 JSON 对象的选项。 该框架提供了强大的模型序列化功能,并在完全 REST 查看器中完全使用基于基本功能的视图来显示数据。 了解更多关于以下Django REST 框架的信息

目录

什么是 Django REST 框架?

Django REST Framework 是一个灵活且健壮的工具包,可让开发人员轻松构建 Web API。 它还为 API 提供基于类的通用视图和序列化程序。 作为一个源代码,它被缩写为 DRF,它代表一个用于开发 Web 应用程序编程接口的 Python 库。 与本文一样,我们正在讨论带有分步说明的开发 API。

但在开始使用本指南之前,重要的是要了解该框架为何如此重要。 许多可用的框架允许开发人员轻松地为其块应用程序构建 API,但首选 Django REST 框架。 该框架易于以多种方式使用,并具有以下优点-

  • 它为 Web 浏览器提供了一个强大的应用程序编程接口,这对开发人员来说是一个巨大的胜利
  • 它具有身份验证策略,包括 OAuth1、OAuth2 等的包
  • 其中的序列化处理器支持 ORM 和非 ORM 数据源
  • 这个框架有大量的文档并且提供了很好的社区支持
  • 它被伟大的平台使用和信任,包括 Mozilla、Heroku、RedHat 等。

阅读: Django 应用程序:你需要知道的一切

设置 Django REST 框架开发

对于初学者,您必须为操作系统安装 Python 依赖项。 如果您使用的是 Windows 平台,您可以通过虚拟框或手动命令轻松地将 Linux 平台安装为您的辅助操作系统。 要继续使用该框架,您可以使用有效且方便的 Python 管理工具。

大多数工具都是首选助手。 它们允许开发人员快速更改 Python 版本、设置项目特定版本、管理虚拟环境以及在系统上安装多个版本。 如果您使用的是 Linux 或 Mac 操作系统,安装它会很容易。

Django REST 框架的帮助下,我们可以将非 RESTful 应用程序转换为 RESTful 应用程序。 这包括以下提到的程序-

DRF 设置

对于 DRF 设置,您必须安装 -

贝壳

$ pip install djangorestframework

$ pip freeze > requirements.txt

更新设置:py:

Python

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'讲话',

'rest_framework'

)

RESTful 结构

在 RESTful API 开发中,端点表示其结构和用户在 GET、PUT、POST、DELETE 等方法的帮助下从应用程序访问。 这些端点在逻辑上围绕元素和集合进行组织,这两者都被视为资源。 如果只有一个资源,则相应的链接将用作元素和集合的 URL。

得到

邮政

删除

/帖子/

显示所有帖子

添加新帖子

更新所有帖子

删除所有帖子

/posts/<id>

显示 <id>

不适用

更新 <id>

删除标识

序列化器和视图

Django REST 框架的主要构建块是序列化器,它们用于详细说明基于 Django 模型的各种数据记录的表示。 序列化器是标准的 Python 类,可以从框架中继承模型的行为。

在序列化程序类中,存在使用同一框架包中的数据类型的单独字段集。 他们还注意到框架和类之间的相似之处。 序列化程序类本身不会思考,它们与管理大量 REST 服务逻辑的视图集成在一起。 此外,它使用序列化程序类来转换数据。 例如,一个常规的 Django 视图方法是——

从 coffeehouse.stores.models 导入商店

从咖啡屋.stores.serializers 导入 StoreSerializer

从 rest_framework.decorators 导入 api_view

从 rest_framework.response 导入响应

@api_view(['GET','POST','DELETE'])

def rest_store(请求):

如果 request.method == 'GET':

商店 = Store.objects.all()

序列化器 = StoreSerializer(商店,许多 = True)

返回响应(serializer.data)

elif request.method == 'POST':

… #用于 HTTP POST 操作的逻辑

elif request.method == '删除':

… #用于 HTTP DELETE 操作的逻辑

基于类的视图

在基于类的视图的帮助下, Django REST 框架提供了对用户最高和复杂功能的访问。 基于类的视图提供了真正成熟的 Python 类的功能,并允许 Django 视图在面向对象的编程原则的帮助下轻松操作,从而实现更高的可重用性和更短的实现时间。

Django 基于类的视图突出了构建 Django 视图的强大方法,它们也是用于构建 API 的方法的替代方法。 要开发基于类的视图,重要的是创建一个可以从其他类之一继承的类。 例如:

#views.py

从 Django.views.generic 导入 TemplateView

关于索引类(模板视图):

模板名称 = 'index.html'

def get_context_data(self, **kwargs):

# **kwargs 包含关键字上下文初始化值(如果有)

# 调用基本实现以获取上下文

context = super(AboutIndex, self).get_context_data(**kwargs)

# 添加上下文数据以传递给模板

context['aboutdata'] = '自定义数据'

返回上下文

# urls.py

从咖啡屋.about.views 导入 AboutIndex

from django.urls 导入路径

网址模式 = [

path('about/index/',AboutIndex.as_view(),{'onsale':True}),

结帐:针对初学者的 12 大 Django 面试问题和答案

更新视图

为了适应 RESTful 应用程序结构,重构当前视图很重要。 您可以注释掉这些视图并将它们添加为-

Python

从 django.shortcuts 导入渲染

从 django.http 导入 HttpResponse

从 rest_framework.decorators 导入 api_view

从 rest_framework.response 导入响应

从talk.models导入帖子

从 talk.serializers 导入 PostSerializer

从 talk.forms 导入 PostForm

默认主页(请求):

tmpl_vars = {'form': PostForm()}

返回渲染(请求,'talk/index.html',tmpl_vars)

@api_view(['GET'])

def post_collection(请求):

如果 request.method == 'GET':

帖子 = Post.objects.all()

序列化器 = PostSerializer(posts, many=True)

返回响应(serializer.data)

@api_view(['GET'])

def post_element(请求,pk):

尝试:

post = Post.objects.get(pk=pk)

除了 Post.DoesNotExist:

返回 HttpResponse(状态=404)

如果 request.method == 'GET':

序列化器 = PostSerializer(post)

返回响应(serializer.data)

解释

  • 在上面给出的指令中,@api_view 装饰器分析了相应的 HTTP 请求,该请求被传递到视图函数中。
  • 现在视图要么使用单个帖子,如果它是一个元素,或者抓取整个数据,如果它是集合
  • 最后,数据现在被序列化为 JSON 并相应返回

Web 可浏览 API 或更新的 URL

Python 的一些更新的 URL 是:

# 谈话网址

从 django.conf.urls 导入模式,URL

urlpatterns = 模式(

'talk.views',

网址(r'^$','家'),

# 接口

url(r'^api/v1/posts/$', 'post_collection'),

url(r'^api/v1/posts/(?P<pk>[0-9]+)$', 'post_element')

)

RESTful API 集成重构

它包括主要的 HTTP 方法,例如-

得到

初始页面加载,显示帖子很重要,为此,您可以添加以下请求:

加载帖子()

// 在页面加载时加载所有帖子

函数 load_posts() {

$.ajax({

url : “api/v1/posts/”, // 端点

type : “GET”, // http 方法

// 处理成功的响应

成功:函数(json){

for (var i = 0; i < json.length; i++) {

控制台.log(json[i])

$(“#talk”).prepend(“<li id='post-“+json[i].id+”'><strong>”+json[i].text+”</strong> – <em>” +json[i].author+”</em> – <span>“+json[i].created+

“</span> – <a id='delete-post-“+json[i].id+”'>删除我</a></li>”);

}

},

// 处理不成功的响应

错误:函数(xhr,errmsg,err){

$('#results').html(“<div class='alert-box alert radius' data-alert>糟糕!我们遇到了错误:“+errmsg+

” <a href='#' class='close'>&times;</a></div>”); // 将错误添加到 dom

console.log(xhr.status + “:” + xhr.responseText); // 向控制台提供有关错误的更多信息

}

});

};

邮政

POST 请求以类似的方式进行管理,您可以通过更新视图来测试这一点。 你可以在views.py中更新post_collection()函数:

@api_view(['GET', 'POST'])

def post_collection(请求):

如果 request.method == 'GET':

帖子 = Post.objects.all()

序列化器 = PostSerializer(posts, many=True)

返回响应(serializer.data)

elif request.method == 'POST':

data = {'text': request.DATA.get('the_post'), 'author': request.user.pk}

序列化器= PostSerializer(数据=数据)

如果 serializer.is_valid():

序列化器.save()

返回响应(serializer.data,status=status.HTTP_201_CREATED)

返回响应(serializer.errors,状态=状态。HTTP_400_BAD_REQUEST)

另请阅读:印度的 Django 开发人员薪水

底线

实际的Django REST framework的 REST 部分非常简单,您所要做的就是更新 post 元素函数以处理请求。 如果您仍有任何疑问,那么有许多 Django REST 框架和资源可用于即兴创作。

如果您有兴趣了解有关 Django 和其他全栈开发人员语言和工具的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发 PG 文凭,该文凭专为在职专业人士设计,提供 500 多个小时的严格培训, 9 个以上的项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

为未来的职业做准备

升级和 IIIT-BANGALORE 的 PG 文凭在全栈软件开发中
今天报名