Доброе время, всем гуру!
Всего пару недель увлёкся изучением языка python 2.7Почитал форумы, погуглил немного и решил попрактиковаться...
хочу начать с простого:
1)уметь из питона организовать работу с oracle 11g
2)уметь из питона организовать работу с MS SQL SERVER 2008
3)уметь используя питон создавать web-интерфейс(рабочую страницу) для удобства использования 1-го и 2-го пункта через браузер и соответсвенно получать информацию в читаемом, удобным и приукрашенном виде(html, javascript'ы и т.д.)так вот с 1-ым и 2-ым пунктом я разобрался вроде как...получилось на практике..
с 3-им проблема..не могу найти подходящую литературу,где могут быть конкретные примеры приведены...
Работаю на Fedore, использую web-сервер Apache 2.2 (httpd)(тоже из под Fedore работает)
вот пока у меня такой скрипт(обращаюсь к нему из под браузера клиента ЛВС в строке url:http://10.13.12.2/sript.py)
содержание скрипта:
----------------
#!/usr/bin/env python
#-*-coding: utf-8import pymssql
import cx_Oracle
import sys
import os
os.putenv("NLS_LANG","RUSSIAN_RUSSIA.UTF8")
def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
#использ-е самописной фу-ции по работе с СУБД MSSQL
r=test1()
#использ-е самописной фу-ции по работе с СУБД ORACLE 11G
g=test2()
#использ-е самописной фу-ции по работе с числами
k=fun1(50,5)
return g, str(k),r
def test1():
conn = pymssql.connect( user = 'loginmssql', password = 'pwdmssql', host = 'ServerSQL', database = 'mybazaMSSQL' )
cur=conn.cursor()
cur.execute('SELECT * FROM tablica1')
data=cur.fetchall()
s=''
for rec in data:
s=s+str(rec)
conn.close
return sdef fun1(delimoe,delitel):
return delimoe/deliteldef test2():
connection = cx_Oracle.connect("loginoracle","pwdoracle","10.13.12.3/mybazaORACLE")
cursor = connection.cursor()
cursor.execute("SELECT * FROM tablica12 where pole=243")
date=cursor.fetchall()
p=''
for rec in date:
p=p+str(rec)
return str(p).decode('string_escape')
----------------и вот как используя питон можно сгенерировать web-страницу?
-----на php к примеру я могу реализовать примерно так:
используя 3 крипта, один из которых центральный и вызывается первым, а два других скрипта имеют одинаковую по названию функцию,которая вызывается из центрального скрипта, но в зависимости от выбранной нажатой пользователем месте данная функция выполяет различные действия
sript.php(центральный скрипт)
--------------
<?
if(!isset($_REQUEST['mode']))
$_REQUEST['mode']=='variant1'; #по умолчанию принять изначально выбор на variant1if($_REQUEST['mode']=='variant1')
include('scriptOracle.php')
if($_REQUEST['mode']=='variant2')
include('scriptMSSQL.php')
?><html>
<head>
<title>
Название
</title>
<meta content="text/html; charset=windows-1251">
<link href="stil.css" rel="stilsheet" type="text/css">
</link>
<script type="text/javasript" src="jav/jquery.js">
</script>
</head>
<body><table>
<tr>
<td>
<a href="sript.php?mode=variant1">
Вариант выбора по работе с СУБД Oracle
</a>
</td>
<td>
<a href="sript.php?mode=varian2">
Вариант выбора по работе с СУБД MS SQL Server 2008
</a>
</td>
</tr>
</table>
<? test() ?></body>
</html>
---------------------------
scriptOracle.php
----------
<?test()
#вся работа с СУБД Orale 11g-коннект к БД, выполнение результата sql-запроса, возвращение результата в виде таблицы в браузере?>
----------------------
scriptMSSQL.php
----------
<?test()
#вся работа с СУБД MSSQL-коннект к БД, выполнение результата sql-запроса, возвращение результата в виде таблицы в браузере
?>как это на питоне можно реализовать?где с подобными примерами можно ознакомится?
вообщем инфу максимально без воды и с наглядными примерами не могу найти.
P.S.: на примерах быстрее понимаю суть работы,чем просто текстом...
Заране благодарен!
берите http://webpy.org/ как самый простой и делайте, там есть примеры, ссылки на рабочие приложения и документация
> берите http://webpy.org/ как самый простой и делайте, там есть примеры, ссылки на
> рабочие приложения и документацияТ.е. если я всё же вибираю web.py я должен сделать следующее:
1)установить модуль web
возникает вопрос какой пакте скачать(название я так и не нашёл) и установить, чтобы в сл строке не выскакивала ошибка:
import webЯ у себя использую ОС Fedora, pytnon 2.7? apache 2.2
2)После установки соответсвующего модуля для питона по работе с веб, допустим хочу вывести результат ответа на запрос к БД MSSQL в браузер клиента ЛВС,который изначально запустил скрипт.
Допустим клиент должен получить в ответ страницу сл вида:
1)по средине вверху стриницы надпись:"Отправляемый запрос СУБД MSSQL"
2)под этой надписью следует таблица, которая состоит из одной строки и двух столбцов:левый 3)столбец имеет сл содержание:"Ваш запрос",а правый столлбец имеет содержание:результат ответа на sql-запрос
4)под таблицей по средине имеется кнопка с надписью:"Отправить запрос СУБД ORACLE 11G"
по нажатию на кнопку сама форма страницы не изменяется, а лишь изменяется надписи вместо "MSSQL"-"Oracle", и соответсвено в правом столбце отображается результат запроса уже к ORACleи как мне это реализовать на питоне к примеру?
так?
#!/usr/bin/env python
#-*-coding: utf-8import pymssql
import cx_Oracle
import sys
import os
import web
os.putenv("NLS_LANG","RUSSIAN_RUSSIA.UTF8")ef application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)<html>
<head>
<title>
Отправляемый запрос СУБД MSSQL
</title>
<meta content="text/html; charset=windows-1251">
<link href="stil.css" rel="stilsheet" type="text/css">
</link>
<script type="text/javasript" src="jav/jquery.js">
</script>
</head>
<body><table>
<tr>
<td>
<a>
Ваш запрос
</a>
</td>
<td>
<a>
test1()
</a>
</td>
</tr>
</table>
<? test() ?></body>
</html>
return ?????(что возвращать?)
def test1():
conn = pymssql.connect( user = 'loginmssql', password = 'pwdmssql', host = 'ServerSQL', database = 'mybazaMSSQL' )
cur=conn.cursor()
cur.execute('SELECT * FROM tablica1')
data=cur.fetchall()
s=''
for rec in data:
s=s+str(rec)
conn.close
return sdef test2():
connection = cx_Oracle.connect("loginoracle","pwdoracle","10.13.12.3/mybazaORACLE")
cursor = connection.cursor()
cursor.execute("SELECT * FROM tablica12 where pole=243")
date=cursor.fetchall()
p=''
for rec in date:
p=p+str(rec)
return str(p).decode('string_escape')
----
или как-то по другому это всё пишется на питоне?
как кнопку создать и тем более описывать что она должна делать вообще пока не понятно(((впринципе этот пример я сам себе придумал,чтобы просто получилось сначала на элементарных вещах, но вот как к примеру вышеуказанное реализовать на практике по не понятно(((
англоязычные сайты-это конечно хорошо,но не совсем удобно(только общий смысл понимаю о чём там пишут)(((
>> берите http://webpy.org/ как самый простой и делайте, там есть примеры, ссылки на
>> рабочие приложения и документацияпрошу прощения, произошла опискав сткрое
ef application(environ, start_response):
соответсвенно я имел ввиду сл строку
def application(environ, start_response):
Для веб интерфейса может подойти bottle.py - http://bottlepy.org/docs/dev/
Всего лишь подключите один модуль и у вас уже будет веб-сервер. Хотя может работать и через другие серверы.
#Example: “Hello World” in a bottlefrom bottle import route, run
@route('/hello/:name')
def index(name='World'):
return '<b>Hello %s!</b>' % namerun(host='localhost', port=8080)
Мне собсвенно не нужен веб-сервер сам, так как я использую свой apache 2.2, который запускает на исполненеие питоновский скрипт через питоновский интерпритатор соответсвующий.
прежде всего для работы apache с питоном я установил wsgi_mod.
А теперь мне просто нужно понять как описывать в питоновском скрипте различные веб-возможности:как ген ирировать веб-старницу, заполнять её, получать через неё от клиента ЛВС данные,обрабатывать полученные данные и соответсвенно отдавать через неё другие данные.
когда разберусь как с одной страницей это можно сделать, буду разбираться как использовать в работе несколько веб-страниц.
сейчас пока с простого самого начал,чтобы понять синтаксис и сам процесс.
выход в инет соответсвенно у меня нет. Машины "отрезаны от мира", поэтому использовать можно лишь то,что может работать автономно.
Поэтому думаю мне не подойдёт то,чтьо Вы предложили к сожалению.
Но всё равно спасибо за помощь!
> прежде всего для работы apache с питоном я установил wsgi_mod.Ок. Теперь твой апач способен выполнять WSGI скрипты :)
> выход в инет соответсвенно у меня нет. Машины "отрезаны от мира", поэтому
> использовать можно лишь то,что может работать автономно.Ииии ???
> Поэтому думаю мне не подойдёт то,чтьо Вы предложили к сожалению.
> Но всё равно спасибо за помощь!Константин - тебе тут никто не поможет, ибо проблема не в каких то технических хитростях, а в том что ты _ничего_ про веб не знаешь. Это поправить сможешь только ты сам. Есть куча сайтов типа "школа HTML" - освой азы, потом вернёшься сюда. А может и сам поймешь.
PS: Особенно проштудируй обработку всего связанного с FORM.
в процессе начитывания...
Обычные HTML страницы я знаю как описывать....я их создавал изначально при помощи простого создания файла с расширением .html или .htmls, а потом уже обращался к данной странице через браузер....если страница удалённая,то в конфиге апача указывал конкретную страницу по умолчанию...как в PHP внедрить html код и данные внутри кода от функций.написанные на php тоже разобрался....
а как в питоне-то?можно какой-нибудь обычный пример....так сказать скелет на питоне?
> как в PHP внедрить html код и данные внутри кода от функций.написанные
> на php тоже разобрался....
> а как в питоне-то?можно какой-нибудь обычный пример....так сказать скелет на питоне?ну попробуем еще раз :)
сначала смотрим http://ru.wikibooks.org/wiki/Django
потом пробегаем http://djbook.ru/ch01.html
и тогда приступаем https://www.djangoproject.com/
спасибо за ссылки-полезные!Начитываюсь!
У меня только сразу возник вопрос:
А если не использовать фреймворки готовые, то как тогода?я имею ввиду ручками как всё описывать?
почему возник вопрос, так как наслышан что они в том числе Diango как-то косячные что ли и не удобные в работе...
> спасибо за ссылки-полезные!Начитываюсь!Держи ещё одну пр webpy который тебе уже советовали, это to-do list, законченное приложение с базой данных - всё просто и наглядно:
http://webpy.org/src/todo-list/0.2> У меня только сразу возник вопрос:
> А если не использовать фреймворки готовые, то как тогода?я имею ввиду ручками как всё описывать?Ответ очевиден - тогда всё ручками. Только зачем?! Ты же не используешь сырой сокет для работы с базами данных а пользуешь модули, почему тут не так? Поверь мне - ньюансов там - немерянно ...
> почему возник вопрос, так как наслышан что они в том числе Diango
> как-то косячные что ли и не удобные в работе...Рабинович напел? Хотя быстрее всего php-шники, ну у этих необратимые изменения в коре мозЪка - этих ты не слушай :)
а может подобно описано на русском языке, чтобы наглядно и на русском разъяснения даны?уж больно рюриковический язык понимать труднова-то читается..общий смысл только улавливаю и как правило пользуюсь он-лайн переводчиком от гугл...
Заранее благодарен!Очень помогается освоить этот пробел в знаниях!
С уважением!
1)Установил web.py v. 0/3, как указано в http://webpy.org/
#sudo easy_install web.py2)Прочитал я http://webpy.org/src/todo-list/0.3
Cобственно как я понял,чтобы это всё у них заработало, клиенту ЛВС в браузере нужно указать на скрипт todo.pyЯ по аналогии, чтобы достигнуть поставленной цели(см ранее выше сообщения), правильно ли мыслю следующее?
Необходимо иметь в наличии сл каталоги и файлы в каталоге,где сейчас находится мой рабочий скрипт, а именно в /var/www/html/
Files
/templates:
/templates/base.html
/templates/index.html
/model.py
/todo.py
--------------
Содержание скрипта /todo.py:
---------
#!/usr/bin/env python
#-*-coding: utf-
import web
import modelurls = (
'/', 'MSSQ',
'/del/(\d+)', ORA'
)
#для чего сл строка вообще не понял
render = web.template.render('templates', base='base')class MSSQ:
form = web.form.Form( web.form.Textbox('title', web.form.notnull, description="Описание формы"),
web.form.Button('Получить результат запросов к базам'),
)def GET(self):
todos = model. test1()
form = self.form()
return render.index(todos, form)class ORA:
def GET(self):
todos = model. test2()
form = self.form()
return render.index(todos, form)app = web.application(urls, globals())
if __name__ == '__main__':
app.run()
-------------------------------------------------------------------------
Содержание скрипта / model.py:
---------
#!/usr/bin/env python
#-*-coding: utf-
import web
import pymssql
import cx_Oracle
import sys
import os
os.putenv("NLS_LANG","RUSSIAN_RUSSIA.UTF8")def test1():
conn = pymssql.connect( user = 'loginmssql', password = 'pwdmssql', host = 'ServerSQL', database = 'mybazaMSSQL' )
cur=conn.cursor()
cur.execute('SELECT * FROM tablica1')
data=cur.fetchall()
s=''
for rec in data:
s=s+str(rec)
conn.close
return sdef test2():
connection = cx_Oracle.connect("loginoracle","pwdoracle","10.13.12.3/mybazaORACLE")
cursor = connection.cursor()
cursor.execute("SELECT * FROM tablica12 where pole=243")
date=cursor.fetchall()
p=''
for rec in date:
p=p+str(rec)
return str(p).decode('string_escape')
---------------------------------------------
Сожержание HTML-файла /templates/base.html:
-------------------------------------------
$def with (page)<html>
<head>
<title>Исполняется питоновский скрипт Todo с возможностями работы с СУБД MSSQL и Oracle </title>
</head>
<body>
$:page
</body>
</html>---------------------------------------------
Сожержание HTML-файла /templates/ index.html:
Который я хотел бы чтобы выполнял визуальное отображение полученных данных в виде страницы, по средине таблица, слева ячейка-там надпись к кому подклюались, справа ячейка результат запроса к БД, ниже строчка по аналогии, но с другой БД…
Изначально таблица пустая, но по нажатию кнопки с надписью 'Получить результат запросов к базам'–заполняется и мы можем увидеть своими глазами читабельный нормльный результат
-------------------------------------------$def with (todos, form)
<meta content="text/html; charset=windows-1251">
<link href="stil.css" rel="stilsheet" type="text/css">
</link>
<script type="text/javasript" src="jav/jquery.js">
</script>
<table>
<tr>
<th>Результат запроса к СУБД Oracle 11G</th>
<th></th>
</tr>
$for todo in todos:
<tr>
<td>$todo. tablica12 </td>
<td>
<form action="/var/www/html/$todo. pole " method="get">
</form>
</td>
</tr>
<tr>
<th>Результат запроса к СУБД MS SQL SERVER 2008</th>
<th></th>
</tr>
$for todo in todos:
<tr>
<td>$todo. tablica1 </td>
<td>
<form action="/var/www/html/$todo. ???" method="get"> #не знаю как здесь описать
</form>
</td>
</tr>
</table><form action="" method="get">
$:form.render()
</form>
Вот собсвенно всё. Правильно ли я понял или нет и если нет,то укажите где именно у меня не правильно и как нужно правильно прописывать.
Заранее благодарен.
>[оверквотинг удален]
> ----------
> <?
> test()
> #вся работа с СУБД MSSQL-коннект к БД, выполнение результата sql-запроса, возвращение результата
> в виде таблицы в браузере
> ?>
> как это на питоне можно реализовать?где с подобными примерами можно ознакомится?
> вообщем инфу максимально без воды и с наглядными примерами не могу найти.
> P.S.: на примерах быстрее понимаю суть работы,чем просто текстом...
> Заране благодарен!Чета я не понял, а че в питоне нет аналога пхпшного echo, print и т.п. ?
> Чета я не понял, а че в питоне нет аналога пхпшного echo,
> print и т.п. ?masz@debrax:~$ python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> val = 'test'
>>> print valtest
Вот я использую ось Fedora 6, на нём круимися питон версия 2.7 и апач 2.2
для того,чтобы мне можно было использовать питоновский модуль web, мне какой пакет нужно скавчать?
я на время fedory подсоединил к инету,
делаю
yum search web| grep python
результат отрицательный-мол таких нет пакетов.
попробовал погуглить с параметрами поиска "python web", "python import web" так и не нашёл наименование пакета((( Конечно он может быть не rpm.
>> Чета я не понял, а че в питоне нет аналога пхпшного echo,
>> print и т.п. ?
> masz@debrax:~$ python
> Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
> [GCC 4.4.5] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> val = 'test'
>>>> print val
> testСпасибо, за Ваш комментарий. Возвращаясь к теме, а в чем проблема то тогда? Или я чета не понимаю, какие фреймворки. print '<img src=...' не сработает?
1)Установил web.py v. 0/3, как указано в http://webpy.org/
#sudo easy_install web.py2)Прочитал я http://webpy.org/src/todo-list/0.3
Cобственно как я понял,чтобы это всё у них заработало, клиенту ЛВС в браузере нужно указать на скрипт todo.pyЯ по аналогии, чтобы достигнуть поставленной цели(см ранее выше сообщения), правильно ли мыслю следующее?
Необходимо иметь в наличии сл каталоги и файлы в каталоге,где сейчас находится мой рабочий скрипт, а именно в /var/www/html/
Files
/templates:
/templates/base.html
/templates/index.html
/model.py
/todo.py
--------------
Содержание скрипта /todo.py:
---------
#!/usr/bin/env python
#-*-coding: utf-
import web
import modelurls = (
'/', 'MSSQ',
'/del/(\d+)', ORA'
)
#для чего сл строка вообще не понял
render = web.template.render('templates', base='base')class MSSQ:
form = web.form.Form( web.form.Textbox('title', web.form.notnull, description="Описание формы"),
web.form.Button('Получить результат запросов к базам'),
)def GET(self):
todos = model. test1()
form = self.form()
return render.index(todos, form)class ORA:
def GET(self):
todos = model. test2()
form = self.form()
return render.index(todos, form)app = web.application(urls, globals())
if __name__ == '__main__':
app.run()
-------------------------------------------------------------------------
Содержание скрипта / model.py:
---------
#!/usr/bin/env python
#-*-coding: utf-
import web
import pymssql
import cx_Oracle
import sys
import os
os.putenv("NLS_LANG","RUSSIAN_RUSSIA.UTF8")def test1():
conn = pymssql.connect( user = 'loginmssql', password = 'pwdmssql', host = 'ServerSQL', database = 'mybazaMSSQL' )
cur=conn.cursor()
cur.execute('SELECT * FROM tablica1')
data=cur.fetchall()
s=''
for rec in data:
s=s+str(rec)
conn.close
return sdef test2():
connection = cx_Oracle.connect("loginoracle","pwdoracle","10.13.12.3/mybazaORACLE")
cursor = connection.cursor()
cursor.execute("SELECT * FROM tablica12 where pole=243")
date=cursor.fetchall()
p=''
for rec in date:
p=p+str(rec)
return str(p).decode('string_escape')
---------------------------------------------
Сожержание HTML-файла /templates/base.html:
-------------------------------------------
$def with (page)<html>
<head>
<title>Исполняется питоновский скрипт Todo с возможностями работы с СУБД MSSQL и Oracle </title>
</head>
<body>
$:page
</body>
</html>---------------------------------------------
Сожержание HTML-файла /templates/ index.html:
Который я хотел бы чтобы выполнял визуальное отображение полученных данных в виде страницы, по средине таблица, слева ячейка-там надпись к кому подклюались, справа ячейка результат запроса к БД, ниже строчка по аналогии, но с другой БД…
Изначально таблица пустая, но по нажатию кнопки с надписью 'Получить результат запросов к базам'–заполняется и мы можем увидеть своими глазами читабельный нормльный результат
-------------------------------------------$def with (todos, form)
<meta content="text/html; charset=windows-1251">
<link href="stil.css" rel="stilsheet" type="text/css">
</link>
<script type="text/javasript" src="jav/jquery.js">
</script>
<table>
<tr>
<th>Результат запроса к СУБД Oracle 11G</th>
<th></th>
</tr>
$for todo in todos:
<tr>
<td>$todo. tablica12 </td>
<td>
<form action="/var/www/html/$todo. pole " method="get">
</form>
</td>
</tr>
<tr>
<th>Результат запроса к СУБД MS SQL SERVER 2008</th>
<th></th>
</tr>
$for todo in todos:
<tr>
<td>$todo. tablica1 </td>
<td>
<form action="/var/www/html/$todo. ???" method="get"> #не знаю как здесь описать
</form>
</td>
</tr>
</table><form action="" method="get">
$:form.render()
</form>
Вот собсвенно всё. Правильно ли я понял или нет и если нет,то укажите где именно у меня не правильно и как нужно правильно прописывать.
Заранее благодарен.
> Спасибо, за Ваш комментарий. Возвращаясь к теме, а в чем проблема то
> тогда? Или я чета не понимаю, какие фреймворки. print '<img src=...'
> не сработает?один из вопросов ТСа:
3)уметь используя питон создавать web-интерфейс(рабочую страницу) для удобства использования 1-го и 2-го пункта через браузер и соответсвенно получать информацию в читаемом, удобным и приукрашенном виде(html, javascript'ы и т.д.)
Был бы признателен,если прокомментируете по поводу вопросов,которые я сформулировал в 12:01 , 25-Янв-12, (17)пока то, что я сформулировал и описал-к сожалению не работает(((
пишет в браузере erorr 500((
Апач запущен.вопрос только к скриптам-тут пока затрудняюсь((
Что никто не может подсказать?