Flask - 提交按钮操作数据库更新

时间:2015-09-25 03:35:56

标签: python sqlite python-2.7 flask

我想我今天可能已经太久了,而且我不能很好地解决这个问题。我对python很新,并且已经玩了大约一个星期的烧瓶,这是我的第一个真正的'我建立的应用程序请温柔。

该应用程序允许内部客户(数据库)输入他们的票号并登录表单。该表单现在提交并保存在sqlite DB中,带有ID,票证#,登录,create_time和活动标志。

在另一个页面上,我有一个可称为管理列表的页面,它会呈现当前在数据库中并标记为活动的所有票证。我已经使用jinja2 for循环填充了这个,并且有一个内置的按钮。

例如:

[ 1 ]  [ ticket number ]  [ login ]  [ button ]
[ 2 ]  [ ticket number ]  [ login ]  [ button ]

按钮是我的问题。我非常不确定如何点击特定按钮导致对数据库中该条目的操作。我希望将状态字段从1翻转为0(真假也有效),因此这些可以基本上标记为完整但仍可用于分析。

感谢阅读,这里有一些片段。

views.py

@app.route('/', methods=['GET', 'POST'])
def index():
    form = TicketForm()
    ticket = Ticket.query.filter_by(status=1)    

    if request.method == 'GET':
        return render_template('index.html', form=form, ticket=ticket)    

    elif request.method == 'POST':
        if form.validate() == False:
            flash('All fields are required, please update and try again.')
            return render_template('index.html', form=form, ticket=ticket)
        else:
            remedy = Ticket(request.form['tt'], request.form['login'], create=datetime.datetime.utcnow(), status=1)
            db.session.add(remedy)
            db.session.commit()
            flash('Your ticket has been added to the queue')
            return redirect(url_for('index'))    


@app.route('/manage', methods=['GET'])
def manage():
    if request.method == 'GET':
        ticket = Ticket.query.all()
        return render_template('manage.html', ticket=ticket)

models.py

class Ticket(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tt = db.Column(db.String(10))
    user = db.Column(db.String(20))
    create = db.Column(DateTime, default=datetime.datetime.utcnow)
    status = db.Column(db.Integer)    

    def __init__(self, tt, user, create, status):
        self.tt = tt
        self.user = user
        self.create = create
        self.status = status

manage.html

{% extends "base.html" %}    

{% block content %}
<table class="table" width=50%>
  <thead>
     <tr>
        <th>#</th>
        <th>Ticket Number</th>
        <th>Requester Login</th>
        <th>Time Requested (UTC)</th>
        <th>Cancel Request</td>
     </tr>
  </thead>
  <tbody>
{% for ticket in ticket %}
     <tr>
        <td>{{ ticket.id }}</td>
        <td>{{ ticket.tt }}</td>
        <td>{{ ticket.user }}</td>
        <td>{{ ticket.create }}</td>
        <td><button type="button" class="btn btn-xs btn-danger">Kill</button></td>
     </tr>
{% endfor %}
  </tbody>
  </table>    

{% endblock %}

1 个答案:

答案 0 :(得分:2)

通常你会添加另一个视图来处理翻转。需要注意的是,某些浏览器帮助程序会在网页上预加载“普通”链接以检查病毒并尝试有用的缓存,因此请避免使用简单链接来查找可以更改数据的链接。所以我们将改为使用表格:

将您的val dataRDD = sc.textFile(args(0)).map(line => line.split(" ")).map(x => Array(x(0).toInt, x(1).toInt, x(2).toInt)) var arr = new Array[Int](3) printArr(arr) dataRDD.map(x => {arr=x}) printArr(arr) 更改为:

<td><button type="button" class="btn btn-xs btn-danger">Kill</button></td>

然后添加一个视图来完成繁重的工作:

<td>
  <form action="{{ url_for('flip') }}" method="post">
    <input type="hidden" name="flip" value="{{ ticket.id }}"/>
    <input type="submit" class="btn btn-xs btn-danger" value="Kill"/>
  </form>
</td>

所以我们只是抓住@app.route('/flip', methods=['POST']) def flip(): ticket = Ticket.query.filter_by(id=request.form["flip"]).first_or_404() ticket.status = 0 db.session.commit() return redirect(url_for('index')) 并查看它是否存在于数据库中,如果存在,我们会将id翻转为status然后重定向({{ 1}})用户返回0视图。