

之前写了个streamlit多页面功能量化分析应用, 当时星球群里同学建议我增加个鉴权, 我觉得没必要就没搞。 这几天发生一些事情以后,今天想了想还是加上吧, 这里写个例子,方便需要增加鉴权的同学参考。
改造的功能:
bcrypt包)2、功能变化
该方案在保持原有代码结构的基础上,通过约30行代码实现了登录鉴权功能,且无需修改原有页面逻辑。是不是觉得还不错。
题外话:
最近有同学问我知识星球有哪些有价值的东西,这里再说明下。 看每个人对价值的理解。 文章里的源代码文件、可以访问的网站, 专属微信群闲聊。 至于闲聊什么, 看自己的理解了。 如果能独立运行公开项目的源代码,如果有稳定盈利的体系,没必要加,性价比低。 不多解释,信者入,不强求,随缘。
另外,有同学可能疑惑,为啥微信消息有些时候不回,主要是因为 个人微信消息太多了,简单打了标签, 忙不过来就忽略了见谅。每个人毕竟有自己的生活,我也不想因为太多无效的消息打乱了个人生活。
最后附上完整代码如下,把用户名密码修改成自己的就行。备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。
import streamlit as st
import home
from zhangting import zhangting_lianban
from zhangting import zhangting_gainian
from zuigaoban import zuigaoban_zhexian
from jingjia import jingjiafenxi
from gegu import gegu
from jishuzhibiao import dapan
from jishuzhibiao import shenqijiuzhuan
#from jishuzhibiao import jishuzhibiao
from bankuai import bankuai_tonghuashun
from bankuai import bankuai_dongfangcaifu
from qingxu import qingxu
from huice import huice
from zhouqi import all_month
from kaipanla import kaipanla_ticai
from xuanxue import meiriyiji
from news import news
import streamlit as st
import bcrypt
# 添加在原有import之后
# 预存储用户信息(正式环境建议存储在数据库)
ADMIN_USER = {
"username": "admin",
"password_hash": bcrypt.hashpw("你的密码".encode(), bcrypt.gensalt())
# 生成方式:bcrypt.hashpw(b"你的密码", bcrypt.gensalt())
}
# 登录验证函数
def authenticate(username, password):
if username == ADMIN_USER["username"]:
return bcrypt.checkpw(password.encode(), ADMIN_USER["password_hash"])
return False
# 在main函数最前面添加鉴权逻辑
def main():
# 初始化会话状态
if 'logged_in' not in st.session_state:
st.session_state.logged_in = False
# 未登录时显示登录表单
if not st.session_state.logged_in:
st.title("用户登录")
username = st.text_input("用户名")
password = st.text_input("密码", type="password")
if st.button("登录"):
if authenticate(username, password):
st.session_state.logged_in = True
st.rerun()
else:
st.error("用户名或密码错误")
return # 阻止后续代码执行
# 原有main函数内容保持不变
st.sidebar.title("股票分析导航")
selection = st.sidebar.radio("跳转到", list(PAGES.keys()))
page = PAGES[selection]
page.app()
#st.set_page_config(page_title="股票分析应用")
PAGES = {
"主页": home,
"涨停分析": zhangting_lianban,
'涨停概念分析': zhangting_gainian,
"最高板分析":zuigaoban_zhexian,
"竞价分析": jingjiafenxi,
"个股分析": gegu,
"大盘分析": dapan,
'大盘情绪': qingxu,
'同花顺概念板块分析': bankuai_tonghuashun,
'东方财富概念板块分析': bankuai_dongfangcaifu,
'开盘啦概念板块分析': kaipanla_ticai,
'回测': huice,
#'技术指标': jishuzhibiao,
'神奇九转': shenqijiuzhuan,
'新闻联播': news,
'历年月度分析': all_month,
'每日宜忌': meiriyiji
}
if __name__ == "__main__":
main()如果我的分享对您有所帮助,欢迎点赞转发。 您的支持和鼓励是我写作的动力。