Форум сайта python.su
Доброе время суток всем!
Сразу хотел бы сказать,что опыта с 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(agumme)
[\code]
Офлайн
не привык ещё к обновлению…текст кода переоформлю:
#!-*-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)
Офлайн
- Для редактирования сообщения есть кнопка с недвусмысленным названием.
- Для создания web-страницы можно использовать любой понравившийся вам web-framework (Bottle, Django, Flask, Pyramid, web2py …).
Офлайн
Я уже почитал немного о bottle
если использовать его,то как будет выглядить код скрипта,чтобы на стартовой странице была кнопка,по нажатию которой будет исполняться
argumme=sys.argv[1] fun1(argumme)
Офлайн
Отредактировано Novichek (Март 29, 2012 06:00:51)
Офлайн
я пробовал ещё Flask
вот примерный код скрипта у меня был:
#!/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.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://[i]ip_adrr_server[/i]a: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
Офлайн
Здравствуйте! Если сервер Apache, то сначала поставьте mod_wsgi. Затем в конфигах нужно написать примерно следующее:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName test1.ru DocumentRoot /PATH_TO_YOUR_SITE <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /PATH_TO_YOUR_SITE/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> # Подключаем модуль wsgi LoadModule wsgi_module modules/mod_wsgi.so # Указываем файл на который будет идти все запросы WSGIScriptAlias / /PATH_TO_YOUR_SITE/start.wsgi ErrorLog /PATH_TO_YOUR_SITE/logs/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /PATH_TO_YOUR_SITE/logs/access.log combined # Ваши стили, изображения и прочее(создайте папку media в папке с сайтом) Alias /media/ "/PATH_TO_YOUR_SITE/media/" <Location "/media/"> SetHandler None </Location> </VirtualHost>
#! /usr/bin/python # -*- coding: utf-8 -*- import sys sys.path.append('/PATH_TO_YOUR_SITE/') # Импортируем файл wsgi.py в нём будем принимать переменные окружения и отдавать конечный результат import wsgi application = wsgi.Application()
Офлайн
Далее, пишем сам Application в файле wsgi.py. Примерный код такой:
import os from string import Template import settings import re import sys class Application(): def __call__(self, environ, start_response): try: callback = check_urls(environ) start_response('200 OK', [('Content-type', 'text/html;charset=utf-8;')]) return callback() except Exception as e: start_response('500 Internal Server Error', [('Content-type', 'text/html')]) return ['500 Internal Server Error! <br /> Error as <b>%s</b>' % e] # Заготовка url адресов urls = ( (r'^$', home), (r'^/YOUR_PATH$, YOUR_FUNCTION'), ) # Функция проверки по словарю адреса url def check_urls(environ): try: path = environ.get('PATH_INFO').lstrip('/').rstrip('/') for regex, callback in urls: match = re.search(regex, path) if match is not None: environ['url_args'] = match.groups() return callback() return not_found() except Exception as e: return 'WTF! %s' % e # Функция домашней страницы def home(): your_params = {'first':'Привет!', 'second':'До свидания!',} return render('index.html', your_params) # Функция обработки параметров и вывод шаблона html def render(template_name, *args, **kwargs): try: for template in settings.TEMPLATES: temp_name = os.path.join(template, template_name) try: temp = Template(open(temp_name).read()) break except IOError: temp_name = None body = temp.substitute(*args, **kwargs) return [body] except IOError as e: return ['NOT FOUND %s' % e]
#! /usr/bin/python # -*- coding: utf-8 -*- import os PROJECT_PATH = os.path.abspath(os.path.dirname(__file__)) # папка с шаблонами html TEMPLATES = ( os.path.join(PROJECT_PATH, 'templates'), )
Офлайн
Ну а дальше, можете развивать Код местами кривоват, так как писался на скорую руку, но всё же здесь мы обошлись только родной библиотекой. Если нужна будет авторизация, куки, сессии, то почитайте про middleware.
Офлайн
И забыл. Примерная структура сайта такая:
Отредактировано newca9h (Июнь 1, 2012 21:10:34)
Офлайн