这段时间一直想尝试着在SAE中使用Python,初步选择了Web.py框架做为开发框架,但是可怜SAE上的资料少的可怜,有点问题基本上解决不了,今天解决一个Session在Session的存储问题,在SAE中不能直接用本地文件存储,好像是权限的原因,我现在采用的是保存在mysql中,效果也不错。希望对大家有帮助。直接上代码了。
index.wsgi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#!/usr/bin/env python
# coding: utf-8
import os
import web
import sae
from config.url import urls
from config import settings
#是否具有调试功能
web.config.debug = False
# app = web.application(urls, globals()).wsgifunc()
# application = sae.create_wsgi_app(app)
#解决Session在SAE中的问题
app = web.application(urls, globals ())
#将session保存在数据库中
db = settings.db
store = web.session.DBStore(db, 'sessions' )
#session = web.session.Session(app, store, initializer={'access_token': 'true'})
session = web.session.Session(app, store)
web.config._session = session
application = sae.create_wsgi_app(app.wsgifunc())
url.py
#!/usr/bin/env python
# coding: utf-8
pre_fix = 'controllers.'
urls = (
'/' , pre_fix + 'todo.Index' ,
'/todo/new' , pre_fix + 'todo.New' ,
'/todo/(\d+)' , pre_fix + 'todo.View' ,
'/todo/(\d+)/edit' , pre_fix + 'todo.Edit' ,
'/todo/(\d+)/delete' , pre_fix + 'todo.Delete' ,
'/todo/(\d+)/finish' , pre_fix + 'todo.Finish' ,
'/todo/login' , pre_fix + 'login.LoginUser' ,
'/todo/checkuser' ,pre_fix + 'login.CheckUser' ,
'/todo/reset' ,pre_fix + 'todo.reset' ,
'/todo/saveupload' , 'mycontrollers.saveupload.SaveUpload'
)
setting.py
#!/usr/bin/env python
# coding: utf-8
import web
import sae.const
#数据库设定
db = web.database(dbn = 'mysql' , user = sae.const.MYSQL_USER, pw = sae.const.MYSQL_PASS, host = sae.const.MYSQL_HOST, port = 3307 , db = sae.const.MYSQL_DB)
#模板设定
render = web.template.render( 'templates/' , cache = False )
config = web.storage(
email = 'oooo@qq.com<script cf - hash = "f9e31" type = "text/javascript" >
/ * <![CDATA[ * / !function(){ try {var t = "currentScript" in document?document.currentScript:function(){ for (var t = document.getElementsByTagName( "script" ),e = t.length;e - - ;) if (t[e].getAttribute( "cf-hash" )) return t[e]}(); if (t&&t.previousSibling){var e,r,n,i,c = t.previousSibling,a = c.getAttribute( "data-cfemail" ); if (a){ for (e = "",r = parseInt(a.substr( 0 , 2 ), 16 ),n = 2 ;a.length - n;n + = 2 )i = parseInt(a.substr(n, 2 ), 16 )^r,e + = String.fromCharCode(i);e = document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}(); / * ]]> * / < / script>',
site_name = '任务跟踪' ,
site_desc = '',
static = '/static' ,
)
web.template.Template. globals [ 'config' ] = config
web.template.Template. globals [ 'render' ] = render
login.py
#!/usr/bin/env python
# coding: utf-8
import web
from config import settings
render = settings.render
def myloadhook():
global session
session = web.config._session
class LoginUser:
def GET( self ):
return render.LoginUser()
class CheckUser:
def POST( self ):
#获取Session相关信息
myloadhook()
#获取表单信息
i = web. input ()
username = i.get( 'txtUserName' , None )
password = i.get( 'txtUserPass' , None )
#从全局配置文件中得到session
session = web.config._session
if username = = 'chu888' and password = = 'chu888' :
session.access_token = 'true'
raise web.seeother( '/' )
else :
session.access_token = 'false'
raise web.seeother( '/todo/login' )
|