【问题标题】:difference between django and django rest frameworkdjango和django rest框架的区别
【发布时间】:2022-04-16 18:32:07
【问题描述】:

好的,我刚刚完成了关于 Django 教程的 YouTube 课程,我或多或少地了解了 Django。现在的问题是 Django 休息框架。谷歌说它用于创建 API,但我就是不明白。如果 Django 框架可用于创建 Web 应用程序,那么 Django REST 框架在 Web 应用程序开发方面可以用来做什么。通过这个问题,我的意思是 Django 框架是您创建 Web 应用程序所需要的全部内容,还是需要将其添加到其余框架中? Web 应用程序和 API 之间有什么联系? Web 应用程序是否需要 API 才能运行?我会很感激对两者之间的区别以及它们如何相互连接的简单解释。谢谢。

【问题讨论】:

  • API 通常用于对进程发出请求。例如,如果您的 Django 站点将显示天气预报,您可以创建一个 API,允许其他程序提取天气预报数据,并将这些数据集成到另一个应用程序中,例如通过电子邮件向附近的人发送警告。
  • 或者另一个例子可能是每次你在 slack 中输入一些提醒时,它都会向 API 发出 POST 请求以将通知放入日历中。
  • 感谢您的回复。所以我从您的解释中得到的是,在您完成创建 Web 应用程序之后。您必须创建/连接 API 到 Web 应用程序,以便其他应用程序可以从您自己的应用程序获取信息?

标签: python django api rest django-rest-framework


【解决方案1】:

当我第一次了解 Django 和 Django Rest Framework 时,我曾经在工作中向我的前辈提出过同样的问题。

我得到的答案是 Django Rest Framework 帮助您更快地创建 API 端点,就像带有示例代码的 cmets 之一一样。我建议您阅读 J. Hesters 和 C S here 的 cmets。但是,我对答案也并不完全满意。与他们合作了一段时间后,我的想法如下:

从技术上讲,让我们忘记 Django Rest Framework。您可以仅使用 Django 构建功能齐全的 Web 应用程序,而无需使用任何前端框架,例如 React、Angular 等。这样做,您已经将 Django 用于后端和前端。实际上,这样做,您没有后端和前端的概念。您的网络应用就是您的网络应用,仅此而已。

但是,如果您希望前端看起来带有复杂的 CSS 装饰,您可能需要考虑使用前端框架(React、Angular)。当然,你也可以单独使用 Django 来让你的前端看起来很花哨,但是你必须编写很多代码才能做到这一点,而且与前端框架相比,Django 模板并不常用。

现在,假设您要使用前端框架。如果您没有 REST API,并且您的前端代码尝试从您的一个 URL 请求数据,您将获得一个字符串数据或一个 HTML 页面,就像您使用 curl 获得的一样,获得它没有用前端的数据。但是,如果您有 REST API,您的后端数据将以您的前端代码可以理解的方式进行序列化,并将返回的数据反序列化为一些数据对象,例如您可以直接使用的字典。

现在,Django 与 Django Rest 框架。您可以单独使用 Django 来制作 REST API,但您必须编写更多代码并进行更多设计,例如上面示例中显示的评论之一。通过使用 Django Rest Framework,您可以编写更少的代码并更好地重用您的代码。

另外,我认为您可能想了解 API 与 REST API 之间的区别。它们可以互换使用,但它们并不相同。例如,当您使用 Django 时,您正在使用 Django API。 REST(ful) API 只是一种 API,用于客户端-服务器 Web 开发。

此外,库和 API 相似但不相同。

【讨论】:

    【解决方案2】:

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

    Django Rest Framework 使您可以轻松地将 Django 服务器用作 REST API。

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

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

    常规:

    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,您可以轻松列出和创建视图以及身份验证。

    【讨论】:

    • 谢谢,我现在明白了,如果您的网络应用程序将有 api,最好将 django 和 django rest 一起使用。你能给我一个例子,说明 api 可以为你的 web 应用程序做什么吗?就像我知道它是可取的,它可以帮助您从世界各地的其他服务器获取信息,但没有人给我一个真实世界的例子,说明 API 在应用程序中的使用位置和方式。
    【解决方案3】:

    Django 是基于 python 构建的 Web 服务器,而 django-rest 是 django 服务器的包。如果您只使用 django 而不使用 django rest 框架,很可能您将通过“服务器渲染”创建站点,但如果您在 django 应用程序中使用 django-rest,您将创建稍后将由其他前端使用的 api,例如 react或 vue。

    【讨论】:

      【解决方案4】:

      学习django后为什么需要django REST framework? 我认为这对您来说是完美的答案;传统的 Django 可以完成这项工作,但是 django REST 框架专注于构建 API,这给它带来了很多额外的优势。如果您考虑一个传统的 django 应用程序,那么将后端与前端分开是非常困难的(几乎不可能)。 API 有助于将前端与后端分开。考虑到 JavaScript 前端库(React、Vue、Angular 等)的快速变化。这种将后端与前端分离的方法可以说更具前瞻性,因为任何 JavaScript 前端都可以使用后端 API。当当前的前端框架在未来几年最终被更新的框架取代时,后端 API 可以保持不变。不需要大的重写。 其次,一个 API 可以支持为不同目的使用不同语言和框架编写的多个前端。它可以被用 Java 或 (flutter+dart) 编写的移动前端、用任何 JavaScript 框架编写的 Web 前端,甚至用 Swift 编写的 iOS 应用程序使用。这在传统的单体 django 方法中是不可能的,但是在 django REST 框架中这是非常可能和容易的。

      【讨论】:

        【解决方案5】:

        Django 创建包含网页的网站,而 Django REST Framework 构建允许通过万维网传输数据的 Web API。

        【讨论】:

        • 所以最终所有网站和网络应用程序都需要一个 API 来连接互联网上的其他应用程序?
        • 差不多。 API 就像一个后门,可以非常轻松地从站点收集数据。但是,不需要专门使用 API。您还可以根据需要进行网络抓取。
        • yes ... Web API 允许其他应用程序访问数据并与网站交互
        • 谢谢。只是为了确保我理解。如果我使用 django 制作一个应用程序,以便在您按下按钮时为您提供天气更新。我可以将应用程序连接到以前存在的 API,以便当用户按下按钮时,我的应用程序会从运行 API 的服务器获取信息?基本上我可以将所有信息放在我自己的服务器上,但如果我使用 API 从另一台服务器获取它会更容易
        • 最简单的API 可以理解为允许用户轻松进行CRUD 的规范 - 从您的django 应用程序中创建、读取、更新、删除数据。 Django 为您提供构建模型业务逻辑的框架 - 用户管理等。Django rest 框架是 django 的插件,用于正确管理模型数据(CRUD)并为client 打开网关以使用endpoints 对其进行操作,例如. /users/<username> 可以是 url,您可以在其中发送带有数据的 put 请求以更新特定用户。客户端基本上是网络浏览器客户端和android/ios应用程序客户端。
        猜你喜欢
        • 2019-07-09
        • 2015-08-07
        • 2015-01-04
        • 2017-12-19
        • 1970-01-01
        • 1970-01-01
        • 2014-04-21
        • 2015-04-26
        相关资源
        最近更新 更多