Как создать подключение к базе данных с помощью REST API в Django?

В настоящее время я пытаюсь сделать Database Connection с Django REST API.

Цель <цель: Создать API для соединения с любыми базами данных путем ввода свойств (например, host, dbname, username, password, etc) .

Я уже пробовал использовать метод GET для подключения и получения вывода. Однако, все свойства DB записаны в скрипте. Вот мой результат при использовании GET:

enter image description here

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

enter image description here

Проблема заключается в следующем: Я не знаю, как модифицировать его в метод 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 файлах, чтобы получить такой вывод? Извините, если я написал длинный пост. Любой совет или решение будут приняты с благодарностью. Пожалуйста, не стесняйтесь также указывать на любые связанные статьи. Спасибо.

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