首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery ui可排序-使用Python/Flask/SQLite保存到数据库

jQuery ui可排序-使用Python/Flask/SQLite保存到数据库
EN

Stack Overflow用户
提问于 2016-10-28 05:46:06
回答 1查看 1.7K关注 0票数 1

我需要一个拖放效果,只是发现jQuery可排序的最可行和最容易的解决方案,但我想保存后重新排序的位置。使用php/sqlite我可以做到这一点,但由于我使用的是框架flask,因此解决方案必须使用python。我在这里开始了代码搜索

html:

代码语言:javascript
复制
$(function() {
    var $sortables = $("#sortMe").sortable({
        stop: function() {
            var sortedItems = $sortables.sortable("toArray");
        }
    });
});

py:

代码语言:javascript
复制
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'

class Sortable(db.Model):
    __tablename__ = 'sortables'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    data = db.Column(db.String)

    def __init__(self, data):
        self.data = data

@app.route("/saveorder", methods=['GET', 'POST'])
def save_order():
    if request.method == "POST":

编辑。

现在,我得到了这个

html:

代码语言:javascript
复制
    $(function() {
        $('#sortMe').sortable({
            update: function(event, ui) {
                var postData = $(this).sortable('serialize');
                console.log(postData);

                $.ajax({
                    url: '/saveorder',
                    type: 'POST',
                    contentType: 'application/json',
                    dataType: 'json',
                    data: JSON.stringify({list: postData}),
                    success: function (ret) {
                        alert('JSON posted: ' + JSON.stringify(ret));
                    }
                });
            }
        });
    });

py:

代码语言:javascript
复制
@app.route("/saveorder", methods=['GET', 'POST'])
def saveorder():
    json = request.json
    print(json)

    return jsonify(json)
EN

回答 1

Stack Overflow用户

发布于 2016-11-03 21:18:29

我找到了解决方案

https://github.com/h01000110/sortable-flask

app.py

代码语言:javascript
复制
from flask import Flask, render_template, request, jsonify
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)


class Sortable(db.Model):
    __tablename__ = 'sortables'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    data = db.Column(db.String)

    def __init__(self, data):
        self.data = data


db.create_all()


@app.route('/')
def index():
    sort = Sortable.query.filter_by(id=1).first()
    ordem = str(sort.data)
    return render_template('index.html', sort=sort, ordem=ordem)


@app.route('/post', methods=['GET', 'POST'])
def post():
    json = request.json
    x = json.replace('item[]=', ',')
    y = x.replace('&,', '')
    final = y.replace(',', '')

    sort = Sortable.query.filter_by(id=1).first()
    sort.data = final

    db.session.commit()

    return jsonify(final)


if __name__ == '__main__':
    app.run(debug=True)

index.html

代码语言:javascript
复制
<html>
  <head>
    <title>Flask example</title>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script>
        $(function(){
            $('#sortMe').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>
    <ul id="sortMe">
    {% for i in ordem %}
        <li id="item_{{ i }}">item {{ i }}</li>
    {% endfor %}
    </ul>
  </body>
</html>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40294705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档