首页 > 站长在线 > 在BAE上搭建python,django环境小记

在BAE上搭建python,django环境小记

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 来做判断.

程序代码 程序代码
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://www.devba.com/index.php/archives/3015.html | 开发吧

报歉!评论已关闭.