Сервис Angular, вызывающий метод Django для подключения к базе данных MongoDB

Я написал service скрипт в моем Angular приложении, который добавляет информацию о форме потребителя в локальную Json-Server базу данных:

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';

import { Post } from '../models/post.model';

const httpOptions = {
    headers: new HttpHeaders({
        'Content-Type': 'application/json'
    })
}

@Injectable()
export class DbService {

    consumersApiUrl = "http://localhost:3000/consumers";

    constructor(private httpClient: HttpClient) { }

    addConsumer(post: Post): Observable<Post> {
        return this.httpClient.post<Post>(this.consumersApiUrl, post, httpOptions);
    }
}

Это работает идеально...

Сейчас я установил бэкенд Django и базу данных MongoDB. В моем файле settings.py у меня есть подключение к базе данных:

DB_NAME = 'mongodb+srv://User2021:TestPassword@cluster0.j9jz1.mongodb.net/test'

Итак, я добавил новый url и новый метод для записи информации в мою базу данных:

@Injectable()
export class DbService {

    consumersApiUrl = "http://localhost:3000/consumers";

    consumersMongodbApiUrl = "http://localhost:8000/consumers/";

    constructor(private httpClient: HttpClient) { }

    addConsumer(post: Post): Observable<Post> {
        return this.httpClient.post<Post>(this.consumersApiUrl, post, httpOptions);
    }

    addConsumerMongodb(post: Post): Observable<Post> {
        return this.httpClient.post<Post>(this.consumersMongodbApiUrl, post, httpOptions);
    }
}

В MongodbApiUrl, consumers это имя моей базы данных коллекция.

Мой первый вопрос: Должна ли ссылка на реальную базу данных (строку подключения, имя и имя коллекции которой я знаю) быть такой или я должен как-то включить дополнительную информацию имя и т.д.?


Для того чтобы протестировать свою базу данных, я написал следующее в views.py, что работает; то есть я могу видеть, как информация о потребителе появляется на моем MongoDB Compass:

client = MongoClient(settings.DB_NAME)
db_name = client['myDB']
collection_name = db_name["consumers"]

consumer1 = { ... form info blah blah json object ... }

def add_consumer():
    collection_name.insert_one(consumer1)

Я посмотрел несколько примеров и понял, что правильный способ работы с Angular и Django - это то, с чего я начал; т.е. сервисные методы для обработки операций с базой данных, поэтому я написал этот метод Django в моем views.py файле, чтобы увидеть информацию о моем потребителе:

@csrf_exempt
@api_view(['GET', 'POST', 'DELETE'])
def consumer_list(request):
    if request.method == 'GET':
        try:
            print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
            consumers = ConsumerModel.objects.all()
            consumers_serializer = ConsumerModelSerializer(consumers, many=True)

            response = {
                'message': "Got it!",
                'consumers': consumers_serializer.data,
                'error': ""
            }
            return JsonResponse(response, status=status.HTTP_200_OK)
        except:
            error = {
                'message': "Failed!",
                'consumers': "[]",
                'error': "Error"
            }
            return JsonResponse(error, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

и я поместил шаблон url в urls.py:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^consumer_list/', consumer_list),
    url(r'^.*', TemplateView.as_view(template_name="home.html"), name="home")

Когда я вхожу в систему http://127.0.0.1:8000/consumer_list/, я вижу xxxxx в консоли, плюс эта ошибка:

Internal Server Error: /consumer_list/
"GET /consumer_list/ HTTP/1.1" 500 83

Я также получаю {"message": "Failed!", "consumers": "[]", "error": "Error"} на странице, а также GET http://127.0.0.1:8000/consumer_list/ 500 (Internal Server Error) в консоли dev страницы:

enter image description here

Мой второй вопрос: Что я делаю не так? Как мне заставить мои методы сервиса Angular вызывать методы Django для обработки операций с базой данных? Что я здесь упускаю?


p.s. Когда я запускаю python manage.py migrate в моем каталоге backend, я получаю следующую ошибку, что странно, потому что если вы подключаетесь к вашей базе данных MongoDB через pymongo, вы должны удалить секцию DATABASES в вашем settings.py файле, что я и сделал, поэтому я понятия не имею, почему я получаю это:

django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value.

Может ли кто-нибудь помочь мне с этим простым примером записи в базу данных? Работаю над ним уже неделю, безрезультатно...

Вернуться на верх