我正在尝试从简单的表单中捕获 POST 数据。
这是我第一次使用 WSGIREF,我似乎找不到正确的方法来做到这一点。
This is the form:
<form action="test" method="POST">
<input type="text" name="name">
<input type="submit"></form>
Run Code Online (Sandbox Code Playgroud)
并且该函数显然缺少正确的信息来捕获帖子:
def app(environ, start_response):
"""starts the response for the webserver"""
path = environ[ 'PATH_INFO']
method = environ['REQUEST_METHOD']
if method == 'POST':
if path.startswith('/test'):
start_response('200 OK',[('Content-type', 'text/html')])
return "POST info would go here %s" % post_info
else:
start_response('200 OK', [('Content-type', 'text/html')])
return form()
Run Code Online (Sandbox Code Playgroud) 我有一个 JavaScript 书签,当用户位于其他页面(即我的服务器上没有页面)时,它会将信息发布到(Flask 支持的)服务器。我不想通过我的服务器响应劫持用户的会话来中断用户的浏览。
我最初的想法是我可以以某种方式抑制 Flask 的 HTTP 响应;阻止它向客户端发送任何内容,这样它们就不会被神秘地重定向。我希望我可以通过从视图返回空值来做到这一点。
然后我想这可能是一些 HTTP 响应,让客户端知道信息已成功提交,但会将客户端留在当前页面。假设标题值类似于“这是您请求的结果,但您不应更改当前显示”?
我有一个Flask在gevent.WSGIServer. 为了获得流畅的开发体验,我希望启用热重载,例如,如果磁盘上加载的 python 文件发生变化,我希望服务器重新加载。由于我使用的 SSE 事件必然会阻止请求,因此我无法运行原本非常好的 Flask 内置调试服务器。在生产中我不想热重载。
我找到了@run_with_reloader装饰器,但是 1)在代码注释中,作者建议不要使用此函数,2)当我的主 py 文件中的任何函数具有此装饰器时,热重载始终处于启用状态,无论该函数是否被调用。
如何在开发过程中热重载gevent.WSGIServer?
我现在使用 HTTP 在 CherryPy Cheroot WSGI 服务器上运行 Python 2.7 Flask 应用程序,如下所示。
from cheroot.wsgi import Server as WSGIServer
from cheroot.wsgi import PathInfoDispatcher as WSGIPathInfoDispatcher
from MyFlaskApp import app
d = WSGIPathInfoDispatcher({'/': app})
server = WSGIServer(('0.0.0.0', 80), d)
if __name__ == '__main__':
try:
server.start()
except KeyboardInterrupt:
server.stop()
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能从这里转移到 HTTPS?我找到了以下说明,但它似乎不适用于我的应用程序。
from cheroot.server import HTTPServer
from cheroot.ssl.builtin import BuiltinSSLAdapter
HTTPServer.ssl_adapter = BuiltinSSLAdapter(
certificate='cert/domain.crt',
private_key='cert/domain.key')
Run Code Online (Sandbox Code Playgroud)
我可以将上述示例应用到 Cheroot 上的 Flask 应用程序吗?如果没有,Cheroot 上用于 HTTPS 的 Flask 应用程序的简单示例是什么?
我们可以简单地启动一个Django server1,python manage.py runserver 8080那么为什么我们需要server2像这样部署Django呢gunicorn myproject.wsgi?我在 google 上搜索了一下wsgi,它说wsginginx 和 Django 之间有连接,但令我困惑的是我们可以发出 http 请求(就像使用 postman 一样)server1并且一切正常。那么有什么区别呢?
目前,我有一个简单的 API,在某个内部 IIS 站点的子目录下与 Flask 一起运行。现在我认为使用 FastAPI 重写该 API 可能是个好主意。在 IIS 上运行 API 并不是一件难事,您必须web.config在 IIS 配置中创建一些内容。我知道这是使用 WSGI,但是也有可能使用 ASGI(也许与 uvicorn 和 Gunicorn 结合使用)?
重要的一件事是它必须在某个子目录下运行,称之为<iis_internal_company_server>/myapi。在 Flask 中,我包含了一个众所周知的前缀中间件,它可以按预期工作。我正在寻找类似的 FastAPI,这是否可以使用app.include_router(router, prefix='/myapi')?
做了一些研究但没有找到解决方案。也许你们中的一个人对此有一些经验。如果有,请分享。提前谢谢了。
问候,托马斯
一旦我的应用程序发送了回复,我希望GAE做一些其他事情.
处理程序看起来像这样:
class FooHandler(webapp.RequestHandler):
def post(self):
self.response.out.write('Bar')
send_response() # this is where I need help!
do_something_else() # at this point, the response should have been sent
Run Code Online (Sandbox Code Playgroud)
万一你想知道我为什么要这样做:
我需要类似线程的行为,这是GAE的沙盒环境所不允许的.因此,一个函数发送几个请求,而不关心响应.每个请求都会启动一个耗时的操作(获取资源)并将结果保存到数据存储区中,第一个函数可以使用它.
注意:请求处理程序必须发送响应.如果你不提供任何,它将等待post函数完成然后返回默认标题(当然这不是我正在寻找的行为)
如果这可以帮助,解决方案可能是使用自定义wsgi middeleware,但我不知道它是如何工作的(还)...
我正在使用CherryPy来通过WSGI为python应用程序提供服务.
我尝试对它进行基准测试,但似乎CherryPy只能处理10 req/sec.不管我做什么.
构建一个简单的应用程序,暂停3秒,以准确确定发生了什么......我可以确认10 req/sec与python脚本使用的资源无关.
__
有任何想法吗?
Pyramid使用它自己的Waitress Web服务器进行开发,但我想在Tornado下提供我的WSGI应用程序.我想我应该使用pserve .ini文件来配置它,但我无法让它工作
似乎越来越频繁,我有点pyc文件运行过时的代码.
这导致部署脚本每次擦除*.pyc,否则部署似乎不会生效.
我想知道,在长期运行的WSGI应用程序中,pyc文件有什么好处(如果有的话)?据我所知,唯一的好处是改善了启动时间,但我无法想象它的重要性 - 即使它是,每次部署新代码时,你都无法真正使用旧的pyc文件.
这让我觉得最好的做法是运行带有PYTHONDONTWRITEBYTECODE环境变量集的WSGI应用程序.
我错了吗?