使用Django创建你的Python BAE 程序
写在前面的扯淡之语
BAE全称Baidu App Enigine: 百度程序引擎。跟Google App Engine差不多。笔者也曾试用过其他几款,分别是:
谷歌家的,新浪家的,阿里家的。当然,如果你买得起虚拟主机,这篇就不用看了,燃烧你的毛爷爷总是能取暖的。
谷歌大多数时候都在抽风,虽然高大上,但是无奈,实在无缘。
新浪家的感觉并不好用,功能也有限。
阿里家的呢,嗯,比较贵!!!
网上一大把的是在百度搞活动的时候领了券的,笔者后知后觉,没赶上好时候。贡献了李厂长12块钱(乞丐版,先体验2个月。) 支持主流语言:Nodejs, php, java, python.因为选择的硬件配置比较低,对js和php也不是很熟,所以创建app的时候选了python。支持django,pip上有的库都能用(requirements.txt 定义)。也还比较方便。唯一不便的是,port服务并不是免费的,而且数据库只能使用公有数据库,不支持长连接,30s会断开一次。
闲话扯了这么多,也该说正题了。
与Django集成
默认创建app之后差不多有这3个文件:
app.conf favicon.ico index.py
app.conf app的配置,参考这里: 点我 这个文件一会儿是要修改的,暂时搁这里。
favicon.ico 这个是图标啦,自己换吧。
index.py 这个文件后面需要修改,以bridge BAE和Django。
安装
pip安装你的django lib, 如果有代理:
pip install --proxy serve_ip:port package_name
初始化本地工程
然后在你的工程目录下初始化你的Django init 版本:
django-admin startproject xtest
然后得到类似这样的目录结构:
$ tree
.
├── manage.py
└── xtest
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 5 files
导入bae工作目录
将这几个文件移到上一层目录:
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
删除xtest目录中的xtest目录,然后将顶层xtest目录移动到checkout的代码文件夹
这时,你checkout的代码看起来是这样的:
$ tree
.
├── app.conf
├── xtest
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── favicon.ico
├── index.py
└── manage.py
1 directory, 12 files
Bridge Django to BAE
然后修改app.conf:
handlers:
- url : /.*
script: index.py
这里是将所有的url都重定向给index.py wrap的框架来处理。
index.py 参见:BAE2.0文档
看起来像这样:
#-*- coding:utf-8 -*-
import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'xtest.settings'
path = os.path.dirname(os.path.abspath(__file__)) + '/xtest'
if path not in sys.path:
sys.path.insert(1, path)
from django.core.wsgi import get_wsgi_application
from bae.core.wsgi import WSGIApplication
application = WSGIApplication(get_wsgi_application())
注意:本人使用的是1.9.1版本的Django,所以如果是使用的1.7+的版本这样是没问题的。如果1.7一下,请参照:
import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'djangodemo.settings'
path = os.path.dirname(os.path.abspath(__file__)) + '/djangodemo'
if path not in sys.path:
sys.path.insert(1, path)
from django.core.handlers.wsgi import WSGIHandler
from bae.core.wsgi import WSGIApplication
application = WSGIApplication(WSGIHandler())
需要说明的是,BAE3.0已经不在使用bae.core.const模块,所以关于数据库的配置请参考:BAE3.0文档
配置需要的lib
在目录下添加requirements.txt文件,文件中加入依赖:
django==1.9.1
djangorestframework==3.3.2
版本号自己修改。上传代码,访问你的app页面,如果提示url不能匹配成功,则表示Django已经在工作了。导入eclipse,继续剩下的coding。
写在后面
总是有人在吐槽功能不好,性能不行,一天两毛钱,说老实话,我是没啥图的了,很满意。