代码之家  ›  专栏  ›  技术社区  ›  Mahir

如何确保Flask应用程序管理面板中的项目具有一键删除功能?

  •  1
  • Mahir  · 技术社区  · 2 年前

    我有一个Flask应用程序,我在其中实现了一个管理面板功能。在这个面板中,我显示了从数据库中检索到的项目列表(在本例中是医生),每个项目都有一个与之相关的删除按钮。然而,我注意到,我必须单击两次删除按钮才能真正删除该项目。

    Image of The Page

    app.py Python文件 :

    @app.route('/admin_panel_menu/<panel_id>', methods=['GET', 'POST'])
    @app.route('/admin_panel_menu/<panel_id>/sil/<doktor>', methods=['GET', 'POST'])
    def admin_panel_menu(panel_id, doktor=None):
        # content_id'ye göre ilgili içeriği gönder
        if panel_id == 'Doktor':
            doktorlar = Doktor.doktor_goster()
            if doktor :
                Doktor.doktor_sil(doktor)
            if request.method == "POST":
                Doktor.doktor_ekle()
            return render_template('d_admin.html', doktorlar = doktorlar, panel_id=panel_id)
        if panel_id == 'Hasta':
            return render_template('h_admin.html')
        if panel_id == 'Rapor':
            return render_template('r_admin.html')
    

    d_admin.html HTML文件 :

    <div class="sil">
        <h1>Doktor Sil</h1>
        <form action="#">
            <table class="table table-striped">
                <thead>
                    <tr>
                        <td scope="col">Doktor ID</td>
                        <td scope="col">Ad</td>
                        <td scope="col">Soyad</td>
                        <td scope="col">Uzmanlık Alanı</td>
                        <td scope="col">Telefon</td>
                        <td scope="col">Doğum Tarihi</td>
                        <td scope="col">-</td>
                    </tr>
                </thead>
                <tbody>
                    {% for doktor in doktorlar %}
                    <tr>
                        <td>{{doktor[0]}}</td>
                        <td>{{doktor[1]}}</td>
                        <td>{{doktor[2]}}</td>
                        <td>{{doktor[4]}}</td>
                        <td>{{doktor[5]}}</td>
                        <td>{{doktor[6]}}</td>
                        <td>
                            <a href="/admin_panel_menu/{{panel_id}}/sil/{{ doktor[0] }}"> - Sil - </a>
                        </td>
                    </tr>
                    {% endfor %}
                </tbody>
            </table>
        </form>
    </div>
    

    如代码中所示,单击删除按钮会向发送GET请求 /admin_panel_menu/{{panel_id}}/sil/{{ doktor[0] }} ,并且删除操作仅在第二次单击时执行。

    如何修改此设置以启用单击删除功能,确保项目在第一次单击删除按钮时被删除?非常感谢。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Ronak    2 年前

    导致问题的原因是 Doktor.doktor_goster() 函数在删除数据之前被调用,因此数据被发送到前端 HTML 是在数据删除之前的,所以我改了你的代码来调用函数 Doktor.Doktor_goster() 删除数据后,带有变量 doktorlar .

    @app.route('/admin_panel_menu/<panel_id>', methods=['GET', 'POST'])
    @app.route('/admin_panel_menu/<panel_id>/sil/<doktor>', methods=['GET', 'POST'])
    def admin_panel_menu(panel_id, doktor=None):
        # content_id'ye göre ilgili içeriği gönder
        if panel_id == 'Doktor':
            if doktor :
                Doktor.doktor_sil(doktor)
            if request.method == "POST":
                Doktor.doktor_ekle()
            doktorlar = Doktor.doktor_goster()
            return render_template('d_admin.html', doktorlar = doktorlar, panel_id=panel_id)
        if panel_id == 'Hasta':
            return render_template('h_admin.html')
        if panel_id == 'Rapor':
            return render_template('r_admin.html')