烧瓶不停地限制RESTful API访问 - python

我只希望登录用户访问我的RESTfull API。我一直在搜索,找不到任何告诉我该怎么做的资料。很奇怪,因为我认为保护数据非常普遍。

我正在将Flask项目与Flask-loginflask-Restless一起使用。我通过SQL-alchemy类对数据进行增删改密,以访问我的MySQL数据库。我创建如下的RESTfull API:

api_manager = APIManager(app, flask_sqlalchemy_db=db)
api_manager.create_api(Items, methods=['GET', 'POST', 'DELETE', 'PUT'])

对于未登录的用户,我应该如何限制对RESTfull api的访问,或者不能使用flask-restless来做到这一点?如果没有,我应该/应该怎样使用?

我正在尝试一些技巧,因此欢迎您提出任何建议!

提前致谢

经过更多的玩耍之后,我找到了解决方案。可能不是最好的方法,但是不需要太多代码就可以解决问题:

@app.before_request
def before_request():
    if ('/api/' in str(request.url_rule)) && (not current_user.is_authenticated()):
        return redirect('/login')

这是正确的方法吗?对于每个可能的HTTP请求,添加Preprosessors是很多代码。 https://flask-restless.readthedocs.org/en/latest/customizing.html#request-preprocessors-and-postprocessors

参考方案

看来您可以通过customizing Flask-Restless实现所需的功能。您可以使用预处理器来拦截您的API请求。

这是一个片段。请注意,这是未经测试的代码段。

def auth_func(*args, **kw):
    if not current_user.is_authenticated():
        raise ProcessingException(description='Not authenticated!', code=401)

api_manager = APIManager(app, flask_sqlalchemy_db=db)
api_manager.create_api(Items, methods=['GET', 'POST', 'DELETE', 'PUT'], preprocessors=dict(POST=[auth_func]))

同样,您可以将预处理器注册到您的APIManager,以对所有API启用它。

api_manager = APIManager(app, flask_sqlalchemy_db=db, preprocessors=dict(POST=[auth_func]))
api_manager.create_api(Items, methods=['GET', 'POST', 'DELETE', 'PUT'])

Flask-RESTful-返回自定义响应格式 - python

我已经按照以下Flask-RESTful文档定义了自定义响应格式。app = Flask(__name__) api = restful.Api(app) @api.representation('application/octet-stream') def binary(data, code, headers=None): resp =…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

带后台线程的烧瓶应用程序 - python

我正在创建一个flask应用程序,对于一个请求,我需要运行一些长时间运行的作业,而无需在UI上等待。我将创建一个线程并将消息发送到UI。该线程将计算并更新数据库。但是,UI在提交后会看到一条消息。下面是我的实现,但是它正在运行线程,然后将输出发送到我不喜欢的UI。如何在后台运行此线程?@app.route('/someJob') def …