首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Flask -如何使用SubmitField删除对象?

Python Flask -如何使用SubmitField删除对象?
EN

Stack Overflow用户
提问于 2015-03-06 09:24:19
回答 2查看 3.6K关注 0票数 1

我有点困惑如何在一个页面上有一个“删除”按钮来删除当前焦点的对象。

我正在尝试将此按钮添加到/edit/以删除任何打开的id

使用Python3和Flask

forms.py

代码语言:javascript
复制
class EditForm(Form):
  name = StringField('Server Name', validators = [Length(1, 120), DataRequired()])
  ip_address = StringField('IP Address', validators = [Length(1, 16), IPAddress()])
  username = StringField('UCX User', validators = [Length(1, 64)])
  password = StringField('UCX Password', validators = [Length(1, 64)])
  description = StringField('Purpose/Description', validators = [Length(1-120)])
  protocol = RadioField('Protocol', [DataRequired()],
           choices=[('https', 'HTTPS'), ('http', 'HTTP')], default='https')

  submit = SubmitField('Submit')
  **delete = SubmitField('Delete')**

Routes.py

代码语言:javascript
复制
@servers.route('/edit/<id>', methods=['GET', 'POST'])    
def edit(id):
  server = UcxServer.query.filter_by(id=int(id)).first_or_404()
  form = EditForm(obj=server)
  if form.validate_on_submit():
      form.to_model(server)
      db.session.commit()
      flash('Your changes have been saved.')

  return render_template('addserver2.html', form=form)

Routes.py删除功能:

代码语言:javascript
复制
@servers.route('/delete/<id>')
def delete(id):

server = UcxServer.query.filter_by(id=int(id)).first_or_404()
try:
  db.session.delete(server)
  db.session.commit()
  flash('Successfully deleted the {} server'.format(server))
  return redirect(url_for('servers.index'))

模板(addserver2.html):

代码语言:javascript
复制
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block page_content %}
<div class="page-header">
<h1>UCX Server</h1>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}

所以基本上,我可以加载编辑/页面,但是我如何连接"Delete“SubmitField来调用/delete/呢?

EN

回答 2

Stack Overflow用户

发布于 2015-03-07 07:36:45

我想通了。为未来的人们张贴答案。不确定是不是最好的方法,但只用了两行代码:

对于/edit/ route,我简单地添加了这个检查。

代码语言:javascript
复制
if form.delete.data:

    return redirect(url_for('servers.delete', id=id))

这使得整个编辑路线看起来像这样:

代码语言:javascript
复制
def edit(id):
  server = UcxServer.query.filter_by(id=int(id)).first_or_404()
  form = EditForm(obj=server)
  if form.delete.data:

    return redirect(url_for('servers.delete', id=id))

  if form.validate_on_submit():
    form.to_model(server)
    db.session.commit()
    flash('Your changes have been saved.')

  return render_template('addserver2.html', form=form)
票数 3
EN

Stack Overflow用户

发布于 2015-03-06 10:09:19

也许你可以使用定制的验证器。如下所示:

代码语言:javascript
复制
delete = SubmitField('Delete', validators=delete())

有关如何使函数成为自定义验证器的信息,请查看此link。自定义验证器部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28890904

复制
相关文章

相似问题

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