如何从 Angular 7 访问 Django 方法

How to access a Django method from Angular 7

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

我希望能够访问我的 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 中包含此服务,并在 [=51= 中调用 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)

非常感谢!

创建 API 并使用 angular

发送一些请求

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

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

让我们分解一下。

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

    from django.http import HttpResponse
    from DjangoBackEnd import models
    
    def test_view(request):
        output = models.testMethodFromModelPY()
        return HttpResponse(output)
    
  2. 将您的观点映射到您的 url 文件中。

    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 代码和 Djangos 内部构件中用作参考。您可以阅读有关 urls here.

的更多信息

说你必须修改你的端点:

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

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

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

祝你好运!