一個web2.0時代的網站,自然少不了使用者註冊,登入,驗證的功能,那麼python可以怎樣實現登入驗證呢
這裡我們使用裝飾器來做登入驗證
網站構成
假設我們有這樣一個網站,是一個類似與部落格園這種多個使用者的網站,每個使用者都又一個自己的管理介面,部落格園內部也應該有一個管理員系統
所以網站的使用者角色可以分為:
- 未登入使用者
- 登入的普通使用者,就是我們
- 管理員使用者
首先,未登入使用者只能檢視別人的部落格,要想評論別人的文章就需要登入,這時就要使用登入驗證,來區分未登入和登入使用者
其次,登入的普通使用者也不應該能夠訪問管理員系統,不然豈不是會亂套,這時也需要一次驗證
程式碼如下
# coding:utf-8
import sys
user = {"name":"", "is_login":False, "is_admin":False}
def login_confirm(func):
def wrap(*args, **kwrgs):
if user["is_login"]:
func(*args, **kwrgs)
else:
print "未登入"
return func
return wrap
def admin_confirm(func):
def wrap(*args, **kwrgs):
if user["is_admin"]:
func(*args, **kwrgs)
else:
print "沒有許可權"
return func
return wrap
def index():
print "This page is for everyone"
@login_confirm
def usr():
print "This is user page!"
@login_confirm
@admin_confirm
def admin():
print "This is admin page!"
if __name__=="__main__":
while True:
print "(1) 訪問首頁 (2) 登入 (3) 使用者介面 (4)管理員 (q)退出\n"
num = raw_input("請輸入對應數字:")
if num == "q":
sys.exit(0)
if num == "1":
index()
elif num == "2":
name = raw_input("請輸入你的名字:")
if name == "admin":
user["name"] = name
user["is_login"] = True
user["is_admin"] = True
else:
user["name"] = name
user["is_login"] = True
elif num == "3":
usr()
elif num == "4":
admin()
else:
print "錯誤的選項"
其中login_confirm裝飾器用來驗證登入,admin_confirm裝飾器用來驗證管理員許可權,這裡的使用者資訊儲存在user_info這個字典裡,在實際應用中,可以配合session使用,從session中獲取用去資訊,來執行相關操作