我正在使用Flask框架创建网站,并正在为(主要是管理上的)操作实施确认页面;即删除用户。
我当前的方法(在下面详细介绍)可以工作,但是感觉很笨拙,似乎对于一个简单的任务来说需要大量工作。有更好的解决方案吗?
目前,我有一条路线可以启动该操作:
@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和subject,而kwargs只是为了捕获构建url时需要的url_for()。
我认为最简单的方法是在客户端进行确认。它在外观上并不漂亮,但是a window.confirm('Are you sure?');
会做同样的事情。
也就是说,如果你只是在寻找服务器端解决方案,则可以创建一个@confirmation_required
装饰器来处理重定向。然后,你可以包装需要确认的任何视图,并传入一个函数以获取要显示的消息。
from functools import wraps
from urllib import urlencode, quote, unquote
from flask import Flask, request, redirect, url_for, render_template
app = Flask(__name__)
def confirmation_required(desc_fn):
def inner(f):
@wraps(f)
def wrapper(*args, **kwargs):
if request.args.get('confirm') != '1':
desc = desc_fn()
return redirect(url_for('confirm',
desc=desc, action_url=quote(request.url)))
return f(*args, **kwargs)
return wrapper
return inner
@app.route('/confirm')
def confirm():
desc = request.args['desc']
action_url = unquote(request.args['action_url'])
return render_template('_confirm.html', desc=desc, action_url=action_url)
def you_sure():
return "Are you sure?"
@app.route('/')
@confirmation_required(you_sure)
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True)
_confirm.html:
<html xmlns="http://www.w3.org/1999/html">
<body>
<h1>{{ desc }}</h1>
<form action="{{ action_url }}" method="GET">
<input type="hidden" name="confirm" value="1">
<input type="submit" value="Yes">
</form>
</body>
</html>
请注意,尽管仅当你要包装的视图接受GET时才执行此重定向,并且对任何修改数据的操作都允许GET并不是一个好主意。(请参阅为什么不应该在HTTP GET请求上修改数据?)
更新:如果你真的想要一个与POST一起使用的通用解决方案,我将切换到基于类的视图并创建一个处理确认逻辑的mixin。就像是:
class ConfirmationViewMixin(object):
confirmation_template = '_confirm.html'
def get_confirmation_context(self):
# implement this in your view class
raise NotImplementedError()
def post(self):
if request.args.get('confirm') == '1':
return super(ConfirmationViewMixin, self).post()
return render_template(
self.confirmation_template, **self.get_confirmation_context())
我曾尝试用谷歌搜索这个,但没有成功。如果我使用的是,并且我有一个用Java编写的客户机,那么消息何时被确认?我正在使用一个,它包含一个方法。确认信息是在完成之前还是在完成之后或在其他时间点发送回服务器?提前感谢任何人提供的任何帮助!
我有一个springboot应用程序,它侦听Kafka流并将记录发送到某个服务以进行进一步处理。服务有时可能会失败。注释中提到了异常情况。到目前为止,我自己模拟了服务成功和异常场景。 侦听器代码: 用户工厂配置如下: 由于REST服务正在抛出RestClientException,它应该进入上面提到的if块。关于FixedBackOff,我不希望SeekToCurrentErrorHandler执
问题内容: 我有一个将使用flask和mongodb的应用程序;我可能会将其托管在机架空间上。 我需要了解flask验证的工作原理。我没有找到有关此主题的太多信息。是否有有关如何推出自己的解决方案的完整教程?如果不是这样,我当然想听听您flask应用程序的处理方式的一些想法。 大PS: 我只是考虑过 我还需要打开一个真实的API。该API的一部分将在前端用于AJAX。如何保护应用程序的那部分? 谁
我使用的是AWS Cognito的JavaScript SDK(http://docs.AWS.amazon.com/Cognito/latest/developerGuide/using-amazon-cognito-user-identity-pools-javascript-examples.html)。
以前我读取队列中的所有消息,但现在我必须根据用户的选择返回特定数量的消息(计数)。 我试着相应地改变for循环,但是由于自动应答,它读取了所有的消息。所以我尝试在配置文件中将它改为手动。 在我的程序中,如何在读取 msg 后手动确认消息(目前我正在使用 AmqpTemplate 接收,我没有频道的参考)? 任何帮助都是非常值得赞赏的,提前表示感谢。
我正在用Java实现Akka-Alpakka,用于从ActiveMQ队列消费和生成队列。我可以成功地从队列中消费,但还不能实现应用程序级消息确认。 我的目标是使用队列中的消息,并将它们发送给另一个参与者进行处理。当该角色完成处理后,我希望它能够控制ActiveMQ中的消息确认。这大概是通过向另一个可以进行确认的参与者发送消息、调用消息本身的确认函数或其他方式来完成的。 在我的测试中,两条消息被放入