3

我是一名前 PHP 开发人员,我正在努力克服我可以编写 nginx 配置脚本、创建目录、启动 nginx + PHP-FPM、上传我的代码并让它运行的心态。我想开始使用 Python 来感受它并开始创建 Web 应用程序,但是对于如何让它全部工作我有点迷茫。

尽管有些人的建议总是使用 Django 之类的框架,但我想看看这一切是如何自下而上地工作的。

我遇到了 Python Web 服务器的比较,看来 gevent 是我正在寻找的。但是这一切是如何结合在一起的呢?我仍然需要 nginx(静态内容除外)作为反向代理,还是我做一些不同的事情?我正面临“初学者失明”,我正在努力看看这一切是如何结合在一起的。

4

3 回答 3

2

我自己也是一名 Python 初学者,所以我也有同样的问题。也许更高级的用户可以填写详细信息。这是我到目前为止所做的:

最简单的入门方法是简单地制作一个可执行的 Python 脚本 (.py) 并将其放入您的 cgi-bin。然后,您可以通过 yourhost.com/cgi-bin/your_script.py 访问它。操作简单,易于用于表单处理等。

有些服务器会要求您重新启动服务器,然后它才能“看到”新的 .py 脚本,这对于快速开发来说可能非常烦人。这也是很多人使用 WSGI 等中间件的原因之一。以下是我修改 Apache 配置以启用 WSGI 的方法:

LoadModule wsgi_module libexec/apache2/mod_wsgi.so

<VirtualHost *:80>

WSGIScriptAlias /myapp /Library/WebServer/wsgi-scripts/views.wsgi

<Directory /Library/WebServer/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

views.wsgi 只是一个 Python 脚本。现在,如果我转到 localhost/myapp/anything,它将重定向到 views.wsgi。最好不要将此文件放在根目录中,否则将无法引用静态文件。

一个简单的应用程序可能看起来像这样:

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    return ['Hello world!']

environ 包含有关用户尝试到达的路径的信息,因此您可以设置一个 URL 列表,并告诉您的程序根据请求的 URL 调用哪个函数。像这样的东西:

 path      = environ.get('PATH_INFO','')
 if path.startswith('/helloworld'):
  # call your function that returns HTML code

我还没有过多地处理框架(例如 Django),但我认为其中一个优点是它们可以轻松地使用从脚本传递的任何变量来填写 HTML 模板。Django 的模板引擎允许包含变量以及与 HTML 混合的逻辑(if、for 等)。当函数被调用时,它返回的任何东西都会被发送到客户端。

我对这一切还是很陌生,所以如果这里有任何错误,请纠正我......

于 2011-06-12T00:10:28.487 回答
0

你需要一些软件来执行你的 pyton 代码。

您可以尝试使用 100% 的 python 堆栈与龙卷风

或者,您可以使用 Apache、Nginx 或 Lighttpd(我认为都是用 C 编写的),然后使用一些 mod(mod_wsgi、fgci 或 uWsgi)以使该网络服务器使用wsgi接口运行您的代码。第二个选项就像 apache+some_mod 运行 PHP 代码的方式一样。

我有在 Apache+mod_wsgi 和 Nginx+uWsgi 上运行的生产站点

于 2011-06-17T20:54:28.947 回答
0

Python 与 PHP 略有不同。Python 的一个好处是,在标准中定义了一个通用接口,允许一个人在一侧使用各种 Python 应用程序,在另一侧使用不同的 Web 服务器。它被称为 WSGI,您可以在此处阅读有关它的更多信息

这是一篇关于通过 ngnix 部署 Django 应用程序的好文章

于 2011-06-11T23:45:49.253 回答