我想知道创建一个用于猎鹰的范围会话的最佳位置.
从阅读flask-sqlalchemy代码,它在一个圆形的方式,做这样的事情:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
try:
from greenlet import get_current as get_ident
except ImportError:
try:
from thread import get_ident
except ImportError:
from _thread import get_ident
connection_uri = 'postgresql://postgres:@localhost:5432/db'
engine = create_engine(connection_uri)
session_factory = sessionmaker(bind=engine)
session_cls = scoped_session(session_factory, scopefunc=get_ident)
session = session_cls()
Run Code Online (Sandbox Code Playgroud)
这会对猎鹰有用吗?get_ident
使用gunicorn时,功能会"做正确的事"吗?
我使用Falcon实现了一个Web服务.此服务存储状态机(pytransitions),该状态机将传递给构造函数中的服务资源.该服务与gunicorn一起运行.
Web服务启动使用RxPy的过程.在其中返回的事件on_next(event)
用于触发状态机中的转换.
错误
我希望状态机在服务和资源中都具有一致的状态,但似乎在资源中状态永远不会改变.
我们有一个试图重现这种行为的测试,但令人惊讶的是测试工作
class TochoLevel(object):
def __init__(self, tochine):
self.tochine = tochine
def on_get(self, req, res):
res.status = falcon.HTTP_200
res.body = self.tochine.state
def get_machine():
states = ["low", "medium", "high"]
transitions = [
{'trigger': 'to_medium', 'source': ['low', 'medium', 'high'], 'dest': 'medium'},
{'trigger': 'to_high', 'source': ['low', 'medium', 'high'], 'dest': 'high'},
{'trigger': 'to_low', 'source': ['low', 'medium', 'high'], 'dest': 'low'}
]
locked_factory = MachineFactory.get_predefined(locked=True)
return locked_factory(
states=states,
transitions=transitions,
initial='low',
auto_transitions=False,
queued=False …
Run Code Online (Sandbox Code Playgroud) 我尝试在我的项目中使用falcon包.问题是我没有找到从HTTP post请求获取正文数据的方法.
我使用了示例中的代码,但req.stream.read()
没有按预期返回JSON.
代码是:
raw_json = req.stream.read()
result.json(raw_json, encoding='utf-8')
resp.body = json.dumps(result_json, encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)
如何获取POST数据?
谢谢你的帮助
我是python的新手,因此是猎鹰.我开始开发一个RESTful API,到目前为止猎鹰是非常棒的.提供静态网页还有一些其他要求,我不想编写应用程序或为此生成服务器.
是否有可能从猎鹰应用程序服务静态网页?
Falcon框架中是否有办法在资源处理程序中未处理的任何非特定异常上响应 HTTP 500 状态?我试图为异常添加以下处理程序:
api.add_error_handler(Exception,
handler=lambda e,
*_: exec('raise falcon.HTTPInternalServerError("Internal Server Error", "Some error")'))
Run Code Online (Sandbox Code Playgroud)
但这使得无法抛出,例如,falcon.HTTPNotFound
它由上面的处理程序处理,我收到 500 而不是 404。
我正在使用 Selenium 使用Flask for Python在 API 端点内对网站进行无头抓取。我做了几次测试,我的 selenium 抓取代码在脚本中完美运行,并且在本地主机中作为 API 运行。但是,当我在远程服务器中部署代码时,请求总是返回502 Bad Gateway 错误。这很奇怪,因为通过日志记录,我可以看到抓取工作正常,但服务器在抓取完成处理之前以 502 响应,就好像它试图设置代理但失败一样。我还注意到,删除time.sleep
代码中的 会使其返回 200,尽管结果可能是错误的,因为它没有给 selenium 适当的时间来加载所有要抓取的页面。
我还尝试设置使用 falcon 而不是flask,但出现了类似的错误。这是我最近使用Falcon 的代码示例:
class GetUrl(object):
def on_get(self, req, resp):
"""
Get Request
:param req:
:param resp:
:return:
"""
# read parameter
req_body = req.bounded_stream.read()
json_data = json.loads(req_body.decode('utf8'))
url = json_data.get("url")
# get the url
options = Options()
options.add_argument("--headless")
driver = webdriver.Firefox(firefox_options=options)
driver.get(url)
time.sleep(5)
result = False
# check for outbound links
content = …
Run Code Online (Sandbox Code Playgroud) 当Falcon(-Framework)无法找到特定请求的路由时,将返回404.如何覆盖此默认处理程序?我想用自定义响应扩展处理程序.
我正在使用Falcon为应用程序创建 REST API 。当在不同端点上向 API 发起两个或多个请求时,不存在多线程执行(必须完成一个请求才能执行下一个请求)
问题来自于执行复杂机器学习过程(需要几十秒才能完成)的 POST 端点,并且在执行该过程时整个 API 被阻塞,因为它等待该过程完成以返回一些结果。
我正在使用 wsgiref simple_server 来服务请求:
if __name__ == '__main__':
httpd = simple_server.make_server('127.0.0.1', 8000, app)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
有没有办法使执行并行以同时服务多个请求。
我有一个简单的猎鹰应用程序,我使用以下命令在终端上运行,
gunicorn -b 0.0.0.0:5000 main:app --reload
Run Code Online (Sandbox Code Playgroud)
main.py是实例化app = falcon.API()的python文件.这有效.
所以我试着在PyCharm中设置这个配置.但是这个我无法运行.这是PyCharm配置窗口
有人可以帮助我配置此窗口以使应用程序运行.
我正在尝试使用Python和Falcon Web框架通过社交平台(Github,Facebook,Instagram)使用登录选项为RESTfull API实现OAuth2服务器.但我很难理解这件事应该如何运作.
1.1.在API方面,我正在创建一个端点/auth/login/github
,它基本上会告诉移动应用程序将客户端重定向到Github.com授权页面 - github.com/login/oauth/authorize
1.2.在Github授权页面上,用户将看到以下屏幕:
1.3.按下Authorize后,用户将
callback
使用新授予的临时授权代码进入参数(Github OAuth服务配置)中指定的页面.在我的情况下,URL将如下所示:my.api.com/auth/callback/github?code=AUTH_CODE
2.1.接收回调请求后,我解析/取出通过授权码,并以赎回从后端查询Github.com 授权代码并获得访问令牌(发送使用我的POST请求的客户端ID和客户端密钥对github.com/login/oauth/access_token
)2.2.如果一切顺利,Github将使用访问令牌回复我的POST请求,我可以使用它来获取用户个人资料详细信息(例如电子邮件)
3.1.现在我知道通过Github的授权是成功的(因为我收到了用户的电子邮件),我可以向该用户授予我自己的访问令牌,这样他就可以查询我的API端点.我这样做只是通过添加随机生成OAuth2令牌并将其插入我的数据库,同时通过使用深层链接(例如:myapp:// token)将他重定向到移动应用程序,将相同的令牌返回给用户.3.2.最后,移动应用可以通过向每个请求添加以下标头来查询我的API端点Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
这是否有意义,这是否是对RESTfull API进行社交授权的正确方法?
falconframework ×10
python ×9
gunicorn ×2
authlib ×1
falcon ×1
http ×1
http-post ×1
oauth ×1
oauth-2.0 ×1
pycharm ×1
python-3.x ×1
rx-py ×1
selenium ×1
sqlalchemy ×1