Как создать подключение к базе данных с помощью REST API в Django?
В настоящее время я пытаюсь сделать Database Connection
с Django
REST API
.
Цель <цель: Создать API для соединения с любыми базами данных путем ввода свойств (например, host, dbname, username, password, etc) .
Я уже пробовал использовать метод GET
для подключения и получения вывода. Однако, все свойства DB записаны в скрипте. Вот мой результат при использовании GET
:
Теперь я хочу модифицировать его в метод POST
для подключения и получения вывода. (Кажется, что пользователь предоставляет входные данные). Мой ожидаемый результат таков:
Проблема заключается в следующем: Я не знаю, как модифицировать его в метод POST
(запрос JSON) и получить желаемый результат (ответ JSON), как я упоминал на рисунке выше.
Файл MyApp\src\DBConn.py
:
import psycopg2
class DbConnection:
def __init__(self, host, port, dbname, user, password):
self.host = host
self.port = port
self.dbname = dbname
self.user = user
self.password = password
def create_conn(self):
# connection string
conn = 'host = {host} port = {port} dbname = {dbname} user = {user} password = {password}'.format(
host = self.host,
port = self.port,
dbname = self.dbname,
user = self.user,
password = self.password
)
# establish the connection
self.db = psycopg2.connect(conn)
self.cursor = self.db.cursor()
def check_conn(self):
sql = "SELECT VERSION()"
self.cursor.execute(sql)
result = self.cursor.fetchone()
self.db.close()
return result
Файл MyApp\DbConnection\views.py
:
from django.shortcuts import render
from rest_framework import views, status
from rest_framework.response import Response
from rest_framework.parsers import JSONParser
import src.DbConn as dc
# Create your views here.
# Build DB Connecntion API
class ConnectionAPI(views.APIView):
# GET
def get(self, request):
try:
# define DB connection string
x = dc.DbConnection(host='localhost', port=5432, dbname='djangodb', user='postgres', password='1234')
x.create_conn()
data = x.check_conn()
result = {
'data': {},
'server' : f'Connection established from {data}',
'driver' : {},
'message' : 'Success !'
}
return Response(result, status=status.HTTP_200_OK)
except Exception as e:
return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
# POST
def post(self, request):
try:
result = 0
return Response(result, status=status.HTTP_200_OK)
except Exception as e:
return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
Файл MyApp\DbConnection\models.py
:
from django.db import models
from django.db.models.deletion import ProtectedError
# Create your models here.
class DBCredential(models.Model):
# DB connection properties
id = models.CharField(max_length=10, primary_key=True)
hostname = models.CharField(max_length=20, blank=False, default='')
port = models.IntegerField(blank=False, default='')
username = models.CharField(max_length=100, blank=False, default='')
password = models.CharField(max_length=100, blank=False, default='')
database = models.CharField(max_length=50, blank=False, default='')
schema = models.CharField(max_length=50, default='Public')
Файл MyApp\DbConnection\serializers.py
:
from rest_framework import serializers
from .models import DBCredential
class DBCredentialSerializer:
class Meta:
model = DBCredential
fields = ('id', 'name', 'provider', 'hostname', 'port', 'username', 'password', 'database')
Что нужно сделать в моих views, models, and serializers
файлах, чтобы получить такой вывод?
Извините, если я написал длинный пост. Любой совет или решение будут приняты с благодарностью. Пожалуйста, не стесняйтесь также указывать на любые связанные статьи. Спасибо.