Форум сайта python.su
0
Доброе время суток всем!
Сразу хотел бы сказать,что опыта с web и работы c python'oм на уровне начинающего, но уже разобрался как работать из питона с MS SQL и Oracle 11G-но в виде просто консольного скрипта.
а мне допустим хотелось бы создать некую старотовую web-страницу, чтобы допустим можно было это скрипт запустить,используя к примеру кнопку на стартовой web-cстранице через браузер клиента ЛВС.
Как это можно реализовать(если есть мануал на рус яз)?
сейчас у меня скрипт(по работе с MS SQL) представляет из себя примерно сл. структуру:
#!-*-coding: cp1251 -7 import os,pymssql,sys os.putenv("NLS_LANG","RUSSIAN_RUSSIA.UTF8") def fun_mssql(): ..... conect=pymssql.connect(......) ...... rez=conect.fetchall() conect.close return rez ........ def fun1(argumm): ....... k=fun_mssql() #работа с файлами и каталогами+запись логов в тектовые файлы+вывод результата в консоль через #print ..... if "__main__"==__name__: argumme=sys.argv[1] fun1(argumme)
#!/usr/bin/env python #!-*-coding: cp1251 -7 import os,pymssql,sys os.putenv("NLS_LANG","RUSSIAN_RUSSIA.UTF8") #импортируем класс Flask from flask import Flask from flask import render_trmplate DEBAG=True #создаём экземпляр app класса Flask. Экземпляр уже явл wsgi-приложением app=Flask(__name__) @app.route('/index1.html',methods=['GET']) def fun_mssql(): ..... conect=pymssql.connect(......) ...... rez=conect.fetchall() conect.close return rez def fun1(argumm): ....... k=fun_mssql() #работа с файлами и каталогами+запись логов в тектовые файлы+вывод результата в консоль через #print ..... return render_template('index1.html',key_one=k) if __name__=="__main__": app.run(debug=True, host='0.0.0.0')
<!doctype html> <title> Стартовая страница </title> {% extends "index1.html" %} {% block body %} {% if session.logged_in %} <meta content="text/html; charset=windows-1251"> <link href="style.css" rel="stylesheet" type="text/css"> </link> <form> <p><h1> Стартовая страница</h1></p> <table> <tr> <th>Ответ на запрос</th> </tr> <tr> <th>{{key_one}}</th> </tr> </table> </form> {% endif %} <ul class=entries> {% for entry in entries %} {% else %} <li><em>Unbelievable</em> <% endfor %> </ul> {% endblock %}
[nov@server py]# python hello.py * Running on http://127.0.0.1:5000/ * Restarting with reloader...
http://ip_adrr_server:5000/index1.html
* Running on http://127.0.0.1:5000/ * Restarting with reloader... 127.0.0.1 - - [17/Feb/2012 11:37:54] "GET /index1.html HTTP/1.0" 500 - ---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 44224) Traceback (most recent call last): File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock self.process_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 309, in process_request self.finish_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__ self.finish() File "/usr/lib/python2.6/SocketServer.py", line 661, in finish self.wfile.flush() File "/usr/lib/python2.6/socket.py", line 303, in flush self._sock.sendall(buffer(data, write_offset, buffer_size)) error: [Errno 32] Broken pipe
Отредактировано Novichek (Март 30, 2012 11:16:06)
Офлайн
19
Из Вашего кода понять что же не так довольно таки сложно.
На данный момент я вижу одну ошибку.
Novichek
rez=conect.fetchall()
conect.close
return rez
Отредактировано cutwater (Март 30, 2012 09:28:46)
Офлайн
0
больше интересует то,что Вы написали сл.: “Вы в обработчике запроса возвращаете результат fetchall а должны бы результат render_template,”
а так не правильно?
def fun_mssql(): ..... conect=pymssql.connect(......) ...... rez=conect.fetchall() conect.close() return rez @app.route('/index1.html',methods=['GET']) def fun1(argumm): ....... k=fun_mssql() return render_template('index1.html',key_one=k) if __name__=="__main__": app.run(debug=True, host='0.0.0.0')
Отредактировано Novichek (Март 30, 2012 11:01:11)
Офлайн
0
я так попробовал с локале через wget, но увы так и выскакивает ошибка 500 на клиенте((
httpd запущен.сервер MSSQL тоже запущен-коннект есть(поэтому вопрос соединения отпадает)
на клиентской части:
[root@srqw]#wget 'http://127.0.0.1:5000/index1.html' --2012-03-30 11:33:05-- http://127.0.0.1:5000/index1.html Устанавливается соединение с 127.0.0.1:5000... соединение установлено. Запрос HTTP послан, ожидается ответ... 500: INTERNAL SERVER ERROR 2012-03-30 11:35:20 ОШИБКА 500: INTERNAL SERVER ERROR [root@srqw]#
* Running on http://127.0.0.1:5000/ * Restarting with reloader... 127.0.0.1 - - [30/Mar/2012 11:35:20] "GET /index1.html HTTP/1.0" 500 - ---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 43539) Traceback (most recent call last): File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock self.process_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 309, in process_request self.finish_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__ self.finish() File "/usr/lib/python2.6/SocketServer.py", line 661, in finish self.wfile.flush() File "/usr/lib/python2.6/socket.py", line 303, in flush self._sock.sendall(buffer(data, write_offset, buffer_size)) error: [Errno 32] Broken pipe
Офлайн
19
Приведите минимальный законченный пример, на котором проявляется ошибка.
Офлайн
0
вот сам скрипт:
#!/usr/bin/env python #-*-coding: utf-8 import os,cx_Oracle,pymssql import flask import unittest import tempfile #Импортируем класс Flask from flask import Flask from flask import render_template DEBAG=True #Создаём экземпляр app класса Flask. Экземлаяр в данном случае уже является WSGI #приложением app = Flask(__name__) #это блок куда записывать функции @app.route('/index.html', methods=['GET']) def funOracle(): connection = cx_Oracle.connect("user","pwd","ip_adrr/name1BD") cursor = connection.cursor() cursor.execute("SELECT * FROM table where pole=znachenie") date=cursor.fetchall() p='' for rec in date: p=p+str(rec) connection.close() p.decode('string_escape') return render_template('index.html',keyone=str(p)) def funMSSQL(): conn = pymssql.connect( user = 'user', password = 'pwd', host = 'namehost', database = 'name2BD') cur=conn.cursor() cur.execute('SELECT * FROM table10') data=cur.fetchall() s='' for rec in data: s=s+str(rec) conn.close() return render_template('index.html',keytwo=s) #этот блок запускает на исполнение наше WSGI приложение, причём так,чтобы клиенты ЛВС #запустить это приложение тоже. if __name__ == '__main__': app.run(debug=True, host='0.0.0.0')
[root@ser py]# wget 'http://127.0.0.1:5000/index.html' --2012-03-30 19:35:15-- http://127.0.0.1:5000/index.html Устанавливается соединение с 127.0.0.1:5000... соединение установлено. Запрос HTTP послан, ожидается ответ... 500 INTERNAL SERVER ERROR 2012-03-30 19:35:20 ОШИБКА 500: INTERNAL SERVER ERROR. [root@ser py]#
[root@ser py]# python hello.py * Running on http://0.0.0.0:5000/ * Restarting with reloader... 127.0.0.1 - - [30/Mar/2012 19:35:20] "GET /index.html HTTP/1.0" 500 - ---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 43539) Traceback (most recent call last): File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock self.process_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 309, in process_request self.finish_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__ self.finish() File "/usr/lib/python2.6/SocketServer.py", line 661, in finish self.wfile.flush() File "/usr/lib/python2.6/socket.py", line 303, in flush self._sock.sendall(buffer(data, write_offset, buffer_size)) error: [Errno 32] Broken pipe ----------------------------------------
<!doctype html> <title> Стартовая страница </title> {% extends "index1.html" %} {% block body %} {% if session.logged_in %} <meta content="text/html; charset=windows-1251"> <link href="style.css" rel="stylesheet" type="text/css"> </link> <form> <p><h1> Стартовая страница</h1></p> <table> <tr> <th>Ответ на запрос Oracle</th> </tr> <tr> <th>{{keyone}}</th> </tr> <tr> <th>Ответ на запрос MSSQL</th> </tr> <tr> <th>{{keytwo}}</th> </tr> </table> </form> {% endif %} <ul class=entries> {% for entry in entries %} {% else %} <li><em>Unbelievable</em> <% endfor %> </ul> {% endblock %}
Отредактировано Novichek (Апрель 2, 2012 04:15:24)
Офлайн
0
Нет не у кого мысли,в связи с чем ошибка выскакивает? Хотелось бы,чтобы это всё дело заработало.
Отредактировано Novichek (Апрель 3, 2012 10:16:05)
Офлайн
568
Судя по твоему коду, тут точно должна быть ошибка
Novichek
Нет не у кого мысли,в связи с чем ошибка выскакивает? Хотелось бы,чтобы это всё дело заработало.
{% for entry in entries %} {% else %} #?????? <li><em>Unbelievable</em> <% endfor %> #??????
Офлайн
0
я вообще шаблон переделал, попробовал так, вместо вышеуказанного:
<!doctype html> <title> Стартовая страница </title> <p><h1> Стартовая страница</h1></p> <table> <tr> <th>Ответ на запрос Oracle</th> </tr> <tr> {% if keyone %} <th>{{keyone}}</th> {% else %} <th>Результат запроса не передан шаблону в виде ключа keyone</th> {% endif %} </tr>
Отредактировано Novichek (Апрель 4, 2012 08:35:57)
Офлайн
52
Вам же пишут, что ошибка при работе с сокетом. А вообще, программист, который при ошибке ‘broken pipe’ начинает работать с шаблонами, вызывает подозрительния )
Попробуйте написать в список рассылки flask или опишите _полностью_ построенную систему. Довольно сложно понять, что у вас там и как. Но думается мне, проблема не во фреймворке.
Офлайн