Как подключить базу данных 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. Вот мой ожидаемый результат (показывающий результат подключения к базе данных):