参考:http://webpy.org/cookbook/userauthpgsql.zh-cn
项目依赖于: web.py, pg
工程目如图:
数据库脚本
CREATE TABLE example_users
(
id serial NOT NULL,
acc character varying(80) NOT NULL,
pass character varying(80) NOT NULL,
email character varying(100) NOT NULL,
privilege integer NOT NULL DEFAULT 0,
CONSTRAINT utilisateur_pkey PRIMARY KEY (id)
)
/bin/app.py
# --coding: utf-8 --
import web
from web.contrib.template import render_mako
import pg
web.config.debug = False
urls = (
"/login","login",
"/reset","reset",
"/test","test"
)
app = web.application(urls,globals())
session = web.session.Session(app, web.session.DiskStore('sessions'), initializer = {'login': 0, 'privilege': 0})
#连接数据库
db = pg.connect(dbname = 'py_web_test', host = 'localhost', user = 'mush', passwd = '888888')
#判断登录状态
def logged():
if session.login == 1:
return True
else:
return False
#权限管理
def create_render(privilege):
if logged():
if privilege==0:
render = render_mako(
directories=['templates/reader'],
input_encoding='utf-8',
output_encoding='utf-8',
)
elif privilege==1:
render = render_mako(
directories=['templates/user'],
input_encoding='utf-8',
output_encoding='utf-8',
)
elif privilege==2:
render = render_mako(
directories=['templates/admin'],
input_encoding='utf-8',
output_encoding='utf-8',
)
else:
render = render_mako(
directories=['templates/communs'],
input_encoding='utf-8',
output_encoding='utf-8',
)
return render
class login:
def GET (self):
if logged():
render = create_render(session.privilege)
return "%s" % (
render.login_double())
else:
render = create_render(session.privilege)
return render.login()
def POST(self):
user, passwd = web.input().user, web.input().passwd
ident = db.query("select * from example_users where acc = '%s'" % (user)).getresult()
try:
if passwd==ident[0][2]:
session.login=1
session.privilege=ident[0][4]
render = create_render(session.privilege)
return "%s" % (
render.login_ok()
)
else:
session.login=0
session.privilege=0
render = create_render(session.privilege)
return "%s" % (
render.login_error()
)
except:
session.login=0
session.privilege=0
render = create_render(session.privilege)
return "%s" % (
render.login_error()
)
class reset:
def GET (self):
session.login = 0
session.kill()
render = create_render(session.privilege)
return "%s" % (
render.logout()
)
class test:
def GET(self):
return "seccuse"
if __name__ == "__main__":
app.run()
templates/communs/login.html
<html>
<head>
<title>Sample Web Form</title>
</head>
<h1>Fill Out This Form</h1>
<FORM action=/login method=POST>
<table id="login">
<tr>
<td>User: </td>
<td><input type=text name='user'></td>
</tr>
<tr>
<td>Password: </td>
<td><input type="password" name=passwd></td>
</tr>
<tr>
<td></td>
<td><input type=submit value=LOGIN></td>
</tr>
</table>
</form>
</html>