序列化在Flask websi中由sqlalchemy数据库填充的可排序列表的顺序

2024-04-25 11:40:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个网站,允许管理员写在菜单项,重新安排他们拖放在一个管理页面上,序列化他们,并让他们在主页上发布的客户登陆。我对这件事的某些方面还很陌生,所以请耐心听我解释。提前谢谢。你知道吗

一个大问题索引.html我不了解jquery,而将其连接到sqlalchemy在这一点上超出了我的理解。下面的jquery是我从另一个stackoverflow问题中“挪用”的,这个问题没有完全回答我的问题。我认为AJAX很可能需要改变

你知道吗索引.html你知道吗

<!DOCTYPE html>
<html lang="en">
    <head>

        <!-- sortable script -->
        <script>
         $(function() {
            $( "#sortable" ).sortable({
                update: function(event, ui) {
                    var postData = $(this).sortable('serialize');

                    $.ajax({
                        type: 'POST',
                        contentType: 'application/json',
                        data: JSON.stringify(postData),
                        dataType: 'json',
                        url: '/post'
                    });
                }
            });
        });


        </script>

    </head>
    <body>
        <div class="container">
            <h1>Admin Page</h1>

            <!-- FORM (I have left this out for clarity) -->


            <!-- MENU ITEMS -->

            <div class="container menu">
                <ul id="sortable">
                    {% for item in items %}
                    <li class="nobull" id="item_{{ item.id }}">
                        <div class="menu_item">
                            {% if item.head == True %}

                                <div class="menu_heading">
                                    {{ item.name }}

                                </div>

                            {% else %}

                                <div class="menu_item_name">
                                    {{ item.name }}
                                </div>
                                <div class="menu_item_description">
                                    {{ item.description }}
                                </div>

                            {% endif %}

                            <a href="{{ url_for('delete_item', item_id=item.id) }}">Delete</a>

                        </div>
                    </li>
                    {% endfor %}
                </ul>

                <a href="{{ url_for('post') }}" class="save">Save & Post</a>
            </div>


        </div>


    </body>
</html>

routes文件的重点是post()以及如何序列化重新排序的菜单项

你知道吗路线.py你知道吗

from flask import Flask, render_template, flash, redirect, url_for
from siamsite.forms import NewItem
from flask_sqlalchemy import SQLAlchemy

class MenuItem(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # rank = db.Column(db.Integer)
    name = db.Column(db.String(100), unique=False, nullable=False)
    description = db.Column(db.Text)
    head = db.Column(db.Boolean, default=False)
    spice = db.Column(db.Boolean, default=False)
    vegetarian = db.Column(db.Boolean, default=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')

    def __repr__(self):
        return f"MenuItems('{self.name}', '{self.description}')"

@app.route("/", methods=['GET', 'POST'])
def index():
    form = NewItem()
    if form.validate_on_submit():
        new_item = MenuItem(name=form.name.data,
                            description=form.description.data,
                            head=form.head.data
                            )
        db.session.add(new_item)
        db.session.commit()
        flash('You successfully added a new menu item!', 'success')
        return redirect(url_for('index'))
    items = MenuItem.query.all()
    return render_template('index.html', form=form, items=items, title='Siam Street Food')


@app.route("/post", methods=['GET', 'POST'])
def post():

    #serialize the re-ordered list here by changing the item MenuItem id
    #in sqlalchemy to make it match the order of the re-ordered list        

    db.session.commit()

    return redirect(url_for('index'))

Tags: namedivformidfalseurlfordb