Сервис 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 страницы:
Мой второй вопрос: Что я делаю не так? Как мне заставить мои методы сервиса 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.
Может ли кто-нибудь помочь мне с этим простым примером записи в базу данных? Работаю над ним уже неделю, безрезультатно...