如何从Angular 7访问Django方法



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

我希望能够访问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前端中,我在应用程序文件夹中创建了一个名为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中,并调用config.component.tstestMethodInConfigServiceTS函数:

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)

非常感谢!

所以您要查找的是angular -> url -> view -> model,但您的逻辑中似乎缺少视图。

让我们把它分解一下。

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

    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代码和Django内部用作参考。你可以在这里阅读更多关于url的信息。

说你必须修改你的终点:

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

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

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

祝你好运!

制作一个API并发送一些带有角度的请求

Django Rest框架易于快速设置https://www.django-rest-framework.org/

最新更新