web.py的 cookie和session

这篇主要记录下web.py的cookie和session的学习过程。

这是目录树

.
├── code.py
├── config
│   ├── __init__.py
│   ├── setting.py
│   └── url.py
├── controllers
│   ├── common.py
│   ├── __init__.py
│   └── views.py
|── templetor
    ├── login.html
    └── success.html

setting.py里面存放数据库等信息,url.py配置url的信息,common.py是登录验证代码,views.py是显示页面【好像没什么用】,templetor文件夹就是网页模板了。

setting.py源码:

​​​​​​​
#!/usr/bin/env python
# coding: utf-8
import web

db = web.database(dbn='mysql', db='dbname', user='root', pw='password')

render = web.template.render('templetor/', cache=False)

web.config.debug = False

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
# coding: utf-8
import web
db = web.database(dbn = 'mysql' , db = 'dbname' , user = 'root' , pw = 'password' )
render = web.template.render( 'templetor/' , cache = False )
web.config.debug = False

因为在web.py自带的服务器的调试模式下不能正常使用session,(原因请看cookbook),所以这里把调试模式设置为False–关闭。对了,好像没看到调试模式的功能解释,也懒得找,只知道在服务器运行的时候(python code.py),如果是在调试模式下,修改其他文件的代码后,不用重新启动服务器,服务器自动加载。

code.py源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!usr/bin/env python
# coding: utf-8
import web
from config.url import urls
app = web.application(urls, globals ())
session = web.session.Session(app, web.session.DiskStore( 'sessions' ),
initializer = { 'login' :"", 'user_name' : 'guest' })
def session_hook():
     web.ctx.session = session
app.add_processor(web.loadhook(session_hook))
if __name__ = = "__main__" :
     app.run()

因为把业务处理的代码放在了不同的py文件中,所以在其它文件中是无法获得session的【这个好奇怪,cookbook说是子应用不行,难道把代码放在不同文件就是不同应用了?】,然后处理方法【参考cookbook】,就是添加处理器,这个现在只是知道这么做,到底底层怎么实现的,以后再看了。

额,源码一个个贴出来太麻烦了。。还是贴关键代码就好了。。urls.py的代码就不贴了。等下把代码打包下当附件。

登录验证的代码:

?
1
2
3
4
5
6
7
8
9
10
11
def POST( self ):
         name, pwd = web. input ().name, web. input ().pwd
         if name ! = None and pwd ! = None :
             myvar = dict (name = name)
             result = db.select( 'tuser' , myvar, what = 'pwd' )
             if result ! = None and pwd = = result[ 0 ].pwd:
                 web.setcookie( 'test' , 'cookice_test' , 60 )
                 session.loginned = True
                 session.username = name
                 return render.success(name, 'cookie test' )
         raise web.seeother( '/login' )

web.py的的数据库操作,真的是很简单啊。。直接select一下就ok了【参考:http://webpy.org/cookbook/select.zh-cn】。设置cookie也是很简单,setcookie()函数调用下就ok了【参考http://webpy.org/cookbook/cookies.zh-cn】。session的使用,很简单,就不说了。。

这是直接查看登录后页面的处理代码:

?
1
2
3
4
5
class Success:
     def GET( self ):
         if session.loginned = = True :
             return render.success(session.username, web.cookies().get( 'test' ))
         return render.login()

首先是判断session中的loginned是否为True,如果为True,则返回success.html页面,参数有session.username和cookie中的变量test的值。

success.html的源代码

?
1
2
3
4
5
6
7
8
9
10
11
12
$def with (name, str)
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
< title >Welcome</ title >
</ head >
< body >
This is $str! $name!
</ body >
</ html >

学习中遇到的几个问题:

1、session在不同文件中的使用,之前认为是一个应用而已,所以各种尝试,不过有的方式可以。然后忘记哪些可以了,也不想重新在试了。现在记得尝试过的有:a、导入模块code中的session,b、用相同直接再声明一个,c、忘记了

2、success.html要声明两个变量,然后,因为无知,写成

?
1
2
$ def with (name)
$ def with ( str )

结果毫无疑问的语法错误,然后找了很久才猜到要写在一起,无知啊~

3、导入模块的时候一直说找不到模块,后来想起了simple todo里面好像有个__init__.py的空文件(http://simple-is-better.com/news/309),当时以为没什么用,现在才知道,要添加这个空文件,才能把文件夹当成模块导入到其它代码中。

参考资料:

web.py的cookbook: http://webpy.org/cookbook/

 转载http://jyd.me

源代码点此下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值