为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2023-03-30 10:24:43
我想在我的网页页脚部分编辑我的联系人,我做了这个:在我的管理页面我做了它所以我可以填写一个表格,每个联系人有 4 个输入form.contact1 form.contact2 form.contact3 form.contact4......同时我制作了一个Contacts模型包含content柱子。我的路线代码:@app.route('/admin/media-kontaktai', methods=['GET', 'POST'])@login_requireddef 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)
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

这是未经测试的。看看它是否有效:


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()


查看完整回答
反对 回复 2023-03-30
?
森栏

TA贡献1810条经验 获得超5个赞

我还没有测试过这个,但它应该可以工作,或者至少让你走上正确的道路,了解如何进一步压缩它。


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

@login_required

def 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)



查看完整回答
反对 回复 2023-03-30
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信