我使用的瓶框架建立一个网站,并正在实施的(主要是行政)行为的确认页面;即删除用户。瓶确认操作
我当前的方法(详见下文)的作品,但感觉非常笨重,好像工作,为一个简单的任务量巨大。是否有更优化的解决方案?
目前,我有一个路线开始行动:
@admin.route('/user/<int:user_id>/delete', methods=['GET'])
@login_required
@admin_required
def del_user(user_id):
user = User.query.get_or_404(user_id)
desc = "delete"
subject = user.username
action = 'admin.do_del_user'
next = url_for('admin.get_user', user_id=user.id)
return redirect(url_for('main._confirm', desc=desc, subject=subject, action=action, next=next, user_id=user.id))
会被重定向到确认路线:
@main.route('/confirm', methods=['GET', 'POST'])
def _confirm():
form = Confirm()
kwargs = {}
for arg in request.args:
if arg != 'action' or arg != 'desc' or arg != 'subject':
kwargs[arg] = request.args[arg]
action = request.args.get('action')
desc = request.args.get('desc')
subject = request.args.get('subject')
if action is None:
abort(404)
if form.validate_on_submit():
return redirect(url_for(action, confirm=form.confirm.data, **kwargs))
return render_template('_confirm.html', form=form, desc=desc, subject=subject)
然后再重定向验证确认表后做的实际行动:
@admin.route('/user/<int:user_id>/do_delete', methods=['GET'])
@login_required
@admin_required
def do_del_user(user_id):
confirm = request.args.get('confirm')
next = request.args.get('next')
if confirm:
user = User.query.get_or_404(user_id)
db.session.delete(user)
db.session.commit()
return redirect(next)
我希望有道理!请注意,desc和主题已通过确认模板,并且kwargs仅用于捕获url_for()在构建url时需要的任何内容。
为什么不这样做的符合客户端?即在模态或东西?然后,如果他们确认,实际发送帖子。 – reptilicus
请记住确认是弱点UX:“你想删除吗?”是。 “你想删除吗?”尽可能多次,然后“该死,我不打算删除它”。提供“撤消最后一个动作”是比较可取的,但实施起来要困难得多。 – msw