码迷,mamicode.com
首页 > 编程语言 > 详细

【Python自动化运维之路Day5】基础篇

时间:2016-06-06 12:00:22      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

今日目录:

多层装饰器

字符串格式化

生成器和迭代器

递归

模块 

 

一. 多层装饰器

还是上一篇的那个例子,关于用户管理程序:登录用户管理程序,查看用户信息的时候,系统要提示登录,登录验证成功后普通用户可以查看自己信息,管理员登录后才可以进入管理界面,普通用户提示权限不足,这样一来,就可以重新写下程序,来两个装饰器来装饰;

技术分享
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: DBQ(Du Baoqiang)


#先定义一个用户字典,判断用户状态,用户身份等
USER_INFO = {user_state: False, admin_flag:2}

#搞一个装饰器,装饰管理后台,检查用户身份等
def outer(func):
    def inner(*args,**kwargs):
        if USER_INFO[user_state]:
            result = func(*args,**kwargs)
            return result
        else:
            print(你没有登陆系统,请登陆后再操作!)
    return inner

#在定义一个check_manager装饰器,用户检测用户登录身份是管理员还是普通用户
def check_manager(func):
    def inner(*args, **kwargs):
        if USER_INFO[admin_flag] == 0:
            result = func(*args,**kwargs)
            return result
        else:
            print(权限不足!)
    return inner

#管理后台函数被装饰的时候,从下到上渲染,解释执行的时候是从上到下执行,所以先使用outer装饰, 再使用check_manager
@outer
@check_manager
def manager():
    print(欢迎登陆到管理员界面)

#检查用户身份函数
@outer
def checkuser(username):
    if USER_INFO[admin_flag] == 0:
        print({} 您的用户是管理员身份.format(username))
    else:
        print({} 普通用户啦.format(username))

#登录函数
def login(username,userpwd):
    if username == tom and userpwd == 123:
        USER_INFO[user_state] = True
        USER_INFO[current_user] = username
        USER_INFO[admin_flag] = 0
        manager()
    elif username == jerry and userpwd == 123:
        USER_INFO[user_state] = True
        USER_INFO[current_user] = username
        USER_INFO[admin_flag] = 1
    else:
        print(用户名或者密码错误!)
        #print(‘欢迎登陆 %s‘ %username)

#主函数
def main():
    while True:
        print(1: 管理后台   2: 登陆   3. 检查用户身份  4. 退出)
        user_input_num = input(选择下吧:).strip()
        if user_input_num == 1:
            result = manager()
        elif user_input_num == 2:
            username = input(请输入您的用户名:).strip()
            userpwd = input(密码).strip()
            login(username,userpwd)
        elif user_input_num == 3:
            checkuser(USER_INFO.get(current_user,None))
        elif user_input_num == 4:
            print(Bye)
            break

if __name__ == __main__:
    main()
使用两个装饰器装饰一个函数

使用一个多层装饰器来装饰同一个用户身份、权限等;

技术分享
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: DBQ(Du Baoqiang)


#先定义一个用户字典,判断用户状态,用户身份等
USER_INFO = {user_state: False, admin_flag:2}

#搞一个装饰器,装饰管理后台,检查用户身份等
def outer(func):
    def inner(*args,**kwargs):
        if USER_INFO[user_state]:
            if USER_INFO[admin_flag] == 0:
                result = func(*args,**kwargs)
                return result
            else:
                print(权限不足!)
        else:
            print(你没有登陆系统,请登陆后再操作!)
    return inner

# 在定义一个check_manager装饰器,用户检测用户登录身份是管理员还是普通用户
# def check_manager(func):
#     def inner(*args, **kwargs):
#         if USER_INFO[‘admin_flag‘] == 0:
#             result = func(*args,**kwargs)
#             return result
#         else:
#             print(‘权限不足!‘)
#     return inner

#只使用一个装饰器装饰
@outer
def manager():
    print(欢迎登陆到管理员界面)

#检查用户身份函数
@outer
def checkuser(username):
    if USER_INFO[admin_flag] == 0:
        print({} 您的用户是管理员身份.format(username))
    else:
        print({} 普通用户啦.format(username))

#登录函数
def login(username,userpwd):
    if username == tom and userpwd == 123:
        USER_INFO[user_state] = True
        USER_INFO[current_user] = username
        USER_INFO[admin_flag] = 0
        manager()
    elif username == jerry and userpwd == 123:
        USER_INFO[user_state] = True
        USER_INFO[current_user] = username
        USER_INFO[admin_flag] = 1
    else:
        print(用户名或者密码错误!)
        #print(‘欢迎登陆 %s‘ %username)

#主函数
def main():
    while True:
        print(1: 管理后台   2: 登陆   3. 检查用户身份  4. 退出)
        user_input_num = input(选择下吧:).strip()
        if user_input_num == 1:
            result = manager()
        elif user_input_num == 2:
            username = input(请输入您的用户名:).strip()
            userpwd = input(密码).strip()
            login(username,userpwd)
        elif user_input_num == 3:
            checkuser(USER_INFO.get(current_user,None))
        elif user_input_num == 4:
            print(Bye)
            break

if __name__ == __main__:
    main()
使用多层装饰器

 

【Python自动化运维之路Day5】基础篇

标签:

原文地址:http://www.cnblogs.com/dubq/p/5563115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!