Django REST Framework 简介:使用示例进行开发
已发表: 2020-10-05Django 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'>×</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 校友身份、实用的实践顶点项目和顶级公司的工作协助。