Найти - Пользователи
Полная версия: Просмотр базы
Начало » Python для новичков » Просмотр базы
1 2 3
Anshlag
В интернете полно примеров как на Питоне подключиться к базе, а как результаты запроса вывести в html через CGI, например? Помогите с примером, пожалуйста.
py.user.next
Сделай функцию, которая возвращает строки html-страницы, а потом в CGI-скрипте просто вызови её и выведи строки по очереди.

Вот текст страницы целиком
  
>>> def get_page(text):
...     out = """\
... <html>
... <body>
...   <p>{0}</p>
... </body>
... </html>
... """.format(text)
...     return out
... 
>>> print(get_page('Hello, world!'), end='')
<html>
<body>
  <p>Hello, world!</p>
</body>
</html>
>>>
Но надо сделать то же самое построчно, чтобы память не грузить.
Anshlag
Попытался вывести значение из таблицы, в консоли оно подставляется, а в браузере почему-то нет, в исходнике html обрывается на теге <body>, почему так?

import sqlite3
conn = sqlite3.connect('my.db')
c = conn.cursor()
def selpad():
c.execute('SELECT * FROM pad where id=1')
row = c.fetchone()
while row is not None:
print("id:"+str(row[0]))
out = ("id:"+str(row[0]))
row = c.fetchone()
return out

print("Content-type: text/html")
print()
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print("<h2>Entered Text Content is %s</h2>" % selpad())
print ('<body>')
print ('</html>')

c.close()
conn.close()
py.user.next
Anshlag
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print("<h2>Entered Text Content is %s</h2>" % selpad())
print ('<body>')
print ('</html>')
Неправильный html-код, тег body не закрыт.
Anshlag
Сейчас вообще пустая страница. Если убрать запрос к базе, а оставить только out='1', то на странице отображается строка, а если с базой, то отрабатывает только в консоли

import cgi, cgitb, sqlite3
conn = sqlite3.connect('my.db')
c = conn.cursor()
def selpad():
c.execute('SELECT * FROM pad where id=1')
row = c.fetchone()
while row is not None:
# print("id:"+str(row[0])+" Наименование: "+str(row[1]) +" | Цена: "+str(row[2]) +" | Кол-во: "+str(row[3]) +" | Дата: "+str(row[4]))
row = c.fetchone()
out = '1'
return out

test = (selpad())
print("Content-type: text/html")
print()
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print("<h2>Entered Text Content is %s</h2>" % test)
print ('</body>')
print ('</html>')
py.user.next
Anshlag
а если с базой, то отрабатывает только в консоли
Нужно убедиться, что сервер имеет доступ к файлу базы и может её открывать.
Anshlag
В консоли то открывает, вот вывод:

Content-type: text/html

<html>
<head>
<title>Hello Word - First CGI Program</title>
</head>
<body>
<h2>Entered Text Content is 1</h2>
</body>
</html>
>>>
Anshlag
Если закомментировать обращение к базе, то работает и в браузере, а с базой - нет

import cgi, cgitb, sqlite3
conn = sqlite3.connect('my.db')
c = conn.cursor()
def selpad():
# c.execute('SELECT id FROM pad where id=1')
# row = c.fetchone()
# while row is not None:
# print("id:"+str(row[0])+" Наименование: "+str(row[1]) +" | Цена: "+str(row[2]) +" | Кол-во: "+str(row[3]) +" | Дата: "+str(row[4]))
# row = c.fetchone()
out = '1'
return out

test = selpad()
print("Content-type: text/html")
print()
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print("<h2>Entered Text Content is %s</h2>" % test)
print ('</body>')
print ('</html>')
py.user.next
Anshlag
В консоли то открывает, вот вывод:
Кто открывает? Сервер имеется в виду не комп, а программа на компе, в которой выполняется cgi-скрипт. Она обычно выполняется под другим пользователем и может не иметь доступа к скрипту (к директории или на файле права могут быть неправильные). Также файл, который используется скриптом, нужно тоже проверять на доступ.

Чтобы проверить доступ, надо посмотреть это всё или использовать
sudo -u имя_пользователя_сервера путь/script.py

Ещё логи сервера есть, где тоже пишется информация, если есть какая-то ошибка.
Anshlag
py.user.next

У меня винда, сервер питоновский на том же компе, запускается таким скриптом

from http.server import HTTPServer, CGIHTTPRequestHandler
server_address = ("", 8080)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB