Как получить доступ к методу Django из Angular 7 - PullRequest
0 голосов
/ 07 ноября 2018

Я довольно новичок в разработке полного стека, так что это может быть простой вопрос:

Я хочу получить доступ к простому методу в файле models.py моего бэкэнда Django:

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 и вызываю функцию testMethodInConfigServiceTS в config.component.ts :

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)

спасибо большое!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Итак, вы ищете 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. Отобразите свои представления в файле 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-коде и внутренностях Djangos. Вы можете узнать больше о URL здесь .

Сказать, что вам придется изменить конечную точку с:

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

до

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

Взгляните на djangorestframework , который является отличным набором инструментов для приложений, управляемых API, с бэкэндом django.

Удачи!

0 голосов
/ 07 ноября 2018

Создайте API и отправьте несколько запросов с угловым

Django Rest Framework легко и быстро настроить https://www.django -rest-framework.org /

...