Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » создание стартовой страницы на питоне [RSS Feed]

#1 Март 28, 2012 04:21:17

Novichek
Зарегистрирован: 2012-03-27
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

Доброе время суток всем!
Сразу хотел бы сказать,что опыта с 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]

Офлайн

#2 Март 28, 2012 04:24:59

Novichek
Зарегистрирован: 2012-03-27
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

не привык ещё к обновлению…текст кода переоформлю:

#!-*-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)

Офлайн

#3 Март 28, 2012 11:58:14

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

- Для редактирования сообщения есть кнопка с недвусмысленным названием.
- Для создания web-страницы можно использовать любой понравившийся вам web-framework (Bottle, Django, Flask, Pyramid, web2py …).



Офлайн

#4 Март 29, 2012 03:26:18

Novichek
Зарегистрирован: 2012-03-27
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

Я уже почитал немного о bottle
если использовать его,то как будет выглядить код скрипта,чтобы на стартовой странице была кнопка,по нажатию которой будет исполняться

argumme=sys.argv[1]
fun1(argumme)
Я так понял нужна страница-щаблон html,которая должна хранится в определённой директории(Использую скрипт на Fedore), а сомое гл как примерно она должна выглядить-код её как должне быть,чтобы этот шаблрн заполнялся скриптом?

Если есть возможность-можно пример для конкретной упрощённой задачи,т.е. где просто максимум есть надпись-“стартовая страница” и кнопка,по нажатию которой выводит результат скрипта.
Заранее благодарен.

Офлайн

#5 Март 29, 2012 05:59:09

Novichek
Зарегистрирован: 2012-03-27
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне



Отредактировано Novichek (Март 29, 2012 06:00:51)

Офлайн

#6 Март 29, 2012 06:00:05

Novichek
Зарегистрирован: 2012-03-27
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

я пробовал ещё 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')

потом создал два каталога в ручную в той же директории,где расположен был скрипт:
/var/www/html/py

1)/var/www/html/py/static
2)/var/www/html/py/templates

static содержит файл стилей оформления style.css
templates содержит шаблон стартовой страницы index1.html, содержание которой примерно такое:
<!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...
сдалал вывод скрипт запустился на 5000 порту,значит и обратиться к серверной части нужно по 5000 порту,что и делаю в браузере с другой ПЭВМ этой же ЛВС, в строке url пишу:
http://[i]ip_adrr_server[/i]a:5000/index1.html
и получаю ответ:ОШИБКА 500: INTERNAL SERVER ERROR.
а на серверной части,где я запусти скрипт получаю сл информацию:
* 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

пробовал из локали обратиться к сервеной части,тоже самое…даже попробовал таким образом из локале обратиться:
wget 'http://127.0.0.1:5000/index1.html'
тоже самое получил.

вообщем как сами понимаете,результата я не достиг((+и не понял как кнопку реализовать.

Офлайн

#7 Июнь 1, 2012 20:53:22

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

Здравствуйте! Если сервер 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>

Далее в папке с сайтом создаём файл start.wsgi и в нём пишем примерно следующее:
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
sys.path.append('/PATH_TO_YOUR_SITE/')
# Импортируем файл wsgi.py в нём будем принимать переменные окружения и отдавать конечный результат
import wsgi
application = wsgi.Application()

Офлайн

#8 Июнь 1, 2012 21:04:04

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

Далее, пишем сам 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'),
)

Офлайн

#9 Июнь 1, 2012 21:05:38

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

Ну а дальше, можете развивать Код местами кривоват, так как писался на скорую руку, но всё же здесь мы обошлись только родной библиотекой. Если нужна будет авторизация, куки, сессии, то почитайте про middleware.

Офлайн

#10 Июнь 1, 2012 21:08:40

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

создание стартовой страницы на питоне

И забыл. Примерная структура сайта такая:

  • Имя_сайта
  • –> start.wsgi
  • –> wsgi.py
  • –> settings.py
  • –> media
  • –> templates

Отредактировано newca9h (Июнь 1, 2012 21:10:34)

Офлайн

  • Начало
  • » Web
  • » создание стартовой страницы на питоне[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version