inputing možnosti pro baňky hlasování app na

hlasů
2

Udělal jsem databázové schéma pro hlasování app dělám pomocí baňky takto:

CREATE TABLE questions (
    question_id integer primary key autoincrement,
    questiontext string not null
);

CREATE TABLE choices (
    choice_id integer primary key autoincrement,
    choicetext string not null,
    question_id integer,
    FOREIGN KEY(question_id) REFERENCES questions(question_id)
);

Ale nemohl jsem přijít na to, jak se mám zeptat (v šabloně HTML) a vložte výběr do databáze. Mé ‚show_polls‘ a ‚add_polls‘ jsou níže

    @app.route('/')
def show_polls():
    cur = g.db.execute('SELECT questiontext, choicetext FROM questions q JOIN choices c ON c.question_id = q.question_id') 
    polls = [dict(question=row[0], choices=(c for c in row[1:])) for row in cur.fetchall()] 
    return render_template('show_polls.html', polls=polls)

@app.route('/add', methods=['POST'])
def add_poll():
    if not session.get('logged_in'):
        abort(401)
    g.db.execute('insert into questions (questiontext) values (?)', 
            [request.form['questiontext']])

    for i in range(4): #4 choices
        g.db.execute('insert into choices (choicetext, question_id) values(?, ?)',
                [request.form['choicetext'], 4])
    g.db.commit()
    return redirect(url_for('show_polls'))

Ale to nefunguje. Nejsem si jistý, jestli mám názory špatně, nebo rozvržení HTML část. Může mi někdo pomoct s tím, prosím?

Zde je HTML část, která dodává ankety:

{% for i in range(4) %}
            <dt>Choices:
            <dd><input type=text name=choicetext>
        {% endfor %}
Položena 07/04/2011 v 05:33
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

Bez plného šablony nebo HTML, budu předpokládat, že HTML <form>je platný. Viz HTML formulářů a vstupů , pokud máte podezření na problém tam.

Chcete-li ověřit, že forma hodnoty dosáhly svoji funkci add_poll (), zkuste použít režim Flask ladění (tj nastavena app.debug = Truepřed app.run()). Chcete-li vynutit vyvolání ladicí vložte chybu ve funkci add_poll () a znovu odeslat formulář pomocí prohlížeče. Měl by se objevit kopie TraceBack. Klikněte na ikonu ‚konzoly‘ v posledním řádku TraceBack (která by měla být chyba, kterou jste vytvořili v add_poll ()) a spustit interaktivně kontrolu objektu Request.Form.

[console ready]
>>> request.form
werkzeug.datastructures.ImmutableMultiDict({'choicetext': u''})
>>> str(request.form)
"ImmutableMultiDict([('choicetext', u'choice1'), ('choicetext', u'choice2'), ('choicetext', u'choice3'), ('choicetext', u'choice4')])"
>>> dir(request.form)
['KeyError', '__class__', '__cmp__', '__contains__', '__copy__', '__delattr__',    '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add', 'clear', 'copy', 'fromkeys', 'get', 'getlist', 'has_key', 'items', 'iteritems', 'iterkeys', 'iterlists', 'iterlistvalues', 'itervalues', 'keys', 'lists', 'listvalues', 'pop', 'popitem', 'popitemlist', 'poplist', 'setdefault',         'setlist', 'setlistdefault', 'to_dict', 'update', 'values'  ]
>>> request.form.getlist('choicetext')
[u'choice1', u'choice2', u'choice3', u'choice4']

Doufejme, že to bude jasné, co se musí změnit v add_poll () a zjednodušit budoucí ladění vaší aplikace. Hodně štěstí!

Další informace naleznete v dokumentaci k Flask.request.form a werkzeug.datastructures.MultiDict objektů. Pro příklad manipulace validaci formulář do baňky (další krok po instalatérské práce na místě), tento Flask vzor dokumentu na formuláři validaci by mohl být dobrým místem pro začátek.

Odpovězeno 07/04/2011 v 17:19
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more