您的位置:首页 > 其它

webpy实现简单的登录注册和对应验证

2017-11-23 22:58 585 查看
结构图如下:



主程序如下:

#coding=utf-8
import sys,hashlib
reload(sys)
sys.setdefaultencoding('utf8')
import web
web.config.debug = False
from web import form
db = web.database(dbn='postgres', user='postgres', pw='redhat', db='lockey')
#数据库连接
render = web.template.render('templates/')
#定义渲染模板位置
urls = (
'/', 'index',
'/register','register',
'/login', 'login',
'/logout','logout'
)
#定义url
app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'username': None})
myform = form.Form(
form.Textbox("用户名",
form.notnull,
form.regexp('[A-Za-z0-9\-]+', 'Must be alpha or digit!'),
form.Validator('Must be more than 5 characters!', lambda y:len(y)>5)),
form.Textbox("姓名",
form.notnull,
form.regexp('\d+', 'Must be a digit'),
form.Validator('Must be more than 5', lambda x:int(x)>5)),
form.Password('密码'),
form.Password('密码确认'))

class index:
def GET(self):
# make sure you create a copy of the form by calling it (line above)
# Otherwise changes will appear globally
if not session.username:
raise web.seeother('/login')
else:
username = session.username
return render.index(username)
#登录表单form模板
loginform = form.Form(
form.Textbox('username',
form.notnull,
form.regexp('[A-Za-z0-9\-]+', 'Must be alpha or digit!'),
form.Validator('Must be more than 5 characters!', lambda y:len(y)>5)),
form.Password('password',
form.notnull,
form.regexp('[A-Za-z0-9\-]+', 'Must be alpha or digit!'),
form.Validator('Must be more than 5 characters!', lambda y:len(y)>5)),
form.Button('Login')
)

class register:
def GET(self):
return render.register()
def POST(self):
i = web.input()
if i.username:
userInsert = db.insert('users', name=i.username,age=i.age,passwd=hashlib.md5(i.pwd1).hexdigest())
return render.index(i.username)
else:
return render.register()
class login:
def GET(self):
form = loginform()
# make sure you create a copy of the form by calling it (line above)
# Otherwise changes will appear globally
return render.login(form,user='user')

def POST(self):
form = loginform()
if not form.validates():
return render.login(form,user='user')
else:
# form.d.boe and form['boe'].value are equivalent ways of
# extracting the validated arguments from the form.
#users = db.select('users',where={'name':form.d.username})
users = db.query('select * from users where name=$name', vars={'name':form.d.username})
result = users[0]#None
#for user in users:
#    result = user
if result and result.passwd == hashlib.md5(form.d.password).hexdigest():
session.username = form.d.username
raise web.seeother('/')
return render.login(form,user=None)

class logout:
def GET(self):
session.username = None
raise web.seeother('/')

if __name__=="__main__":
app.run()


各模板文件如下:

[root@original templates]# cat index.html

$def with (username)
$if username:
I just wanted to say <em>hello</em> to $username.
$else:
Not correctly loged in, please click logout to relogin!

<h1><a href="/logout">logout</a></h1>


[root@original templates]# cat login.html

$def with (form,user)

<form name="main" method="post">
$if not form.valid: <p class="error">There are some items not correct, please try again!</p>
$if not user:<p class="error">Username or password not correct, please try again!</p>
$:form.render()
</form>
<h1><a href="/register">Sign Up</a></h1>


[root@original templates]# cat register.html

<form name="main" method="post">
Username <input type="text" name="username"/>
Age <input type="text" name="age"/>
Password <input type="password" name="pwd1"/>
Pagain <input type="password" name="pwd2"/>
<input type="submit" value="submit"/>
</form>
<h1><a href="/">index page</a></h1>


运行测试截图

运行:



浏览器测试界面:

登录成功页面



登录页面:



注册页面:



数据库验证:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: