在BAE上搭建python,django环境小记
By:Roy.LiuLast updated:2013-03-13
BAE 是百度推出的一个云平台,类似于谷歌GAE,新浪SAE, 但谷歌经常被 “和谐”,而SAE的使用我也未能申请成功,这里PS 一下新浪. 好在百度 今年3.9日正式开放了BAE 云平台,所以就注册了开发者,而且还抢到了1000块的代金卷。申请了一个 合作网站类型的 python 应用。
百度有详细的说明文档,如何部署django 的应用,详细请参考官方文档:http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/python
这里我想总结下要注意的几点事项。
1. 在settings.py 中数据库的配置,我这里配置是区分本地环境和BAE 环境的。用了:if 'SERVER_SOFTWARE' in os.environ 来做判断.
当然,在此之前,你还得需要在BAE 上申请一个 云数据库,用PHPADMIN 管理等。注意编码一般改为UTF-8的。
2. BAE 云环境是不能上传文件的,上传文件,必须通过个人云存储来实现。而 BAE 提供了PYTHON 云存储的SDK. 可以直接使用。当然你必须先在云存储中创建bucket,在bucket里面,你还可以创建文件夹等.
在python 中的代码如下:
参考文档: http://pythondoc.duapp.com/bcs.html
当然,还有一个独立的SDK 可以参考,可以在BAE 外部环境使用的SDK:
http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E4%BA%91%E5%AD%98%E5%82%A8#Python_SDK
3. 对于图片放大,缩小,裁剪等的处理
参考文档:http://pythondoc.duapp.com/image.html
部署了自己的一个小应用上去,还没完善,仍然在开发中: yihaomen.duapp.com
百度有详细的说明文档,如何部署django 的应用,详细请参考官方文档:http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/python
这里我想总结下要注意的几点事项。
1. 在settings.py 中数据库的配置,我这里配置是区分本地环境和BAE 环境的。用了:if 'SERVER_SOFTWARE' in os.environ 来做判断.
if 'SERVER_SOFTWARE' in os.environ: from bae.core import const DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'you_apply_database_name', 'USER': const.MYSQL_USER, 'PASSWORD': const.MYSQL_PASS, 'HOST': const.MYSQL_HOST, 'PORT': const.MYSQL_PORT, } } else: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xieyin', 'USER': 'root', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '3306', } }
当然,在此之前,你还得需要在BAE 上申请一个 云数据库,用PHPADMIN 管理等。注意编码一般改为UTF-8的。
2. BAE 云环境是不能上传文件的,上传文件,必须通过个人云存储来实现。而 BAE 提供了PYTHON 云存储的SDK. 可以直接使用。当然你必须先在云存储中创建bucket,在bucket里面,你还可以创建文件夹等.
在python 中的代码如下:
import time import os from bae.core import const from bae.api import bcs HOST = const.BCS_ADDR AK = const.ACCESS_KEY SK = const.SECRET_KEY def test_bcs(): ### 首先通过云存储管理界面,创建一个bucket bname = 'yihaomen' ### 创建BCS管理对象 baebcs = bcs.BaeBCS(HOST, AK, SK) ### 读取一个测试文件的内容 filename = os.path.dirname(__file__) + "/favicon.ico" with open(filename) as fd: data = fd.read() ### 将文件内容上传到 '/obj1' 下 o1 = '/upload/201303/obj1' e, d = baebcs.put_object(bname, o1, data) assert e == 0 ### 上传文件有一定的延迟 time.sleep(1) ### 从 '/obj1' 获取数据 e, d = baebcs.get_object(bname, o1) assert e == 0 assert d == data ### 也可以直接上传文件 o2 = '/obj2' e, d = baebcs.put_file(bname, o2, filename) ### 将object内容保存到临时目录下 tmpdir = (const.APP_TMPDIR if const.APP_TMPDIR else "/tmp") filename2 = tmpdir + "/favicon.ico" e, d = baebcs.get_to_file(bname, o2, filename2) assert e == 0 ### 列出所有的object e, d = baebcs.list_objects(bname) assert e == 0
参考文档: http://pythondoc.duapp.com/bcs.html
当然,还有一个独立的SDK 可以参考,可以在BAE 外部环境使用的SDK:
http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E4%BA%91%E5%AD%98%E5%82%A8#Python_SDK
3. 对于图片放大,缩小,裁剪等的处理
from bae.api.image import BaeImage def app(env, start_response): status = "200 OK" headers = [('Content-type', 'image/gif')] start_response(status, headers) img = BaeImage() ### 设置待处理图片 img.setSource("http://www.baidu.com/img/baidu_sylogo1.gif") ### 设置目标图片尺寸 img.setZooming(BaeImage.ZOOMING_TYPE_PIXELS, 100000) ### 设置裁剪参数 img.setCropping(0, 0, 2000, 2000) ### 设置旋转角度 img.setRotation(10) ### 设置灰度级别 img.setHue(100) ### 设置亮度级别 img.setLightness(100) ### 设置对比度级别 img.setContrast(1) ### 设置锐化级别 img.setSharpness(10) ### 设置色彩饱和度级别 img.setSaturation(10) ### 设置图片格式 img.setTranscoding('gif') ### 设置图片压缩质量 img.setQuality(20) ### 设置获取gif图片第一帧 img.setGetGifFirstFrame() ### 设置自动校准 img.setAutoRotate() ### 执行图片处理 ret = img.process() ### 返回图片base64 encoded binary data body = ret['response_params']['image_data'] import base64 return base64.b64decode(body) # 这里返回的就是图片的内容,保存下来就是图片,如果需要保存到BCS 中,结合上面的处理方式就可以保存了。
参考文档:http://pythondoc.duapp.com/image.html
部署了自己的一个小应用上去,还没完善,仍然在开发中: yihaomen.duapp.com
From:一号门
Previous:django 重设(修改)用户密码
COMMENTS