原文链接:http://www.yihaomen.com/article/python/368.htm
作者:轻舞肥羊 日期: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 来做判断.
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
百度有详细的说明文档,如何部署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
除非申明,文章均为
一号门原创,转载请注明本文地址,谢谢!
[本日志由 轻舞肥羊 于 2013-03-13 10:07 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: bae python django
相关日志:
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: bae python django
相关日志:
评论: 9 |
引用: 0 | 查看次数:
3846
爱简单吧
[2013-08-23 08:06 PM]
Django有点笨重,BAE 却重点支持这个框架。我用tornado 作了一个小博客 bae4py.duapp.com 多多交流。
hey, 不知道你有否做过在BAE上web界面上做上传,用户是通过选中本地文件上传的,在本地的时候,我测试是正常。放在BAE上就会说没有权限access 到temp目录。不知道您是怎么解决的。qq:310963321
轻舞肥羊 于
回复
当然可以,前提是你要申请 百度 云存储,然后调用相应的API 就可以了,我的上传图片都是这样解决的。
请问一下,bae里面如何获取get、post中的信息啊?这些知识从哪里看呢?百度的python开发指南总共也没几个字
轻舞肥羊 于
回复
如果你用django的话,里面有request.POST,request.GET可以得到很多信息,这个与百度bae无关。好好看看django就知道了。
请问一下,bae怎么获取网页的get、post中的参数,这些知识该往哪里看啊?python开发指南总共都没几个字。。。
使用BAE django,我把本地数据库上传到云数据库文件的时候,我用的是从云存储bucket导入的,但是一直提示导入失败。 请大牛指点一下上传的注意事项,多谢。
小白弱弱的问一句,我在本地开发的时候,用的是Django的ORM,直接创建数据库,但是在BAE环境下面,数据库都要自己创建吗? 多谢。
轻舞肥羊 于
回复
是的,我的是自己创建的。在本地导出SQL 结构数据,在BAE 上导入的。
轻舞肥羊 于
回复
BAE 支持在线修改,其实还是很方便的。
问一下大拿:
我没有用bae这个python sdk, 用的是pybcs这个sdk, 估计是bae sdk 的一个子集,
想从django admin 中(web环境)直接上传本地文件到服务器,却总是不成功, 比如上传图片的时候要怎么把图片二进制信息添加到object里. 官方文档写的也不太清楚...有没有办法解决? QQ:35943132
我没有用bae这个python sdk, 用的是pybcs这个sdk, 估计是bae sdk 的一个子集,
想从django admin 中(web环境)直接上传本地文件到服务器,却总是不成功, 比如上传图片的时候要怎么把图片二进制信息添加到object里. 官方文档写的也不太清楚...有没有办法解决? QQ:35943132
这是打算把博客放bae上?
博客的图片打算怎么处理?
博客的图片打算怎么处理?
轻舞肥羊 于
回复
图片放到BAIDU的云存储中,可以直接调取,很方便的。
put_file 方法一直 internal server error 不知道是何故
轻舞肥羊 于
回复
我保存文件,图片到云存储都很正常,注意bucket,以及你的appkey 等。