部署新浪SAE web.py Session及图片上传等问题注意事项
1.以下几条代码解决编码问题
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
2.图片上传问题
需要开通sina的Storage服务,随便建个什么Domain,注意HTML代码,那个enctype属性一定要写,两个上传图片的控件叫avatar和photo
<form action="details" method="post" enctype="multipart/form-data">
以下web.input中要给出参数,不然无法读取图片和图片名
i=web.input(avatar={},photo={})
var = dict(name=shop_session.username)
n = db.update('T_User', where='username = $name', vars=var, person_name=i.name, sex=i.sex,birthday=i.birthday,address=i.address,hobby=i.hobby,avatar='http://dataguruzw-attachment.stor.sinaapp.com/'+shop_session.username+"_avatar.jpg",photo='http://dataguruzw-attachment.stor.sinaapp.com/'+shop_session.username+"_photo.jpg",introduce=i.introduce)
s=sae.storage.Client()
ob = sae.storage.Object(i.avatar.file.read())
s.put('attachment',shop_session.username+"_avatar.jpg",ob)
ob = sae.storage.Object(i.photo.file.read())
s.put('attachment',shop_session.username+"_photo.jpg",ob)
3.Session问题
网上转来的好文,感谢作者让我这个python小白顺利能完成作业,补充几点小白需要知道的python基础知识
需要开通SAE的Storage,并添加名为Session的Domain,并引入以下几个是叫包还是什么,完后你的Session不叫Session,叫shop_session
import time
import sae.storage
from sae.ext.storage import monkey
1,解决官方sae样例代码中的误区
注释掉代码为官方提供的样例代码,但官方代码为了方便在APP实例化时直接调用了wsgifunc(),但这样会造成部分webpy属性的调用错误.如调用app.add_processor的失败.
2,设定全局session的调用
3,解决sae环境中无法读写本地目录问题
SAE环境下python无法对本地目录进行读写操作,但sae提供了Storage,并且可以将Storage像本地磁盘一样挂载使用.所以添加如下代码:
monkey.patch_all()
session_root = '/s/session/'
4,解决SEA的Storage作为磁盘挂载后但不支持os.remove方法
"目前支持(patch)的文件系统接口函数为: open, os.listdir, os.mkdir, os.path.exists, os.path.isdir, os.open, os.fdopen, os.close, os.chmod, os.stat, os.unlink, os.rmdir"但webpy在DiskStore.cleanup方法却是调用的os.remove,需要改为os.unlink
#因新浪SAE的stroge不支持挂载为路径后的os.remove函数,故重新改在一下
class DiskStore(web.session.DiskStore):
def __init__(self, root):
web.session.DiskStore.__init__(self, root)
# if the storage root doesn't exists, create it.
# self.root = root
def __delitem__(self, key):
path = self._get_path(key)
if os.path.exists(path):
os.unlink(path)
def cleanup(self, timeout):
now = time.time()
for f in os.listdir(self.root):
path = self._get_path(f)
atime = os.stat(path).st_atime
if now - atime > timeout :
os.unlink(path)#改写为unlink函数
OK,现在session已经可以正常使用了.
editer by zdl0812@163.com 欢迎转载,请注明出处
部署新浪SAE web.py Session及图片上传等问题注意事项的更多相关文章
- 详细阐述Web开发中的图片上传问题
Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java ...
- 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- web高拍仪图片上传
公司引进高拍仪,想拍完照片点上传按钮直接上传图片.高拍仪接口能提供照片的本地路径,现在的问题是不用file控件选择,只有路径,不知道如何上传到服务器,求解决方案. 方法: 使用泽优Web图片上传控件( ...
- 用Web Service实现客户端图片上传到网站
由于项目需要,通过本地客户端,把图片上传到网站.通过webservice. 这是客户端代码: private void btnimg_Click(object sender, EventArgs e) ...
- 有关于weiphp2.00611上传sae的一些注意(图片上传解决方案)
一.安装中注意的事项 安装时使用的系统为weiphp2.0611 版本 1.将所有文件上传到代码库中 2.按照步骤进行安装weiphp,注意在数据库导入的时候需要手动导入. ...
- python3 flask部署新浪sae
第一步需要注册新浪云 https://sae.sinacloud.com/ 第二步 创建应用,注:直接选python2.7不用纠结,后面可以指定python版本,共享版 第三步 找到git仓库信息 第 ...
- CI框架程序--本地调试之后部署新浪SAE
前几天给朋友写了个简单的网站, 想想还是部署到服务器上让朋友看一下效果! 用CI框架写的,有个SAE新浪云的账号,可以用!就部署到上面去了!途中遇到了一些问题!一一解决了! 在这里分享一下 供遇到这些 ...
- 新浪SAE快速上手教程
新浪SAE快速上手教程[1]如何免费开通新浪云 2014-07-18 > 新浪SAE快速上手教程[2]如何创建.删除应用 2014-07-24 > 新浪SAE快速上手教程[3]如何上传应 ...
随机推荐
- try-catch语句讲解
try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序. 引发异常时,公共语言运行时 (CLR) 会查找处理此异常的 catch 语句. 如果当 ...
- Unity3D之Assetbundle
原地址: Unity3D之Assetbundle 有几个地方需要注意下 1.如何解决资源重复加载的问题 2.初始化了就直接出现在场景中了 感觉怪怪的 3.标红的地方要注意下 prefab上挂载的脚 ...
- 图解JavaScript执行环境结构
JavaScript引擎在开始编译代码的时候,会对JavaScript代码进行一次预编译,生成一个执行环境,比如如下代码: window.onload=function(){ function sub ...
- C# virtual和override
本文转载来自于:http://bollaxu.iteye.com/blog/1662855 在函数的声明中,当有“virtual”修饰的时候,和没有virtual有什么区别呢?最重要的一点就是调用实例 ...
- HDU 1392 Surround the Trees (Graham求凸包周长)
题目链接 题意 : 让你找出最小的凸包周长 . 思路 : 用Graham求出凸包,然后对每条边求长即可. Graham详解 #include <stdio.h> #include < ...
- ExtJs之Ext.apply
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- Linux网络编程7——使用TCP实现双方聊天
思路 主线程负责发送消息,另一线程负责接收消息.服务端和客户端均是如此. 注意 当A方close掉用于通信的socket端口后,该端口是不会立即关闭的.因为此时可能B方的信息还没send完.因此,此时 ...
- Java IO(四)
对象序列化 对象序列化又叫对象的持久化,对象的串行化(或反串行化) 当使用Serializable接口实现序列化操作时,如果一个对象中的某个属性不希望被序列化,则可以使用transient关键字进行声 ...
- java获取系统当前时间
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式 System.out.print(df. ...
- lintcode: 左填充
题目 实现一个leftpad库,如果不知道什么是leftpad可以看样例 样例 leftpad("foo", 5) >> " foo" leftpa ...