gpt4 book ai didi

python - 如何使用 WFastCGI + IIS + Python 3.4 开始 Python Web 编程?

转载 作者:太空宇宙 更新时间:2023-11-03 16:36:07 26 4
gpt4 key购买 nike

作为一个刚刚完成 Codeacademy 上免费类(class)的 Python 新手,我按照 this Python wfastcgi 2.2 page 上的说明进行操作。并在 IIS 上成功安装了 python 处理程序。

然后我根据 web.config 使用以下代码(我从某处改编)创建了一个 python 文件(模块)my_app.py:

def wsgi_app(environ, start_response):
status = '200 OK'
response_headers = [('Content-type','text/plain')]
start_response(status, response_headers)
return ['Hello world!\n']

导航到本地主机站点后,IIS 返回以下错误:

Error occurred while reading WSGI handler:

Traceback (most recent call last):
File "C:\Python34\lib\site-packages\wfastcgi.py", line 779, in main
env, handler = read_wsgi_handler(response.physical_path)
File "C:\Python34\lib\site-packages\wfastcgi.py", line 621, in read_wsgi_handler
handler = get_wsgi_handler(os.getenv('WSGI_HANDLER'))
File "C:\Python34\lib\site-packages\wfastcgi.py", line 594, in get_wsgi_handler
handler = handler()
TypeError: wsgi_app() missing 2 required positional arguments: 'environ' and 'start_response'


StdOut:

StdErr:

问题:

  1. 如何以及为 2 个函数参数传递什么?
  2. 使用函数启动模块似乎不是一个好主意。我可以使用类来代替吗?如果是这样,我应该如何更改此行上的 web.config:
<add key="WSGI_HANDLER" value="my_app.wsgi_app()" />

最佳答案

我的第一个建议(如果您还没有这样做)是在 IIS 中配置失败请求跟踪。然后,每当您的 WSGI 处理程序(即 my_app.wsgi_app)在开发过程中崩溃时,IIS 都会生成一个漂亮的 .xml 文件,您可以在浏览器中查看该文件,详细说明发生的情况,包括 Python 回溯,即使您的 IIS 最终配置为生成在本例中为“500 - 内部服务器错误”。

接下来,正如 Daniel Roseman 已经建议的那样,进行更改

<add key="WSGI_HANDLER" value="my_app.wsgi_app()" />

<add key="WSGI_HANDLER" value="my_app.wsgi_app" />

在您的 web.config 文件中,wfastcgi.py 将能够找到并调用您的 wsgi_app。

最后,如图所示的 wsgi_app 将(我相信)失败并出现如下 Python 回溯:

File "<the path to ...\python\pythonXX\lib\site-packages\wfastcgi.py on your system>", line 372, in send_response
raise TypeError("content must be encoded before sending: %r" % content)
TypeError: content must be encoded before sending: 'Hello world!\n'

David Beazley 的“Python:基本引用”中有关 wsgiref 的部分(我的副本中的第 541 页)描述了此编码问题的解决方案。我建议您尝试以下操作:

def wsgi_app(environ, start_response):
status = "200 OK"
headers = [("Content-Type", "text/plain; charset=utf-8")]
start_response(status, headers)

response = ["Hello world!\n"]

return (line.encode("utf-8") for line in response)

希望这有帮助。

关于python - 如何使用 WFastCGI + IIS + Python 3.4 开始 Python Web 编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37191453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com