Django和Django Rest Framework之间的区别

11
我刚刚完成了一个关于Django教程的YouTube课程,对Django有一定的理解。现在问题是Django rest framework。谷歌说它用于创建API,但我就是不明白。如果Django框架可以用来创建Web应用程序,那么Django rest framework在Web应用开发方面有什么用途呢?我的意思是,只使用Django框架是否足以创建一个Web应用程序,还是需要添加rest framework?Web应用和API之间有什么联系?一个Web应用是否需要API才能运行?我希望能简单解释一下这两者之间的区别以及它们之间的关联。

API通常用于请求某个过程。例如,如果您的Django网站将显示天气预报,您可以创建一个API,使其他程序可以获取天气预报数据,并将其集成到另一个应用程序中,例如向附近居民发送电子邮件警告。 - Willem Van Onsem
另一个例子可能是,每次您在 Slack 中键入一些提醒时,它都会向 API 发送 POST 请求,将通知放入日历中。 - Willem Van Onsem
谢谢您的回复。所以,根据您的解释,我得出的结论是,在创建完您的 Web 应用程序之后,您必须创建/连接 API 到 Web 应用程序,以便其他应用程序可以从您自己的应用程序获取信息? - gerard
7个回答

18
你的问题和我在学习Django和Django Rest Framework时向我的前辈提出的问题一样。他告诉我,Django Rest Framework可以帮助你更快地创建API端点,就像其中一个评论中的示例代码一样。我建议你阅读J. Hesters和C S这里的评论。然而,我对这个答案并不完全满意。在使用它们一段时间后,以下是我认为的内容:
从技术上讲,我们先不考虑Django Rest Framework。你可以只使用Django来构建一个完全功能的Web应用程序,而不使用任何前端框架,例如React、Angular等。这样做,你已经将Django用于后端和前端。实际上,这样做,你就没有后端和前端的概念了。你的Web应用程序就是你的Web应用程序,仅此而已。
然而,如果你想让你的前端看起来花哨一些,具有复杂的CSS装饰,你可能需要考虑使用前端框架(React、Angular)。当然,你也可以单独使用Django来使你的前端看起来花哨,但你必须写很多代码来做到这一点,而且Django模板并不像前端框架那样普遍使用。
现在,假设你想使用一个前端框架。如果你没有REST API,而你的前端代码试图从你的URL中请求数据,你将获得一个字符串数据或一个HTML页面,就像使用curl一样,这对于你的前端来说是没有用的。然而,如果你有一个REST API,你的后端数据将被序列化成你的前端代码可以理解和反序列化返回的数据对象(如字典)。
现在,Django vs Django Rest Framework。你可以只使用Django来制作REST API,但你需要编写更多的代码和设计,就像以上评论中的示例所示。通过使用Django Rest Framework,你可以编写更少的代码并更好地重用你的代码。
此外,我认为你可能想了解API与REST API之间的区别。它们通常是可以互换使用的,但它们并不相同。例如,当你使用Django时,你正在使用Django API。REST(ful) API仅是API类型之一,用于客户端-服务器Web开发。
另外,库和API类似但不相同。

6

Django是Python中的Web开发框架,而Django Rest Framework是用于构建Rest API的Django库。Django Rest Framework特别设计用于使CRUD操作在Django中更易于设计。

Django Rest Framework使得将您的Django服务器用作REST API变得容易。

REST代表“表现层状态转移”,API代表应用程序编程接口。

您可以使用常规的Django构建restful api,但这将非常繁琐。DRF使一切变得简单。为了比较,这里有一个仅使用普通Django的简单GET-view和一个使用Django Rest Framework的简单GET-view:

普通的:

from django.core.serializers import serialize
from django.http import HttpResponse


class SerializedListView(View):
    def get(self, request, *args, **kwargs):
        qs = MyObj.objects.all()
        json_data = serialize("json", qs, fields=('my_field', 'my_other_field'))
        return HttpResponse(json_data, content_type='application/json')

使用DRF,这变成了:

from rest_framework import generics


class MyObjListCreateAPIView(generics.ListCreateAPIView):
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    serializer_class = MyObjSerializer

注意,在DRF中,您可以轻松地拥有列表和创建视图以及身份验证。

谢谢,我现在明白了,如果你的Web应用程序将具有API,则更建议同时使用Django和Django Rest。您能否举个例子说明API对于Web应用程序会做什么?就像我知道它是可取的,并且可以帮助您从世界各地的其他服务器获取信息,但没有人给我一个真实世界的例子,说明API在应用程序中如何使用。 - gerard

2
这是适合您的完美答案:Django REST框架专注于构建API,这使得它比传统Django具有许多额外的优势。
只使用Django也可以构建API,但使用Django Rest Framework会更加容易。
API很重要,因为它们帮助我们构建一个与前端完全独立的后端。如果你考虑一个传统的Django应用程序,你会意识到前端和后端在某种程度上是相互关联的,形成了网站/网络应用。 假设你想要一个移动应用或桌面应用,而不是一个网页应用/网站,你会怎么做?API被用来实现这一点。
一个API可以支持使用不同语言和框架编写的不同目的的不同/多个前端。它可以支持使用Java或Flutter编写的移动前端,任何JavaScript框架(React、Angular、Vue)编写的Web前端,甚至使用Swift编写的iOS应用。
通过拥有一个单独的后端/API,您可以通过创建自己的前端并将其与API集成来随时使用它来创建所需类型的应用程序。

明白了。最好的解释。 - undefined

1

回答你的问题,让我们逐个来看:

"Django框架是创建Web应用程序所需的全部还是需要添加到其他框架中?"

Django框架足够了,在Web应用程序的上下文中,它是创建一个Web应用程序所需的全部。Rest框架,例如Django Rest Framework,是一个库,可以在构建REST API时简化操作。

"Web应用程序和API之间有什么联系?"

要回答这个问题,最好先了解一下API是什么。简单来说,将API视为定义其他应用程序如何使用你的应用程序的一组规则的接口。这些规则以端点(URI)的形式呈现,可以向其发送请求以获取某些数据。你可以在这里找到有用的资源 link。 Web应用程序可以以REST API的形式呈现,以提供特定的数据(位置数据、支付处理等),这些数据可以被其他应用程序消费。例如,PayPal的API可以集成到应用程序中进行支付处理。

前端框架可以用于向API端点发出请求,以呈现所请求数据的前端界面。这利用了关注点分离原则(前端和后端)。

Web应用程序需要API才能正常运行吗?

我能给出的最好答案是:这取决于情况。 考虑以下场景: 假设您正在构建一个处理物流和交付的应用程序,您会为您的物流应用程序重新构建“地图”功能,还是您会使用Google Maps API来处理您应用程序中的地图功能。

简而言之,应用程序可能需要或不需要API才能正常运行,这取决于架构。


1
Django框架是一种后端开发框架,用于开发渲染到网页的后端应用程序,而Django rest框架是API,为其他前端应用程序提供服务器数据,而无需考虑后端。一个很好的场景是银行应用程序想要获取账户余额,它将查询Django rest API以获取数据或提交数据。 Django API的原因是为其他可能需要数据以进行平稳操作的外部应用程序提供数据。

1
Django是Python编写的Web服务器,而django-rest是适用于Django服务器的软件包。如果您只使用Django而不使用Django Rest框架,则很可能会通过“服务器渲染”创建站点,但如果您在Django应用程序中使用Django Rest,则将创建稍后由其他前端(如React或Vue)消耗的API。

-1

Django创建包含网页的网站,而Django REST框架用于构建Web API,允许在全球范围内传输数据。


所以说,最终所有的网站和网络应用程序都需要一个API来连接互联网上的其他应用程序? - gerard
基本上是这样的。API 就像一个后门,允许从网站中轻松收集数据。但是,并不一定需要专门使用 API。您也可以进行网页抓取以获取所需内容。 - A random coder
是的,Web API允许其他应用程序访问数据并与网站进行交互。 - omar ahmed
谢谢。只是为了确保我理解。如果我使用Django制作一个应用程序,当您按下按钮时提供天气更新,我可以将应用程序连接到先前存在的API,以便当用户按下按钮时,我的应用程序从运行API的服务器获取信息?基本上,我可以将所有信息放在自己的服务器上,但如果使用API从另一个服务器获取信息会更容易。 - gerard
最简单的API可以理解为规范,允许用户轻松地从您的django应用程序中创建、读取、更新、删除数据。Django本身提供了一个框架,您可以在其中构建模型业务逻辑-用户管理等。Django rest framework是django的插件,用于正确管理这些模型数据(CRUD),并为客户端打开网关以通过使用端点来操作它,例如/users/<username>可以是您可以发送put请求以更新特定用户数据的URL。客户端基本上是Web浏览器客户端和Android / iOS应用程序客户端。 - mon io

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接