前言 web.py框架下面的用戶登錄功能實現(xiàn)比較簡單一點,只是針對sesson的判斷和瀏覽器cookie的處理 我這里只是針對實現(xiàn)登錄的功能,對于賬戶信息的存儲和密碼的加密都沒有做任何處理。 session和cookie的原理用戶訪問網(wǎng)站某頁面,服務端會根據(jù)客戶端傳過來的cookie在本地尋找是否有對應的session,如果有則保留上一次的狀態(tài)(如果cookie沒有過期),如果沒有馬上創(chuàng)建一個,然后返回一個新數(shù)據(jù)給客戶端。然后跳轉(zhuǎn)到login頁面,進行登錄操作,登錄完成,服務端會把cookie的自建參數(shù)傳遞給客戶端,客戶端完成cookie的重新創(chuàng)建。 對session和cookie的一些理解 注意:下面源代碼中涉及py腳本中顯示問題,所以html的代碼都加了''轉(zhuǎn)義,如果要使用需要把轉(zhuǎn)義符刪除掉 源代碼 功能實現(xiàn) 實現(xiàn)用戶登錄,根據(jù)用戶的賬號和密碼進行驗證 實現(xiàn)用戶登錄和退出功能 實現(xiàn)已登錄用戶在多頁面之間跳轉(zhuǎn) 登錄模塊的源代碼 login.py #!/usr/bin/env python # coding: utf-8 import web from web import form urls = ( '/','Index', '/test','Test', '/login','Login', '/logout','Logout', ) render = web.template.render('/opt/py/login') allowed = ( ('admin','123123'), ) web.config.debug = False app = web.application(urls, locals()) session = web.session.Session(app, web.session.DiskStore('sessions')) class Index: def GET(self): if session.get('logged_in',False): return '<h1>Login Success!!!</h1>testLogout' raise web.seeother('/login') class Login: def GET(self): return render.login() def POST(self): i = web.input() username = i.get('username') passwd = i.get('passwd') if (username,passwd) in allowed: session.logged_in = True web.setcookie('system_mangement', , 60) raise web.seeother('/') else: return '<h1>Login Error!!!</h1>Login' class Logout: def GET(self): session.logged_in = False raise web.seeother('/login') class Test: def GET(self): if session.get('logged_in',False): return '<h1> test login success!!!</h1>Logout' return '<h1>logout now</h1>Login' if __name__ == '__main__': app.run()登錄模塊調(diào)用的模板 login.html <html> <head> <title>Login Test</title> </head> <h1>Login</h1> <FORM method=POST> <table id='login'> <tr> <td>User: </td> <td><input type=text name='username'></td> </tr> <tr> <td>Password: </td> <td><input type='password' name=passwd></td> </tr> <tr> <td></td> <td><input type=submit></td> </tr> </table> </form> </html>源代碼下載地址: github(保存在login分支里面) |
|