热门标签:
Q:

Django或Django Rest框架

我在Django中制作了某个应用程序,我知道Django Rest框架用于构建Api。 但是,当我开始在他们的网站上阅读Django Rest框架时,我注意到API Guide中的每一件事(如请求,响应,视图等)。)声称它优于Django(请求,响应,视图等。).

我不明白的是这些Api是否会取代我现有的Django模型,视图等。 或者我如何在现有的Django代码中以不同的方式使用它们?

我对Django非常熟悉,但即使在花费一些时间之后,也无法准确理解Django Rest框架是什么。 (我知道它用于Api。)另外,我真的需要一个API吗? 我的应用程序能够在没有API的情况下将数据发送到服务器,那么在什么情况下我需要API?

原网址
A:

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

REST代表"representationalstatetransfer",API代表applicationprogramminginterface。

您可以使用常规Django构建restful api,但这将非常繁琐。 DRF让一切变得简单。 为了比较,这里是使用普通Django的简单GET-view,以及使用Django Rest框架的简单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,您可以轻松地拥有列表和创建视图以及身份验证。

所有回答

共 9 条

author avatar

您是否需要api取决于您想要做什么。 例如,如果你想从移动设备和web应用程序访问Django模型中的所有内容,你会想要使用DRF。

为什么? 考虑一下您正在开发一个用户可以登录的iOS应用程序,并且您希望使用Django作为后端。 如果你也想有一个网站,他们可以用它来改变他们的应用程序的配置文件信息(比如更新他们的电子邮件地址或上传图片),你需要一种方法来与Ios设备的网站共享Django模型中的信息。 这怎么能做到呢? 通过让用户能够通过简单地告诉它一个url来创建/读取/更新/删除数据。 现在,如果您想从模型中访问信息,则可以从多个设备中执行此操作,因为任何设备都可以访问url。

但是,如果你只是构建一个简单的webapp/网页并将其全部保存在一个地方,你可以直接使用django。

旁注:这是一个非常流行的观点,你应该尝试尽可能地将你的前端与后端分开。 在这种情况下,如果你想使用一些前端开发框架,如React,Angular或Vue,那么尝试将所有这些资源包含在Django模板页面中会变得混乱,即使你只想要一个简单的web 在这种情况下,您将使用DRF设置后端,只需使用axios等工具从前端访问url即可。 在这种情况下,您的前端可能托管在类似Node的东西上。

再次,您决定使用的内容实际上取决于您想要从应用程序/网站中获得什么以及您对每个工具的舒适程度。

author avatar

DRF的基本目的是提供Api。 Api是应用程序中的接触点。 想象一个项目,你有一个Django向导,你的团队中有人是JavaScript专家,你想开发移动应用程序。 JavaScript专家谈论web元素和线程,Django专家谈论模板和ORM,现在呢? API是你的答案。 让Django wiz给出Api和JSON,让JavaScript wiz做他的前端魔术。 我能想到的最简单的答案。

author avatar

用简单的话来说,

Django:它为标准web应用程序提供功能

Django Rest Framework:它提供了构建标准REST API的功能。

author avatar

旧学校使用Jinja2与html5,css3,但是当单页应用程序流行时,这变得不方便。API有助于为前端程序员提供更方便的信息。 你不再和前端一起工作了。 API在作为Web应用程序开发以及为手机开发应用程序时非常方便。

author avatar

让我们总结一下,

Django

与Django模板紧密耦合。

Django Rest Framework

打开使用REST Api构建我自己选择的视图。

author avatar

这里有一个链接,可能会给你一些关于你正在寻找的东西的见解。 这解释了django应用程序如何转换为Django Rest服务,也解释了REST服务实际上是什么

https://opensourceforu.com/2017/11/converting-django-app-rest-api/

author avatar

简单地说:使用Django,您可以创建服务器端渲染的网站;使用DRF,您可以使用vuejs或react前端部分创建Spa。

author avatar
  1. 你真的需要Api吗? 这取决于您的需求和资源。 如果你只需要一个web应用程序,那么django提供了你所需要的一切 开发web应用程序。 如果您需要开发移动 将与后端服务器通信的应用程序,然后您 将不得不实现Api。 如果你有远程物联网设备, 需要将其数据发布到您的服务器,您将需要Api。 如果 你擅长前端应用程序开发,移动应用程序 开发和物联网应用开发,或者你有资源来 拥有独立的前端、后端、移动和物联网应用团队 开发那么将后端和后端分开是很好的设计 前端应用程序。 为了实现这种分离,您的后端将 基于api,您的前端,移动和物联网应用程序将通信 与您的后端使用您的后端api。 有了这个设计,任何 后端的变化将对您的其他应用程序产生最小的影响。

  2. 这些Api会取代你现有的Django模型吗? 理想情况下,它不应该,但我不确定使用drf是否会改变你的django模型。 我还没有使用drf来实现api。 但是如果你只是使用django来实现你的api,它肯定不会改变你的模型。 您只需要定义您的api url和api视图。

  3. 您是否需要像drf这样的外部软件包来实现Django中的api端点? 非也。. 您可以使用纯Django框架轻松实现Api端点。

  4. 使用纯Django实现api的简单方法。

    定义您的api url -

    urlpatterns = [   
        path('get_all_user/',UserApiView.as_view(),name='get_all_user'), 
    ]
    

    定义您的视图

    @method_decorator(csrf_exempt,name='dispatch') 
    class UserApiView(View):
    
        def post(self, request):
            response_data = {}
            json_data = json.loads(request.body)
            response_data['user'] = YourMethodToGetModelData(json_data)
            return JsonResponse(response_data)
    

<img alt="在这里输入图像描述"src="https://i.stack.imgur.com/WwebT.jpg缧/>

author avatar

你可以使用django构建一个完整的web应用程序,那么api有什么需要呢?

让我们举一个例子,假设一开始你使用django为你的创业公司构建了一个网站。 你的网站越来越受欢迎,为了更容易在Android中访问,你想建立一个移动应用程序。 那么你打算维护一个单独的数据库吗? 不,因为不仅难以维护,而且迁移旧数据也是一件令人头疼的事情。 所以在这里django rest框架发挥作用。 您可以设置android应用程序使用的api,因此必须针对多个应用程序维护单个数据库。

相似问题