Python编写的网络应用如何部署?
我以前是个PHP开发者,现在有点难以适应新的思维方式。我习惯了写nginx配置文件,创建目录,启动nginx和PHP-FPM,然后上传我的代码就能运行。但现在我想开始学习Python,想感受一下这个语言,并开始制作网页应用,但我有点迷茫,不知道该怎么把这些东西搞定。
虽然有些人会建议我使用像Django这样的框架,但我想从最基础的地方了解这一切是怎么运作的。
我看到了一些关于Python网页服务器的比较,发现gevent似乎是我想要的。但这些东西是怎么结合在一起的呢?我还需要nginx作为反向代理吗(除了处理静态内容)?还是说我需要做点别的?我现在有点“初学者盲点”,很难看清楚这些东西是怎么联系在一起的。
3 个回答
我自己也是个初学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等)。当函数被调用时,它返回的内容会发送给客户端。
我对这一切还很陌生,如果这里有错误,请大家指正...