【问题标题】:How can I call the api in template [closed]如何在模板中调用 api [关闭]
【发布时间】: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,然后在模板中渲染...从模板中渲染它不是最佳做法。

标签: html django api django-rest-framework microservices


【解决方案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 视图、普通视图和任何其他服务功能中重复使用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2012-10-05
      相关资源
      最近更新 更多