修飾器的功能可以在不修改其他程式下,新增其他功能。
修飾器會把整個Function傳入到你要的程式中,而方法修飾器還另外會再把你的程式中第一個引數傳入(一般是用self)
以下是一個範例,建立一個方法的登入驗證
1.先建立一個登入驗證的function
def verify(func):
def wrapper(self):
處理self資訊.....
return func(self)
return wrapper
2.再建立一個需要進入登入驗證的方法,並且我們只需要在需要的方法上面一行加上 @verify
class Web:
@verify
def menu(request):
return render(request, "menu.html")
這樣的做法就會在要進入menu之前,先將menu傳入verify的func,
並且將 menu 的request參數傳入wrapper的self。
當通過驗證的時候,就會回傳function到原來的menu,讓menu繼續執行,
或是不通過的時候,可以在 wrapper中return其他的地方,像是下面的方式。
def verify(func):
def wrapper(self):
if self.POST["password"] == "123456:
return func(self)
else:
return render(self, "Login.html")
return wrapper
如果在 Django 當中self不習慣的話,也可以改回request
def verify(func):
def wrapper(request):
if request.POST["password"] == "123456:
return func(request)
else:
return render(request, "Login.html")
return wrapper
完整的程式大概長得像是下面這樣。
def verify(func):
def wrapper(request, *args, **kwargs):
if request.POST["password"] == "123456:
return func(request, *args, **kwargs)
else:
return render(request, "Login.html")
return wrapper
class Web:
@verify
def menu(request):
return render(request, "menu.html")
沒有留言:
張貼留言
對於文章內有任何問題,都可以提出來討論看看哦。