2015-11-24 3 views
-1

это мой первый раз, чтобы использовать декоратор, и я хочу, чтобы показать что-то вроде этогоPython декоратора для разрешения

import functools 

def checkUser(tag): 
    def dec(f0): 
     @functools.wraps(f0) 
     def wrapper(userName, loggedinUser): 

      if userName == loggedinUser: 
       return "You are allowed to view this page" 
      else: 
       return "Error" 
     return wrapper 
    return dec 

@checkUser 
def test2(userName, loggedinUser): 
    return userName, loggedinUser 

print test2() 

и я уверен, что это не будет работать, это только моя идея. Я просто скопировал эти коды и отредактировал. Я действительно новичок в этом.

+0

Ну, вы пробовали? Возможно, он работает. Никакой способ узнать, не пытаясь ... –

ответ

0

Для кода, который вы указали, если вы просто хотите проверить пользователя, вам не нужно использовать декоратор, почему бы просто не сравнить их напрямую? Поскольку вы хотите использовать декоратор, проверьте наличие разрешения. Я думаю, что вы можете сделать так:

import functools 

def check_user(username, password): 
    def dec(f): 
     @functools.wraps(f) 
     def wrapper(login_user, login_password): 
      f(login_user, login_password) 
      if username == login_user and password == login_password: 
       return "You are allowed to view this page" 
      else: 
       return "Check your password and username" 
     return wrapper 
    return dec 


@check_user('jhon', 'passwd') 
def test2(login_user, login_password): 
    print "hello, {0}".format(login_user) 


print test2('jhon', 'foobar') 
print test2('jhon', 'passwd') 

и вывод должен быть:

hello, jhon 
Check your password and username 
hello, jhon 
You are allowed to view this page 

вы можете увидеть, что в первый раз, ввода неправильного пароля даст нам предупреждение, но когда мы вводим правильную информацию, она показывает нам сообщение об успешном завершении.

Смежные вопросы