1、对haproxy配置文件进行查、增,删(文件操作实战)
需求:
(1)、可以查找指定的backend
(2)、可以插入新的的backend
(3)、可以删除指定的backend
代码实现:
# 查询
def serach(str):
with open("ha.cnf", 'r') as f:
flag = False
for line in f:
if flag == True:
return line
break
if line.strip() == "backend %s" % str:
flag = True
return False
# 插入
def insert(str):
istr = eval(str) # 将字符串转字典
if serach(istr['backend']) == False:
with open("ha.cnf", "a") as f:
f.write('''\nbackend %s \n\t\tserver %s weight %s maxconn %s''' % (istr['backend'], istr['server'], istr['weight'], istr['maxconn']))
else:
print("this line have exist!")
# 删除
def delete(str):
if serach(str) != False:
with open("ha.cnf", "r") as f, open("ha.temp", "w") as ftemp:
flag = False
for line in f:
if line.strip() == "backend %s" % str:
flag = True
else:
if flag != True:
ftemp.write(line)
else:
flag = False
# 选择操作
select = input("please select:\n 1.search 2.insert 3.delete\n")
if select == "1":
node = input("\nnode:")
a = serach(node)
print(a)
elif select == "2":
insert("{'backend': 'www.baidu.com', 'server': '1.1.1.1', 'weight': '20', 'maxconn': '3000'}")
elif select == "3":
a = input("\nnode:")
delete(a)
配置文件:ha.cnf
global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stats :8888 stats enable stats uri /admin stats auth admin:1234 frontend oldboy.org bind 0.0.0.0:80 option httplog option httpclose option forwardfor log global acl www hdr_reg(host) -i www.oldboy.org use_backend www.oldboy.org if www backend www.oldboy.org server 100.1.7.9 weight 20 maxconn 3000 backend abc server 1.1.1.1 weight 20 maxconn 3000 backend www.baidu.com server 1.1.1.1 weight 20 maxconn 3000
2、模拟网站登录(装饰器实战)
需求:
(1)访问页面需要登录验证账号
(2)不同页面采用不同的登录方式(比如jd账号或者weixin账号)
(3)登录后访问其他页面无需再登录验证账号
(4)可选择页面及有返回主页功能
代码实现:
# 是否已经登录标志
loginflag = False
def login_type(login_type): # 不同页面用不同账户登录
def auth_account(fun): # 验证
def wapped():
global loginflag
if loginflag == False: # 如果没有登录
user = input("\ninput your name:")
pw = input("\ninput yout password:")
if readdb(login_type, user, pw) == True: # 读取账号文件,是否是合法账号
loginflag = True
fun()
else:
print('login error!')
else:
fun()
return wapped
return auth_account
# 读取账号文件,并判断账号密码是否正确
def readdb(login_type, username, passwd):
with open(login_type, 'r') as f:
for line in f:
if line.strip().split(':')[0] == username and line.strip().split(':')[1] == passwd:
return True
else:
return False
# 主页面
@login_type("jd")
def home():
print("jd home!")
s = input("\nselect web: 1,book 2,elec q,quit")
if s == '1':
book()
elif s == '2':
elec()
elif s == 'q':
exit()
# 书城页面
@login_type("weixin")
def book():
print("\njd book!")
s = input("\nselect: q,quit system r,return home")
if s == 'q':
pass
elif s == 'r':
home()
# 电子页面
@login_type("jd")
def elec():
print("\njd elec!")
s = input("\nselect: q,quit system r,return home")
if s == 'q':
pass
elif s == 'r':
home()
# 选择登录的页面
s = input("select login web: 1,home 2,book 3,elec\n")
if s == '1':
print("\nuse jd asscount")
home()
elif s == '2':
print("\nuse weixin asscount")
book()
elif s == '3':
print("\nuse jd asscount")
elec()
else:
exit()
账号文件如下:
zhangsan:123456
lisi:778899
3、模拟计算器(re模块正则实战)
eg.
please input:(5+6)*2-10/(5-3)
显示结果:17.0
代码实现:
import re
# 运算式进行计算
def cal(str):
# 判断字符串是否含有运算符(是否需要运算),是否是一位负数,如果是一位负数不进行计算
if re.findall('[+\-*/]', str) and not(str[0] == '-' and len(str) == 2):
# 先进行乘除运算,将所有乘除递归完
if re.search('[*/]', str):
current = re.search('\d+[*/]\d+', str).group()
before = str.split(current, 1)[0]
after = str.split(current, 1)[1]
val = eval(current)
str = '''%s%s%s''' % (before, val, after)
return cal(str)
else: # 无乘除进行加减运算
val = eval(str)
return val
else:
return str
# 去除括号并调用运算函数
def del_bracket(str):
# 递归去括号
if re.findall('[()]', str):
current = re.search('\([^()]+\)', str).group()
before = str.split(current, 1)[0]
after = str.split(current, 1)[1]
val = cal(re.sub('[()]', '', current))
str = '''%s%s%s''' % (before, val, after)
return del_bracket(str)
else: # 如果无括号,直接调用运算函数
val = cal(str)
return val
test = input("please input:")
# 去除空格
test.replace(' ', '')
# 是否含有非运算符和数字,是否正反括号数量不一致,是否含有运算符连续出现
if not(re.findall('[^0-9+\-*/().]', test)) and len(re.findall('\(', test)) == len(re.findall('\)', test)) and not(re.search('(\-\+)|(\-/)|(\-\*)|(\+\*)|(\*\+)|(\*/)|(/\*)|(\.\.)', test)):
print(del_bracket(test))
else:
print("error")
浙公网安备 33010602011771号