在下面的before_request()函数中,如果用户尚未登录,我想将其重定向到登录。是否有一个特殊的变量可以提供当前URL,该URL将像下面的示例那样工作?
@app.before_request
def before_request():
# the variable current_url does not exist
# but i want something that works like it
if (not 'logged_in' in session) and (current_url != '/login'):
return redirect(url_for('login'))
我需要检查当前URL是否为/login
,因为如果我不这样做,服务器将进入无限循环。
下面是使用flask登录的公认答案的实现:
@app.before_request
def require_authorization():
from flask import request
from flask.ext.login import current_user
if not (current_user.is_authenticated or request.endpoint == 'login'):
return login_manager.unauthorized()
你可以用一个装饰师。下面的示例显示了如何在特定请求之前检查API密钥:
from functools import wraps
def require_api_key(api_method):
@wraps(api_method)
def check_api_key(*args, **kwargs):
apikey = request.headers.get('ApiKey')
if apikey and apikey == SECRET_KEY:
return api_method(*args, **kwargs)
else:
abort(401)
return check_api_key
您可以使用它:
@require_api_key
您可以检查请求对象上的几个属性,并在此处记录,request.path
可能是您想要的。不过,我可以建议request.endpoint
吗,这样如果您决定将视图路由到另一个url或多个url,您就会被覆盖
@app.before_request
def before_request():
if 'logged_in' not in session and request.endpoint != 'login':
return redirect(url_for('login'))
问题内容: 我正在用React构建Flask应用程序,但最终遇到了路由问题。 后端负责成为API,因此某些路由如下所示: 以及通往React的主要路线: 我在React应用程序中使用react-router,一切正常,react- router带我进入,并获得了渲染视图,但是当我刷新页面时,Flask应用程序会处理此调用,并且会出错。 最好的解决方案是什么?我正在考虑重定向所有未调用的调用,这是不
问题内容: 在下面的函数中,如果用户尚未登录,我想将其重定向到。是否有一个特殊的变量可以为我提供当前的URL,该URL可以像下面的示例那样工作? 我需要检查当前URL是否为,因为如果不这样做,服务器将进入无限循环。 问题答案: 您可以检查请求对象上的几个属性(可能在此处记录),请参见此处记录。不过,我可以建议一下,这样一来,如果您决定将视图路由到另一个或多个URL,就会被覆盖
我尝试使用axios对烧瓶服务器进行POST: 现在是烧瓶的部分 但是,我最终会出现以下错误: 无法加载XMLHttpRequesthttp://127.0.0.1:5000/test.对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。起源'http://localhost:3000因此不允许访问。 为什么?我将按照建议设置标题
客户端代码: 服务器代码: 问题是我的用户名和密码总是空的。 我还尝试使用: 和 打印内容时,我有: 编辑: 我添加了json。转储和使用请求。获取_json(),它就成功了
我正在将Flask与Apache一起使用。当我发送带有长url(19000个字符)的GET请求时,响应是 我怀疑该请求触发了< code > werkzeug RequestURITooLarge异常或flask 。当我用相似的url长度直接向Apache发送请求时,没有错误。 有没有办法增加Flask处理的最大url长度?
动态请求路由是 linkerd 更为强大和灵活的功能之一。当 linkerd 接收到请求时,它必须以某种方式确定路由该请求到哪里。它通过为请求分配服务名称,然后应用 dtab 重写来实现。 这引入了服务目的地(例如,foo服务)和具体目的地(例如在东海岸数据中心运行的foo服务的staging版本)之间的区别。当应用程序只用服务名称来定位请求时,它们才能完全与环境无关。 流量转移 通过修改 dta