webpy实现用户验证

参考: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>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值