动态页面的登陆——装饰器应用<代码>

log_status = False
f = open("info", "r", encoding="utf8")
source = f.read()
source = eval(source)
username = ""
def info_match(f_para_info):
    username = input("type your ID:")
    password = int(input("type your password:"))
    global source
    if username == source[f_para_info]["name"] and password == source[f_para_info]["password"]:
        print("login successful")
        global log_status
        log_status = True
    else:
        print("login failed")
def para_decorator(f_para_pd):
    def decorator(f_para_dec):
        def func():
            if log_status == True:
                global source
                sf = source[f_para_pd]["name"]
                print("welcome user {kk}".format(kk=sf))
                f_para_dec()
            if log_status == False:
                if f_para_pd == "jingdong":
                    info_match(f_para_pd)
                    f_para_dec()
                elif f_para_pd == "weixin":
                    info_match(f_para_pd)
                    f_para_dec()
                elif f_para_pd == "qq":
                    info_match(f_para_pd)
                    f_para_dec()
        return func
    return decorator
@para_decorator("jingdong")  # homepage=para_decorator("jingdong")(homepage)
def homepage():
    print("welcome to home...")
@para_decorator("weixin")
def finance_page():
    print("welcome to finance")
@para_decorator("qq")
def bookstore():
    print("enjoy to the sea of knowledge")
print("welcome to jd.com".center(60,"*"))
while True:
    print(‘‘‘
    1.homepage (账号:ccc 密码:123)
    2.finance_page(账号:gaga 密码:456)
    3.bookstore(账号:xiaomu 密码:789)
    4.quit to jd
    ‘‘‘
    )
    switch = int(input("switch to ..."))
    if switch == 1:
        homepage()
    elif switch == 2:
        finance_page()
    elif switch == 3:
        bookstore()
    elif switch == 4:
        break

功能:不同的页面需要不同的账号来登陆;登陆后返回等操作后不需要二次登陆。

时间: 2024-10-06 01:02:33

动态页面的登陆——装饰器应用<代码>的相关文章

用户登陆装饰器和页面跳转(包含mixin的使用)

用login_required装饰器来辨别用户是否登陆,如果没有登陆,则需要进行登录才能继续访问当前页面(有些页面是需要用户登陆后才可以访问):如果已经登陆,则可以继续访问. 首先配置 如果用户没有登陆,login_required装饰器会默认一个地址进行跳转,所以要在settings中进行配置需要跳转的页面: 在user.views中配置: 若检查到没有登陆让用户登陆默认链接时,此时登陆页面链接为,上图中的get里'next'指的就是登陆页面里next对应的页面,后边的则是为若链接中没有nex

python装饰器关键代码

带参数的装饰器 __author__ = 'similarface' import sys import logging import functools logging.basicConfig( stream=sys.stderr, level=logging.DEBUG ) def decorator(config):     def concrete_decorator(function):         def wrapped( *args, **kw ):             r

装饰器原理-代码解释

# coding:utf-8 # 带参数装饰器 def f1(func): print('开始!') def f2(a): print(func) a() print('执行') return f2 @f1('666') def f3(): print('测试开始') # 无参数装饰器 def f1(func): print('开始!') def f2(): func() print('执行') return f2 @f1 def f3(): print('测试开始') if __name__

动态页面,登陆,注册,留言 JSP

登陆页 主要使用html表单,javascript验证注册信息 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/

【ThinkingInJava】43、与动态代理混合的装饰器模式

//: net/mindview/util/TwoTuple.java package net.mindview.util; public class TwoTuple<A,B> { public final A first; public final B second; public TwoTuple(A a, B b) { first = a; second = b; } public String toString() { return "(" + first + &

python之装饰器

装饰器(Decorator) 使用场景:为被装饰器装饰的函数增加功能,但又不希望修改函数的定义,即在代码运行期间动态增加功能. 装饰器更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们以装饰函数为例子介绍其用法. 例如为已经运行的代码中的多个函数增加同一个功能,方法有: 1.对基础平台的代码进行重构,即在每段函数中都加入相应代码. 2.把需要的功能写成一个新函数,在需要加功能的函数中调用它. 3.使用装饰器,对基础平台的代码进行拓展,例如要在

python装饰器(二)

函数附加多个装饰器 # 多层装饰器 USER_INFO = {} # 使用一个全局的字典,存储一些状态 def check_login(func): """ 检查登陆装饰器 :param func: :return: """ def inner(*args,**kwargs): if USER_INFO.get('is_login'): # 判断USER_INFO键对应值是否为真,为真状态已登录 ret = func(*args,**kwargs

Python基础篇【第6篇】: Python装饰器

装饰器 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 举例解释: def func1(): some options 我们现在拥有一个已经运行了一段时间的功能函数 func1,一天我们需要一些新的功能,由于不能直接修改线上函数func1,怎么办?这时我们就可以利用装饰器. 定义一个

Python笔记之装饰器(decorator)

python 中一切皆对象,变量是对象,函数也是对象 def  funcName(): return 1 f = funcName                #funcName 是一个函数名,也是一个对象的名字,所以也可以赋值给一个变量,将对象funcName赋值给变量f f()   #  通过变量f来实现函数funcName函数的调用执行,f()=funcName() 装饰器本质上也是一个函数,作用是可以不修改原有代码的基础上去扩展现有函数功能.它的原理就是讲原函数对象作为参数传递给装饰器