Použitím
- Baňka
- Baňka-sqlalchemy
- Sqlalchemy
- jQuery
- Datatables (jQuery plugin)
- Jeditable (jQuery plugin)
Vezměme si tento návod třídu (jako vystřižená z baňky-sqlalchemy dokumentů):
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
Tyto datatables dělá žádost o Ajax a naplní tabulku. Každý td pak je vyroben upravovat na místě jeditable. Jakmile td je upraven, jeditable je požadavek POST k localhost / upravit obsahující:
- Řádek id (stejný id z třídy uživatele)
- Nová modifikovaná hodnota
- Sloupec tabulky, který byl pozměněn (pro účely tohoto argumentu předpokládejme, že existují tři sloupce id / username / email) (int)
Nyní bych chtěl, aby ve funkci, která zpracovává localhost / upravit i vzít řádku id, aby se objekt uživatele a dotaz db pro tento konkrétní řádek, co vlastnost je třeba změnit, upravit ji s novou hodnotou a zavázat k db. Tady je to, co jsem dostal tak daleko:
@app.route('/modify', methods=['GET', 'POST'])
def modify()
if request.method == 'POST' :
user = user.query.get(form.row_id)
if form.column_id == int(0):
user.id = form.value
elif form.column_id == int(1):
user.username = form.value
elif form.column_id == int(2):
user.email = form.value
else:
pass
db.session.commit()
return 'ok'
Tímto způsobem, ano, to funguje, ale theremust být amore krásné přístupu. Ten se nezdá být moc ... pythonic
Mihai