我尝试在设置mod_python时使用几个谷歌搜索教程,但每次都失败了。 你有一个好的,一步一步,坚如磐石的howto?
我的开发盒是OS X,制作 - Centos。
在Apache上运行Python有两种主要方式。 最简单的是使用CGI并编写普通的Python脚本,而第二种是使用像Django或Pylons这样的Web框架。
使用CGI非常简单。 确保您的Apache配置文件设置了cgi-bin。 如果没有,请按照他们的文档( http://httpd.apache.org/docs/2.0/howto/cgi.html )。 此时,您需要做的就是将Python脚本放在cgi-bin目录中,标准输出将成为HTTP响应。 有关详细信息,请参阅Python的文档( https://docs.python.org/library/cgi.html )。
如果要使用Web框架,则需要设置mod_python或FastCGI。 这些步骤取决于您要使用的框架。 Django提供了有关如何使用Apache设置mod_python和Django的明确说明( http://www.djangoproject.com/documentation/modpython/ )
是的,mod_python设置起来非常混乱。 这就是我做到的。
在httpd.conf中:
LoadModule python_module modules/mod_python.so
<Directory "/serverbase/htdocs/myapp">
AddHandler mod_python .py
PythonHandler myapp
PythonDebug On
并在您的应用程序目录中:
$ /serverbase/htdocs/myapp$ ls -l
total 16
-r-xr-xr-x 1 root sys 6484 May 21 15:54 myapp.py
对你希望在mod_python下运行的每个python程序重复配置。
对我来说问题不是在Apache设置中,而是在理解mod_apache如何实际使用.py文件。 模块级语句(包括if __name__=='__main__'
部分中的if __name__=='__main__'
) 不会被执行 - 我假设在命令行运行脚本的stdout将是服务器输出的内容,但这不是它的工作原理。
相反,我编写了一个名为index()
的模块级函数,并将其作为字符串返回页面的HTML。 也可以使用其他模块级函数(例如, otherFunction()
),这些函数可以作为URI中的其他段进行访问(例如, testScript/otherFunction
用于文件testScript.py
。)
显然,这比我原来的stdout概念更有意义。 更好的实际使用Python作为脚本语言的能力,而不是一种非常棒的标记语言。