Как подключить базу данных Postgres к Django и показать результат на HTML?

Я новичок в Django. Сейчас я хочу сделать простое веб-приложение, используя Django и Postgre SQL (localhost). Сейчас я хочу показывать результат соединения ("успешно/не успешно") на HTML странице и получать данные из БД используя rest API (следующая задача).

Вот структура моего проекта:

C:.
├───DBD
│   └───__pycache__
├───demopage
│   ├───migrations
│   │   └───__pycache__
│   ├───templates
│   └───__pycache__
├───restapi
│   ├───migrations
│   │   └───__pycache__
│   └───__pycache__
└───src
    └───__pycache__

Я создаю модуль подключения к БД DbLoader.py в папке src.

import psycopg2 
import json

class DbLoader:

    def __init__(self, host, port, dbname, user, password):
        
        # postgres
        self.host = host
        self.port = port
        self.dbname = dbname
        self.user = user
        self.password = password

    def connectDB(self):
        
        # connection information
        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 connection
        print(conn)
        self.db = psycopg2.connect(conn)
        self.cur = self.db.cursor()
    
    def view_connDB(self):

        sql = 'SELECT VERSION()'        
        self.cur.execute(sql)
        result = self.cur.fetchone()
        self.db.close()

        # return connection result and show in HTML !
        return result

    def view_table(self):
        
        sql = """SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"""
        self.cur.execute(sql)
        result = self.cur.fetchall()
        
        cols = ('tbl_name',)
        tbl_list = []

        if len(result) == 0:
            print('There is no data')
        else:
            for rows in result:
                tbl_list.append(dict(zip(cols, rows)))

        # return json output and show in HTML !
        return json.dumps(tbl_list)

Я уже установил свои приложения и установил настройки db под settings.py:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'src',
    'restapi.apps.RestapiConfig',
    'demopage.apps.DemopageConfig',
]

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'djangodb',
        'HOST': 'localhost',
        'PORT': '',
        'USER': 'postgres',
        'PASSWORD': '1234',
    }
}

Я создал demoapp\urls.py:

from django.urls import path
from demopage.views import mapping

app_name = 'demopage'

urlpatterns = [
    path('mapping/', mapping.as_view(), name='mapping')
]

Это моя demopage\views.py

from django.shortcuts import render
from django.views.generic import TemplateView
from rest_framework import status, views
from rest_framework.response import Response
from src import DbLoader as dl 

# Create your views here.

class mapping(views.APIView):

    def post(self):
        try:

            x = dl.DbLoader(host='localhost', port='', dbname='djangodb', user='postgres', password='1234')
            x.connectDB()

            output = x.view_connDB()
            return Response(output)

        except Exception as e:
            return Response(str(e), status=status.HTTP_400_BAD_REQUEST)

demoapp\templates\index.html

<!DOCTYPE html>
<head>
    <title>Configure Postgres SQL and Display</title>
</head>
<body>
    <h1>Retreive Data from Database</h1>
    <h2>Show Data from Database using Django</h2>

    <!-- Show the result here ! -->
    <p>Connection established to:  ('PostgreSQL 12.7, compiled by Visual C++ build 1914, 64-bit',)</p>
    
</body>

Однако я не знаю, как показать результат на HTML-странице. Как я могу показать результат?

  • Что делать с файлами demoapp\views.py?
  • Как показать вывод с помощью demoapp\templates\index.html?

Я знаю, что это вроде как базовый вопрос, но я действительно хочу научиться на нем. Я буду очень признателен, если вы подскажете мне решение или дадите какие-нибудь ссылки. Спасибо

Вы можете получить доступ к проекту на Github. Вот мой ожидаемый результат (показывающий результат подключения к базе данных):

enter image description here

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