Найти - Пользователи
Полная версия: Написать веб приложение работающая с базой данных SQL
Начало » Web » Написать веб приложение работающая с базой данных SQL
1 2 3
DmiSbr
abzal

В принципе я так же и делал
$ sudo apt-get install python-virtualenv
$ mkdir myproject
$ cd myproject
$ virtualenv env
$ . env/bin/activate
нужно именно с точкой, а между точкой и env/… стоит пробел. Все должно быть нормально
Кстати чуть выше выяснилось что можно и без virtualenv. Час назад проверил
Flask ставиться влегкую
$ sudo easy_install Flask
Единственное что не получилось - заставить easy_install работать через прокси. И переменную HTTP_PROXY устанавливал, не помогло.
Андрей Светлов
Точка - bash alias для команды source
abzal
Вроде все правильно сделал, а как проверить работает ли

abzal@btn-it-003UB ~$ cd myproject
abzal@btn-it-003UB ~/myproject$
abzal@btn-it-003UB ~/myproject$ virtualenv env
New python executable in env/bin/python
Installing distribute..................................................................................................................................................................................done.
abzal@btn-it-003UB ~/myproject$ ls -l
total 384
-rw-r--r-- 1 abzal abzal 385641 2010-11-17 22:36 distribute-0.6.10.tar.gz
drwxr-xr-x 5 abzal abzal 4096 2010-11-17 22:36 env
abzal@btn-it-003UB ~/myproject$ ls -l env/
total 12
drwxr-xr-x 2 abzal abzal 4096 2010-11-17 22:36 bin
drwxr-xr-x 2 abzal abzal 4096 2010-11-17 22:36 include
drwxr-xr-x 3 abzal abzal 4096 2010-11-17 22:36 lib
abzal@btn-it-003UB ~/myproject$ ls -l env/bin/
total 2260
-rw-r--r-- 1 abzal abzal 1528 2010-11-17 22:36 activate
-rw-r--r-- 1 abzal abzal 902 2010-11-17 22:36 activate_this.py
-rwxr-xr-x 1 abzal abzal 344 2010-11-17 22:36 easy_install
-rwxr-xr-x 1 abzal abzal 352 2010-11-17 22:36 easy_install-2.6
-rwxr-xr-x 1 abzal abzal 302 2010-11-17 22:36 pip
-rwxr-xr-x 1 abzal abzal 310 2010-11-17 22:36 pip-2.6
-rwxr-xr-x 1 abzal abzal 2288240 2010-11-17 22:36 python
abzal@btn-it-003UB ~/myproject$ . env/bin/activate
(env)abzal@btn-it-003UB ~/myproject$ sudo easy_install Flask
sudo: unable to resolve host btn-it-003UB
Searching for Flask
Reading http://pypi.python.org/simple/Flask/
Reading http://github.com/mitsuhiko/flask/
Best match: Flask 0.6
Downloading http://pypi.python.org/packages/source/F/Flask/Flask-0.6.tar.gz#md5=55a5222123978c8c16dae385724c0f3a
Processing Flask-0.6.tar.gz
Running Flask-0.6/setup.py -q bdist_egg --dist-dir /tmp/easy_install-9vdtFT/Flask-0.6/egg-dist-tmp-BCVChX
warning: no previously-included files matching '*.pyc' found under directory 'docs'
warning: no previously-included files matching '*.pyo' found under directory 'docs'
warning: no previously-included files matching '*.pyc' found under directory 'tests'
warning: no previously-included files matching '*.pyo' found under directory 'tests'
warning: no previously-included files matching '*.pyc' found under directory 'examples'
warning: no previously-included files matching '*.pyo' found under directory 'examples'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'docs/_themes/.git'
Adding Flask 0.6 to easy-install.pth file

Installed /usr/local/lib/python2.6/dist-packages/Flask-0.6-py2.6.egg
Processing dependencies for Flask
Searching for Jinja2>=2.4
Reading http://pypi.python.org/simple/Jinja2/
Reading http://jinja.pocoo.org/
Best match: Jinja2 2.5.5
Downloading http://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.5.tar.gz#md5=83b20c1eeb31f49d8e6392efae91b7d5
Processing Jinja2-2.5.5.tar.gz
Running Jinja2-2.5.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-rpZHGE/Jinja2-2.5.5/egg-dist-tmp-HZlUTr
warning: no previously-included files matching '*' found under directory 'docs/_build'
warning: no previously-included files matching '*.pyc' found under directory 'jinja2'
warning: no previously-included files matching '*.pyc' found under directory 'docs'
warning: no previously-included files matching '*.pyo' found under directory 'jinja2'
warning: no previously-included files matching '*.pyo' found under directory 'docs'
Adding Jinja2 2.5.5 to easy-install.pth file

Installed /usr/local/lib/python2.6/dist-packages/Jinja2-2.5.5-py2.6.egg
Searching for Werkzeug>=0.6.1
Reading http://pypi.python.org/simple/Werkzeug/
Reading http://werkzeug.pocoo.org/
Reading http://trac.pocoo.org/repos/werkzeug/trunk
Best match: Werkzeug 0.6.2
Downloading http://pypi.python.org/packages/source/W/Werkzeug/Werkzeug-0.6.2.tar.gz#md5=519408350346a247333bb5d584371724
Processing Werkzeug-0.6.2.tar.gz
Running Werkzeug-0.6.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-rljiE2/Werkzeug-0.6.2/egg-dist-tmp-EdnJXS
no previously-included directories found matching 'docs/_build/doctrees'
zip_safe flag not set; analyzing archive contents...
werkzeug.utils: module references __path__
werkzeug.__init__: module references __file__
werkzeug.__init__: module references __path__
werkzeug.serving: module references __file__
werkzeug.contrib.jsrouting: module MAY be using inspect.trace
werkzeug.debug.utils: module references __file__
werkzeug.debug.tbtools: module MAY be using inspect.getsourcefile
werkzeug.debug.__init__: module references __file__
werkzeug.debug.render: module references __file__
Adding Werkzeug 0.6.2 to easy-install.pth file

Installed /usr/local/lib/python2.6/dist-packages/Werkzeug-0.6.2-py2.6.egg
Finished processing dependencies for Flask
(env)abzal@btn-it-003UB ~/myproject$
(env)abzal@btn-it-003UB ~/myproject$
(env)abzal@btn-it-003UB ~/myproject$ sudo easy_install Flask
sudo: unable to resolve host btn-it-003UB
Searching for Flask
Best match: Flask 0.6
Processing Flask-0.6-py2.6.egg
Flask 0.6 is already the active version in easy-install.pth

Using /usr/local/lib/python2.6/dist-packages/Flask-0.6-py2.6.egg
Processing dependencies for Flask
Finished processing dependencies for Flask
(env)abzal@btn-it-003UB ~/myproject$ ls /usr/local/lib/python2.6/dist-packages/Flask-0.6-py2.6.egg/
EGG-INFO flask
(env)abzal@btn-it-003UB ~/myproject$ ls /usr/local/lib/python2.6/dist-packages/Flask-0.6-py2.6.egg/flask/
app.py globals.py logging.py signals.py wrappers.py
app.pyc globals.pyc logging.pyc signals.pyc wrappers.pyc
config.py helpers.py module.py templating.py
config.pyc helpers.pyc module.pyc templating.pyc
ctx.py __init__.py session.py testing.py
ctx.pyc __init__.pyc session.pyc testing.pyc
Где его рабочая директория? Нужен ли апач? В туториале написано localhost:5000 откуда это, что-то я совсем запутался. Как начать работать?

Спасибо.
DmiSbr
abzal

Последний раз я поставил так:
$sudo apt-get install lighttpd
$sudo apt-get install python-setuptools
$sudo easy_install Flask
То есть ты сделал все правильно, тебе осталось поставить web-сервер. Я поставил lighttpd (в первой строке). По отзывам он легче и шустрее того же апача. Если у тебя Ubuntu 10.4 descktop, то проверить его работоспособность можно по адресу http://localhost. Далее пишешь минимальный проект hello.py на Flask в твоей директории, т.е. в myproject и старуешь его. Проверяешь, как и написано по адресу http://localhost:5000
Собственно все
P.S. У тебя разница по времени с Москвой какая. У меня +2. Что-то я поздно твои сообщения замечаю
abzal
DmiSbr

Спасибо, вроде получилось. Теперь буду двигаться по туториалу.
DmiSbr
А я вот в кодировках запутался. Замучил меня этот проклятый UnicodeDecodeError
Перечитал на форуме почти все, что было про кодировки, но просветление, как ни странно, не наступило. Даже вот этот важный документ изучил.
Ковыряю Flask Totorial. Немного изменил логику, имя пользователя и пароль сравнивается с содежимым таблицы в БД.
.....

@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
select = "select first 1 * from users where usr_name='%s'" %request.form['username']
cur = g.db.cursor()
cur.execute(select)
if cur.rowcount == 0:
error = 'name'
for row in cur:
if request.form['username'] != row[1]:
error = 'Invalid username'
elif request.form['password'] != row[2]:
error = 'Invalid password'
else:
session['logged_in'] = True
flash('You were logged in')
return redirect(url_for('show_entries'))
return render_template('login.html', error=error)
Если ввести имя пользователя английскими символами, все нормально. Если русскими, то UnicodeDecodeError. Перепробовал варианты с # _*_ coding, encode и decode. Не получается. Может быть кто просветит ?
Заранее спасибо
ОС ubuntu 10.4-server
DmiSbr
Вдогонку к предыдущему посту:
такая же ситуация если попытаться вывести ошибку по-русски, т.е
error = 'Неверный пароль'
DmiSbr
С передачей параметров в запрос разобрался. Спасло
# _*_ coding: utf-8 _*_
Конвертировать, как выяснилось, ничего не надо. А вот с возвратом русского текста на страницу пока засада. Может быть кто направит на путь истинный ?
Если весь код написан на utf-8, страницы формируются тоже в этой кодировке. Как нужно делать возврат на страницу переменной с русской строкой ?
DmiSbr
Вроде сам разобрался. Оказалось дальше туториала надо было прочитать Unicode in Flask
Вот мой вариант логина к Flask Totorial
# _*_ coding: utf-8 _*_
from contextlib import closing
from flask import Flask, request, session, g, redirect, url_for, abort, \
render_template, flash
import kinterbasdb
.......
.......
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
u_name = request.form['username'].upper()
select = "select first 1 * from users where upper(usr_name)='%s'" %u_name
cur = g.db.cursor()
cur.execute(select)
if cur.rowcount == 0:
error = u'Неверное имя пользователя'
for row in cur:
if request.form['password'] != row[2]:
error = u'Неверный пароль'
else:
session['logged_in'] = True
flash(u'Добро пожаловать : ' + request.form['username'])
return redirect(url_for('show_entries'))
return render_template('login.html', error = error)
DmiSbr
Дальше еще интреснее. Видоизменяем процедуру подключения к базе
def connect_db():
f = open('/home/test/connect.log', 'a')
f.write('connect \n')
f.close()
return kinterbasdb.connect(
host='localhost',database='test.fdb',
user='sysdba',password='masterkey',
dialect=3, charset='WIN1251')
Если проследит за логом, то видно, что при каждом обращении к странице происходит вызов процедуры, то есть при каждом обращении к странице происходит подключение к БД. Читаем Step 4: Request Database Connections и видим действительно
…We will need the database connection in all our functions so it makes sense to initialize them before each request and shut them down afterwards…
то есть коннект-дисконнект при каждом запросе. Но ведь как известно, коннекты к базе - это самая дорогостоящая по времени операция. Можно как-то этого избежать ? Если убрать эти процедуры и вызывать подключение при инициализации приложения, например ? Есть варианты другого поведения или это стандартное поведение Flask ?
Я сильно озадачен. Пойду читать дальше
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