【问题标题】:How to access a Django method from Angular 7如何从 Angular 7 访问 Django 方法
【发布时间】:2018-11-07 19:55:16
【问题描述】:

我对全栈开发还很陌生,所以这实际上可能是一个简单的问题:

我希望能够访问我的 Django 后端的 models.py 文件中的一个简单方法:

def testMethodFromModelPY(request, path=''):

    data = {'returnedData': 'whatever'}
    return data

我在urls.py中添加了方法的路径:

from django.urls import path
from DjangoBackEnd import models

urlpatterns = [
    # some other paths here that frontend is able to access #
    path(r'api/v1/', models.testMethodFromModelPY, name='testMethodFromModelPY'),
]

现在,在 Angular 前端中,我在 app 文件夹中创建了一个名为 config 的组件并添加到 config.service.ts

export interface Test {
    returnedData: string;
}

@Injectable()
export class ConfigService {

  constructor(private http: HttpClient) { }

  testMethodInConfigServiceTS() {
    return this.http.get('/api/v1/testMethodFromModelPY/');
  }
}

我在 app.module.ts 中包含这个 Service 并在 config.component.ts 中调用 testMethodInConfigServiceTS 函数:

testMethodInConfigComponentTS() {
    this.configService.testMethodInConfigServiceTS()
      .subscribe(
        (data: Test) => this.test = { ...data }, // success path
        error => this.error = error // error path
      );
  }

config.component.html 中,我尝试使用以下方法访问此方法:

<button (click)="testMethodInConfigComponentTS()">teststuffhere</button>

但是当我点击一个按钮时,我得到了错误消息:

GET http://127.0.0.1:8000/api/v1/testMethodFromModelPY/ 404 (Not Found)

非常感谢!

【问题讨论】:

    标签: django angular httprequest httpclient angular7


    【解决方案1】:

    所以您正在寻找的是angular -&gt; url -&gt; view -&gt; model,但您似乎缺少逻辑中的视图。

    让我们分解一下。

    1. 为您的 django 应用程序添加一个视图。 Django 视图是允许您处理 http 请求的函数和/或类。他们由您的urls 呼叫。你可以阅读更多关于他们的信息here。例如,您的视图可能如下所示:

      from django.http import HttpResponse
      from DjangoBackEnd import models
      
      def test_view(request):
          output = models.testMethodFromModelPY()
          return HttpResponse(output)
      
    2. 在您的 urls 文件中映射您的视图。

      from django.urls import path
      from .views import test_view
      
      urlpatterns = [
          # some other paths here that frontend is able to access #
          path(r'api/v1/', test_view, name='testMethodFromModelPY'),
      ]
      

    这将允许您点击example-domain.com/api/v1/,它将为您提供模型中测试函数的输出。请注意,我没有添加 url 的名称,也就是 name='testMethodFromModelPY',因为它在您的模板 Jinja 代码和 Django 内部中用作参考。你可以阅读更多关于网址here的信息。

    说你必须修改你的端点:

    testMethodInConfigServiceTS() {
      return this.http.get('/api/v1/testMethodFromModelPY/');
    }
    

    testMethodInConfigServiceTS() {
      return this.http.get('/api/v1/');
    }
    

    看看djangorestframework,这是一个很棒的工具箱,适用于带有 django 后端的 api 驱动应用程序。

    祝你好运!

    【讨论】:

      【解决方案2】:

      创建一个 API 并使用 angular 发送一些请求

      Django Rest Framework 设置简单快速 https://www.django-rest-framework.org/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        相关资源
        最近更新 更多