部署新浪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 = web.application(urls, globals()).wsgifunc()
app = web.application(urls, globals())

#application = sae.create_wsgi_app(app)
application = sae.create_wsgi_app(app.wsgifunc())

注释掉代码为官方提供的样例代码,但官方代码为了方便在APP实例化时直接调用了wsgifunc(),但这样会造成部分webpy属性的调用错误.如调用app.add_processor的失败.

2,设定全局session的调用

#增加session管理,将session放入全局的web.config
if web.config.get(‘_session‘) is None:
shop_session = web.session.Session(app, DiskStore(session_root),
initializer={‘login_shop_id‘:‘NULL‘})
web.config._session = shop_session
else:
shop_session = web.config._session

def session_hook():
web.ctx.session = shop_session

app.add_processor(web.loadhook(session_hook))

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 [email protected] 欢迎转载,请注明出处

时间: 2024-10-12 03:35:11

部署新浪SAE web.py Session及图片上传等问题注意事项的相关文章

详细阐述Web开发中的图片上传问题

Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java Web开发的时候,经验不足,属于能力问题,比如对技术认识不到位. 2.图片上传是一类问题,而不是一个问题.   比如,大家都会做饭,但每个人自己做饭是有不同的.做了一个人吃.一家人吃.喜事待客做好几桌,是不同的问题.   同样的,图片上传,是上传一张还是多张,前端的用户体验如何,后端逻辑处理是否正确,图片存

Web Service(1):用Web Service实现客户端图片上传到网站

由于项目需要,通过本地客户端,把图片上传到网站.通过webservice. 这是客户端代码: 1 private void btnimg_Click(object sender, EventArgs e) 2 { 3 this.yanzheng(); 4 mylocalhost.MySoapHeader myheader = new mylocalhost.MySoapHeader();///这是soapheader 5 mylocalhost.MyWebService myService =

CI框架程序--本地调试之后部署新浪SAE

转载之前写的一点点东西,希望可以帮助到一些朋友 前几天给朋友写了个简单的网站, 想想还是部署到服务器上让朋友看一下效果! 用CI框架写的,有个SAE新浪云的账号,可以用!就部署到上面去了!途中遇到了一些问题!一一解决了! 在这里分享一下 供遇到这些问题的朋友们做个参考! 首先遇到的问题就导入SQL数据的时候出错,由于我SAE上之前写过一个程序,导入数据的时候,怎么选都选不到刚创建的MySql上, 貌似是要绑定一下! 我用的mac 火狐浏览器, 好像SAE上的MySQL的phpmyadmin跟这个

新浪SAE快速上手教程

 新浪SAE快速上手教程[1]如何免费开通新浪云 2014-07-18 > 新浪SAE快速上手教程[2]如何创建.删除应用 2014-07-24 > 新浪SAE快速上手教程[3]如何上传应用代码包 2014-07-24 > 新浪SAE快速上手教程[4]如何在线编辑代码? 2014-07-28 > 新浪SAE快速上手教程[5]如何用svn部署代码 2014-07-28 http://jingyan.baidu.com/season/43090

使用新浪SAE部署Django1.6

第一步:注册新浪SAE账号,下载TortoiseSVN. 第二步:创建新应用. 注册应用名称,注册二级域名,开发语言选择Python2.7版本,然后进入应用管理界面,第一件事先初始化Mysql. 然后点击代码管理,创建一个版本,版本号为1,创建成功之后可以看到类似的信息. 第三步:使用SVN部署代码. 首先在合适的位置创建一个svn文件夹,比如 E:\svn\. 然后,在svn下面再创建一个文件夹,名字是在创建应用时填在二级域名里的名字,如pylabsite. 鼠标右击文件夹pylabsite,

在新浪SAE上部署PHP项目记录

新浪SAE: http://sae.sina.com.cn 部署步骤: 1.需先注册用户.2.进入用户管理后台--添加应用--填入相关的域名,项目名称,项目描述等. 3.在本地电脑上,命名好与sae上所填的项目名称一致,数据库名称也一致,然后在项目文件的config.php: 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => 'test0527', // 数据库名,需与项目名称一致

新浪SAE部署node.js(秒懂版)

最近做了一个关于音乐的小项目想发布到公网,看了看大厂的云虚拟主机感觉不太划算,有大佬告诉我可以试试新浪SAE,我打开新浪云官网感觉还不错,决定在他上面部署看看. 找到产品-云应用SAE-创建新应用,填写好你项目的名字,就跳转到代码管理页面 我的是node服务器SAE只支持git上传代码,所以按照提示使用git上传部署代码,clone一个新浪云空仓库到本地 之后把你的项目放到clone的文件夹中,git打开文件夹, 添加所有文件到git 提交 链接仓库,这里需要你输入你的用户名和安全邮箱 用户名和

微信公众号+python+新浪SAE实现实时天气预报功能

本文主要谈谈如何做一个具有天气预报功能的公众号. 话不多说先上图,实现的功能如下图所示: 点击微信右下角的"+"号,分享任意一个位置信息,公众号后台自动回复当地的天气情况.这里的天气预报是用python从中国天气网抓取的雷达数据.有没有更精准的数据源呢,当然有啦,但这不是本文的重点,这里我就不详说了. 用到的工具:新浪SAE + 微信公众平台 + python2.7(新浪SAE目前仅支持2.7版本) 由于本文的重点不是使用python搭建微信公众平台,网上已经有很多不错的教程,为了避免

新浪SAE上搭建WordPress个人博客网站-开篇

新浪SAE上搭建WordPress个人博客网站-开篇 2014年5月29日 在开始这篇博客之前,笔者在这里先普及两个东西: SAE,Sina App Engine的简称,是新浪的内部开发的云计算平台,在这里开发者可以创建Web应用和移动应用.我们创建好的应用就可以部署到SAE服务器上,它会帮我们进行负载均衡,SAE提供很多功能和服务,详细内容请到http://sae.sina.com.cn/进行查看. WordPress想必很多个人站长都非常熟悉了,它是一种使用PHP语言和MySQL数据库开发的