Форум сайта python.su
abzal
В принципе я так же и делал
$ sudo apt-get install python-virtualenv
$ mkdir myproject
$ cd myproject
$ virtualenv env
$ . env/bin/activate
$ sudo easy_install Flask
Офлайн
Точка - bash alias для команды source
Офлайн
Вроде все правильно сделал, а как проверить работает ли
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
Офлайн
abzal
Последний раз я поставил так:
$sudo apt-get install lighttpd
$sudo apt-get install python-setuptools
$sudo easy_install Flask
Офлайн
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)
Офлайн
Вдогонку к предыдущему посту:
такая же ситуация если попытаться вывести ошибку по-русски, т.е
error = 'Неверный пароль'
Офлайн
С передачей параметров в запрос разобрался. Спасло
# _*_ coding: utf-8 _*_
Офлайн
Вроде сам разобрался. Оказалось дальше туториала надо было прочитать 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)
Офлайн
Дальше еще интреснее. Видоизменяем процедуру подключения к базе
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')
…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 ?
Офлайн