如何在模板中调用 api [关闭]

Posted

技术标签:

【中文标题】如何在模板中调用 api [关闭]【英文标题】:How can I call the api in template [closed] 【发布时间】:2021-12-06 22:16:45 【问题描述】:

如何在django模板中调用rest api。我想设计微服务,只是想在前端调用一个api。我怎么能做到这一点。

通常当我在单片机中工作时,我会直接从 html 中的数据库调用它,但在微服务部分中则不会。

【问题讨论】:

Django 是一个 MVT 框架。即模型、视图、模板。所有的业务逻辑都应该写在 View 中。不应为此使用模板。这是实现微服务的好资源。 Implementing Microservices on AWS。有关更好的软件开发的更多信息,12 factor app 是一个很好的资源。 我正在设计一个微服务 Django 应用程序,我正在分别创建两个应用程序,它们相互通信以获取数据,并且有一个前端部分我将链接这两个应用程序。在这种情况下,我怎么能将它渲染到模板?我是否需要将 api 放入视图 n 然后将其渲染到模板。有什么方法可以实现吗? 是的,您必须从视图中调用 API,然后在模板中渲染...从模板中渲染它不是最佳做法。 【参考方案1】:

如果您想从您的模板调用 Django API,那么您可以使用 AJAX。您可以从以下代码中获取参考并将其添加到您的 HTML 模板中

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
   $.ajax(
  type: 'GET',
    dataType:"json",
  url: 'https//yourendpoint/api/',
  success: function (data, status, xhr) 
    console.log('data: ', data);
    //your logic
  
);
</script>

更多详情,您可以查看link。可以使用 jquery 或 js 来实现。

【讨论】:

【参考方案2】:

您需要分离您的核心逻辑,以便您可以从您的视图中调用您从 API 中调用的相同逻辑。为了说明这一点,

models.py

class MyModel(db.Model):
   attr_1 = ...
   attr_2 = ...

   def add_x_y(self, x, y):
      return x + y

由于您的逻辑存在于作为 MVT 结构基础的模型中,因此您可以在任何您喜欢的地方使用定义的逻辑。例如

api/views.py

def some_api_function():
   x = 1
   y = 3
   result = 'result': MyModel.add_x_y(x,y)
   return json_response(result)

views.py

def some_template_function():
   x = 1
   y = 3
   result = 'result': MyModel.add_x_y(x,y)
   return render_to_response(tempalate.html, 'result': result)

当您将逻辑分离到应用程序的底层时,您可以在 api 视图、普通视图和任何其他服务功能中重复使用。

请忽略语法,这只是示例使用。

【讨论】:

以上是关于如何在模板中调用 api [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何在加载页面之前从 Api 获取数据 [关闭]

什么是 OAuth,它如何保护 REST API 调用? [关闭]

Angular 5 - 当用户关闭浏览器窗口时如何进行 API 调用?

如何在不使用 curl 和 guzzle 的情况下从控制器 Laravel 调用 API,因为它不起作用 [关闭]

我如何知道调用了哪个 Windows API 版本? [关闭]

如何从 GraphQL API 调用中获取 JSON 对象元素? [关闭]