python中redis博客小程序

1、#enter.py登录界面

import PySimpleGUI as sg
import redis
import traceback
import home



def login(name, pwd):
userk_flag = ""
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
# 判断用户是否存在
userks = r.keys("user:[0-9]*:bascinfo")
for userk in userks:
r_name = r.hget(userk, "name")
r_pwd = r.hget(userk, "pwd")
if r_name == name and r_pwd == pwd:
flag = True
userk_flag = userk
print("%s登录成功" % name)
else:
print("%s登录失败,账号或者密码不正确")
r.close()
return userk_flag


#注册redis用户键名为"user:1:bascinfo",里面包含name和pwd属性
def register(name, pwd):
flag = False
try:
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
#判断用户是否存在
userks = r.keys("user:[0-9]*:basicinfo")
for userk in userks:
r_name = r.hget(userk, "name")
if r_name == name:
print("%s已经注册过,无法重复注册"%name)
return flag
#用户不存在的时候才去注册
r.incr("users:count")
count = r.get("users:count")
print(count)
print(type(count))
print("count:%s" % count)
rt1 = r.hset("user:%s:bascinfo"%count,"name", name)
rt2 = r.hset("user:%s:bascinfo"% count, "pwd" , pwd)
if int(rt1) == 1 and int(rt2) == 1:
flag = True
print("%s注册成功"%name)
r.close()
except:
r.decr("users:count")
# print(traceback.format_exc())
return flag

#主函数
def main():
layout = [
[sg.Text('用户名:'), sg.InputText(key="name")],
[sg.Text('密 码:'), sg.InputText(key="pwd")],
[sg.Text('')],
[sg.Button('登录'), sg.Button('注册'), sg.Exit("退出")],
]
window = sg.Window('BLOG', layout, size=(500, 180),font=("Helvetica", 14), \
element_padding=(4,4),margins = (4,4) )
while True:
event, values = window.Read()
if event is None or event == '退出':
break
name_txt = window.Element("name").Get()
pwd_txt = window.Element("pwd").Get()
if event == "注册":
reg_flag = register(name_txt, pwd_txt)
if reg_flag:
sg.Popup( " "*10 + name_txt + "注册成功,请进行登录!" + " "*10,font=("Helvetica", 14),)
else:
sg.Popup(" "*10 + name_txt + "注册失败!" + " "*10,font=("Helvetica", 14),)
elif event == "登录":
userk_flag = login(name_txt, pwd_txt)
if userk_flag:
sg.Popup(" "*10 + name_txt + "登录成功" + " "*10, font=("Helvetica", 14),)
window.Close()
##进入首页进行展示
home.main(userk_flag, name_txt)
break
else:
sg.Popup(" "*10 + name_txt + "登录失败" + " "*10 , font=("Helvetica", 14),)
elif event == "退出":
break
#关闭窗口
window.Close()

try:
main()
except:
print(traceback.format_exc())
sg.Popup("程序异常")

2、home.py主界面
import PySimpleGUI as sg
import redis
import traceback
import re

#进行关注
def setFollowing(following_user, followed_user ):
print("-----------%s------------"%setFollowing.__name__)
print(following_user)
print(followed_user)
following_rds_key = re.sub("bascinfo","following" , following_user )
print("following_rds_key: " + following_rds_key)
followed_rds_key = re.sub("bascinfo","followed" , followed_user)
print("followed_rds_key: " + followed_rds_key)
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
pipe = r.pipeline(transaction=True)
print("**************************")
print({followed_user: 1} )
pipe.sadd(following_rds_key, followed_user )
pipe.sadd(followed_rds_key, following_user )
result = pipe.execute()
r.close()
return True

#搜索用户
def searchUser(myname, name):
search_list = [ ]
if not name:
return search_list
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
users = r.keys("user:[0-9]*:bascinfo")
for user_item in users:
r_name = r.hget(user_item,"name")
if r_name and re.search(name, r_name) and r_name != myname:
search_list.append( [user_item, r_name ] )
return search_list
r.close()

#显示关注的人
def showFollowing(userid):
name_list = []
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
following_rds_key = re.sub("bascinfo", "following", userid)
result = r.smembers(following_rds_key)
for i in result:
name_list.append(r.hget(i, "name"))
r.close()
return name_list

#显示粉丝
def showFollowed(userid):
name_list = []
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
followed_rds_key = re.sub("bascinfo", "followed", userid)
result = r.smembers(followed_rds_key)
for i in result:
name_list.append(r.hget(i, "name"))
r.close()
return name_list

def showFollowEachOther(userid):
name_list = []
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
following_rds_key = re.sub("bascinfo", "following", userid)
followed_rds_key = re.sub("bascinfo", "followed", userid)
print("************")
print(following_rds_key)
print(followed_rds_key)
print("************")
r1 = r.exists(following_rds_key)
r2 = r.exists(followed_rds_key)
print(r1);print(type(r1))
print(r2);print(type(r2))
if r1 and r2:
result = r.sinter(following_rds_key,followed_rds_key)
print("获取到相互关注:");print(result)
for i in result:
name_list.append( r.hget(i, "name") )
print(name_list)
return name_list



def main(userk_flag, name_txt):
print("lg_flag: " + userk_flag )
print("name_txt: " + name_txt)

frd_layout = [
[sg.InputText('', size=(20, 1), key="s_name"), sg.Button('搜索', size=(4, 1),font=('Helvetica', 9))],
]

atcl_layout = [
[sg.T('This is inside tab 2')],
]

hot_layout = [
[sg.T('This is inside tab 3')],
]



while True:
#互相关注
eachother_name_list = showFollowEachOther(userk_flag)
if eachother_name_list:
for num,name_item in enumerate(eachother_name_list):
if num == 0:
frd_layout.append([sg.Text("互相关注", size=(20, 1), background_color="#F2F3F4"), ])
frd_layout.append([sg.Text(name_item, size=(20, 1), background_color="#F2F3F4"), ])
# 关注
name_list = showFollowing(userk_flag)
if name_list:
for num, name_item in enumerate(name_list):
if name_item not in eachother_name_list:
if num == 0:
frd_layout.append([sg.Text("关注", size=(20, 1), background_color="#F2F3F4"), ])
frd_layout.append( [ sg.Text( name_item ,size=(20,1), background_color= "#F2F3F4" ) , ] )
#粉丝
name_list = showFollowed(userk_flag)
if name_list:
for num, name_item in enumerate(name_list):
if name_item not in eachother_name_list:
if num == 0:
frd_layout.append([sg.Text("粉丝", size=(20, 1), background_color="#F2F3F4"), ])
frd_layout.append( [ sg.Text( name_item ,size=(20,1), background_color= "#F2F3F4" ) , ] )

tb_group = sg.TabGroup(
[[sg.Tab(" " * 40 + '好友' + " " * 40, frd_layout, font=("Helvetica", 19), ),
sg.Tab(" " * 40 + '个人博文' + " " * 40, atcl_layout, font=("Helvetica", 19)),
sg.Tab(" " * 40 + '好友博文' + " " * 40, hot_layout, font=("Helvetica", 19)), ], ],
title_color="black",
pad=20,
font=("Helvetica", 19),
border_width=None,
)
layout = [
[tb_group]
]
window = sg.Window('欢迎 %s ' % name_txt, layout, size=(1200, 700), font=("Helvetica", 14), )
event, values = window.Read()
if event is None or event == '退出':
break
elif event == "搜索":
s_name = window.Element("s_name").Get()
search_list = searchUser(name_txt,s_name)
#frd_layout要初始化
frd_layout = [
[sg.InputText('', size=(20, 3), key="s_name"), sg.Button('搜索', size=(4, 1) ,font=('Helvetica', 9))],
]
for num,search_item in enumerate(search_list):
frd_layout.append( [ \
sg.Text( search_item[1] ,size=(20,1), background_color= "#F2F3F4" ) , \
sg.InputText(search_item[0], size=(5, 1), background_color="#F2F3F4", visible=False , key = "id" + str(num)),
sg.Button("关注", size = (4,1),button_color=("black", "#4A90E2"), font=('Helvetica', 9 ),key="fwbt"+str(num) )
],)
#初始化值
window.Close()
elif event.find("fwbt") >= 0:
print("------------------%s------------------"%event)
resh = re.search("fwbt(\d+)", event)
num = resh.group(1)
print("num: " + str(num))
followed_userid = window.Element("id" + str(num)).Get()
following_userid = userk_flag
setFollowing(following_userid, followed_userid)
print(following_userid + " 成功关注了 " + followed_userid)
pass
# 初始化值
window.Close()
else:
print("未知事件:" + event)
window.Close()


3、运行效果如下

猜你喜欢

转载自www.cnblogs.com/harryTree/p/11505916.html