当然应该有一种更简洁的方式来编写这个 Flask 路由代码

我想在我的网页页脚部分编辑我的联系人,我做了这个:在我的管理页面我做了它所以我可以填写一个表格,每个联系人有 4 个输入form.contact1 form.contact2 form.contact3 form.contact4......同时我制作了一个Contacts模型包含content柱子。


我的路线代码:

@app.route('/admin/media-kontaktai', methods=['GET', 'POST'])

@login_required

def media_contacts():

    form = MediaContactsForm()


    if form.validate_on_submit():

        rows = db.session.query(func.count(Contacts.id)).scalar()

        for x in range(1, rows+1):

            erace_contact = Contacts.query.get(x)

            db.session.delete(erace_contact)

            db.session.commit()

        if form.contact1.data:

            contact = Contacts(content=form.contact1.data)

            db.session.add(contact)

            db.session.commit()

        if form.contact2.data:

            contact = Contacts(content=form.contact2.data)

            db.session.add(contact)

            db.session.commit()

        if form.contact3.data:

            contact = Contacts(content=form.contact3.data)

            db.session.add(contact)

            db.session.commit()

        if form.contact4.data:

            contact = Contacts(content=form.contact4.data)

            db.session.add(contact)

            db.session.commit()

        flash('Informacija atnaujinta!', 'success')

        return redirect(url_for('media_contacts'))

    elif request.method == 'GET':

        contact1 = Contacts.query.get(1)

        form.contact1.data = contact1.content

        contact2 = Contacts.query.get(2)

        form.contact2.data = contact2.content

        contact3 = Contacts.query.get(3)

        form.contact3.data = contact3.content

        contact4 = Contacts.query.get(4)

        form.contact4.data = contact4.content

    contacts = Contacts.query.all()

    return  render_template('a-media-kontaktai.html', title='Media ir kontaktai', form=form, contacts=contacts)


明月笑刀无情
浏览 106回答 2
2回答

繁华开满天机

这是未经测试的。看看它是否有效:for i in range (1,5):    if form['contact' + str(i)].data:        contact = Contacts(content=form['contact' + str(i)].data)        db.session.add(contact)        db.session.commit()

森栏

我还没有测试过这个,但它应该可以工作,或者至少让你走上正确的道路,了解如何进一步压缩它。@app.route('/admin/media-kontaktai', methods=['GET', 'POST'])@login_requireddef media_contacts():    form = MediaContactsForm()    if request.method == 'POST':        if form.validate_on_submit():            try:                # You can just delete all records in one go instead of                 # wasting time iterating and checking lengths                db.session.query(Contacts).delete()                db.session.commit()            except:                db.session.rollback()                        # I am iterating fields in the form that have data             # so we don't need multiple if statements            for field in [field for field in form if field.data]:                contact = Contacts(content=field.data)                db.session.add(contact)                db.session.commit()                        flash('Informacija atnaujinta!', 'success')            return redirect(url_for('media_contacts'))        else:        for field, index in enumerate(form):            for contact in Contacts.query.all():                field.data = contact.content        contacts = Contacts.query.all()    return  render_template('a-media-kontaktai.html', title='Media ir kontaktai', form=form, contacts=contacts)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python