Flask
3
Вклад в тег
Если изменить настройки Apache нельзя, например, хостинг не предоставляет такой возможности, то можно воспользоваться промежуточным приложением WSGI для удаления yourapplication.fcgi из URL.
Настройте .htaccess:<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi <Files ~ (\.fcgi)> SetHandler fcgid-script Options +FollowSymLinks +ExecCGI </Files> </IfModule> <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ cgi-bin/flask-wrapper.fcgi/$1 [QSA,L] </IfModule>
Теперь настроим flask-wrapper.fcgi:#!/home/profel/python/bin/python # -*- coding: utf-8 -*- import sys, os reload(sys) sys.setdefaultencoding('utf8') sys.path.insert(0, ' /home/profel/site/') from flup.server.fcgi import WSGIServer from app import app class ScriptNameStripper(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ['SCRIPT_NAME'] = '' return self.app(environ, start_response) app = ScriptNameStripper(app) if __name__ == '__main__': WSGIServer(app).run()
import sys, os
reload(sys)
sys.setdefaultencoding('utf8')
<input name=domain type="text" value="{{ data.domain }}">
<input name=name type="text" value="{{data.name}}">
.......... и так далее..... вьюшка получилась универсальна -
можно хоть сотни input добавлять прямо в шаблоне,
главное чтоб имена были у всех разные
app.route('/setting/', methods=['GET', 'POST', 'DELETE'])
def setting():
if not session.get('logged_in'): # проверяем залогин ли usr
abort(404)
if request.method == 'DELETE': # Если метод HTTP = DELETE удаляем настройки для группы setting
db.session.query(Setting).filter_by(group='setting').delete()
db.session.commit()
return render_template('setting.html')
data = {} #создаем словарь - в нем собираем данные и отправляем обратно в форму (так как разложить data = db.session.query(Setting).all() в шаблоне без переборов у меня не хватило ума... :( , а так по-моему проще )
if request.method == 'POST':
for i in request.form.keys(): # обрабатываем каждый input по отдельности
u = db.session.query(Setting).filter_by(group='setting').filter_by(key=i).first()
if u: # если существует обновляем значением из form
u.value = request.form[i]
data[i] = request.form[i] # добавляем в словарь
else:
db.session.add(Setting(group='setting', key=i, value=request.form[i])) # в противном случае создаем новое поле в базе данных и добавляем обратно в словарь
data[i] = request.form[i]
db.session.commit() # Записать изменения в Базу данных
return render_template('root/setting.html', data=data) # как видите словарь ушел обратно к темплею, в указном выше примере показано как словарь раскладывается....
u = db.session.query(Setting).filter_by(group='setting').all() # Ну а пи простом GET запросе выгружаем все записи по группе, создаем словарь и отправляем на рендринг
for i in u:
data[i.key]=i.value
return render_template('root/setting.html', data=data)
class Setting(db.Model):
id = db.Column(db.Integer,primary_key = True)
group = db.Column(db.String(32), nullable=False, default = 'NONE', index = True)
key = db.Column(db.String(32), nullable=False, default = 'NONE', index = True)
value = db.Column(db.Text, index = True)
def get_id(self):
return self.id
def __unicode__(self):
return self.id