一.能执行的代码应当放到"_name _==’_main _’:"下(可能还被其他人调用)(一个python文件当作一个单独的程序运行时,总为True;文件当模块导入时,为False)
二.解耦与耦合
1.耦合:两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象(两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象)(耦合性是程序结构中各个模块之间相互关联的度量)
2.程序的解耦:解除耦合关系,可理解为降低耦合度(尽可能减少代码耦合。原则就是A功能的代码不要写在B功能的代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但不要直接交叉写)
二.已有文件haproxy.conf(包含backend在内的多种数据库类型):
1.预处理部分:
import os
def fetch(data):
pass
def add():
pass
def change():
pass
def delete():
pass
def fi()
if _name _=='_main _':
msg="1:查询fetch,2:添加add,3:修改change,4:删除delete,5:退出logout"
msg_dict={'1':fetch\n'2':add\n'3':change\n'4':delete\n'5':logout}
while Ture:
print(msg)
choice=input("请输入您的需求:") #传入的数据是str
if choice==5:
break
data=input("请输入数据:")
if choice!=1:
data=eval(data)
print(res)
2.文件处理部分:
def file_handler(backend_data,type="fetch",res=None):
if type==:fetch":
with open("haproxy.conf","r",encoding="utf-8") as read_f:
flag = False #设置一个开关
ret_list=[]
for line in read_f: #遍历文件到line这个变量中
if line.strip() == backend_data: #strip()以去除每行结尾处\n
tag=True
continue
if tag:
if line.startswith("backend")
break
else:
print("%s"%line,end="") #end=""避免多回车一次
ret_list.append(line)
return ret
elif type=="change":
with open("haproxy.conf","r") as read_f,open("new-haproxy.conf","w") as write_f:
tag=False
has_write=False
for readline in read_f:
if readline.strip()==backend_data:
tag=True
continue
if tag and readline.startswith("backend") #不能与if tag合并,否则写入错误数据
tag=False
if tag:
if not has_write:
for record in a:
write_f.write(record)
has_write=True
if not tag:
write_f.write(readline)
#实现了程序的解耦,文件处理功能的代码单独写
3.对haproxy.conf文件查询功能:
def fetch(data):
backend_data="backend %s"%data
with open("haproxy.conf","r",encoding="utf-8") as read_f:
flag = False #设置一个开关
ret_list=[]
for line in read_f: #遍历文件到line这个变量中
if line.strip() == backend_data: #strip()以去除每行结尾处\n
tag=True
continue
if tag:
if line.startswith("backend")
break
else:
print("%s"%line,end="") #end=""避免多回车一次
ret_list.append(line)
return ret_list
a=fetch(www.ordboy1.org)
print(a)
使用file_handler版本:
def fetch(data):
backend_data="backend %s"%data
res=file_handler(backend_data)
return res
4.对haproxy.conf文件添加功能:
5.对haproxy.conf文件修改功能:
def change(data): #传入的数据是str
backend=data[0]['backend'] #文件中的一条记录www.oldboy1.org
backend_data="backend %s"%backend
old_sever_record="%sserver %s %s weight %s maxconn %s\n"%(" "*8,data[0]['record']['server'],data[0]['record']['server'],data[0]['record']['weight'],data[0]['record']['maxconn'])
new_sever_record="%sserver %s %s weight %s maxconn %s\n"%(" "*8,data[1]['record']['server'],data[1]['record']['server'],data[1]['record']['weight'],data[1]['record']['maxconn'])
print("要修改的记录是:%s"%old_server_record)
a=fetch(backend)
print("来自fetch的结果是:%s"%a)
if not a or old_server_record not in a:
return "要修改的记录不存在"
else:
index=a.index(old_server_record)
a[index]=new_server_record
a.insert(0,"%s\n"%backend_data)
with open("haproxy.conf","r") as read_f,open("new-haproxy.conf","w") as write_f:
tag=False
has_write=False
for readline in read_f:
if readline.strip()==backend_data:
tag=True
continue
if tag and readline.startswith("backend") #不能与if tag合并,否则写入错误数据
tag=False
if tag:
if not has_write:
for record in a:
write_f.write(record)
has_write=True
if not tag:
write_f.write(readline)
os.rename("haproxy.conf","haproxy2.conf")
os.rename("new-haproxy.conf","haproxy.conf")
os.remove("haproxy2.conf")
c=change([{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy2.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}])
print(c)
使用file_handler版本:
def change(data): #传入的数据是str
backend=data[0]['backend'] #文件中的一条记录www.oldboy1.org
backend_data="backend %s"%backend
old_sever_record="%sserver %s %s weight %s maxconn %s\n"%(" "*8,data[0]['record']['server'],data[0]['record']['server'],data[0]['record']['weight'],data[0]['record']['maxconn'])
new_sever_record="%sserver %s %s weight %s maxconn %s\n"%(" "*8,data[1]['record']['server'],data[1]['record']['server'],data[1]['record']['weight'],data[1]['record']['maxconn'])
print("要修改的记录是:%s"%old_server_record)
a=fetch(backend)
print("来自fetch的结果是:%s"%a)
if not a or old_server_record not in a:
return "要修改的记录不存在"
else:
index=a.index(old_server_record)
a[index]=new_server_record
a.insert(0,"%s\n"%backend_data)
file_handler(backend_data,type="change",res=a)
os.rename("haproxy.conf","haproxy2.conf")
os.rename("new-haproxy.conf","haproxy.conf")
os.remove("haproxy2.conf")
c=change([{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy2.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}])
print(c)
6.对haproxy.conf文件删除功能:
7.对haproxy.conf文件退出功能: