首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Python技术】streamlit 量化分析应用增加鉴权模块例子

【Python技术】streamlit 量化分析应用增加鉴权模块例子

作者头像
子晓聊技术
发布2026-04-23 13:59:50
发布2026-04-23 13:59:50
850
举报
文章被收录于专栏:子晓AI量化子晓AI量化

之前写了个streamlit多页面功能量化分析应用, 当时星球群里同学建议我增加个鉴权, 我觉得没必要就没搞。 这几天发生一些事情以后,今天想了想还是加上吧, 这里写个例子,方便需要增加鉴权的同学参考。

改造的功能:

  1. 安全增强
  • 使用bcrypt进行密码哈希存储与验证(需安装bcrypt包)
  • 密码对比使用恒定时间算法防止时序攻击

2、功能变化

  • 首次访问会显示登录界面
  • 成功登录后显示原有功能侧边栏
  • 会话状态持续到浏览器关闭前有效

该方案在保持原有代码结构的基础上,通过约30行代码实现了登录鉴权功能,且无需修改原有页面逻辑。是不是觉得还不错。

题外话:

最近有同学问我知识星球有哪些有价值的东西,这里再说明下。 看每个人对价值的理解。 文章里的源代码文件、可以访问的网站, 专属微信群闲聊。 至于闲聊什么, 看自己的理解了。 如果能独立运行公开项目的源代码,如果有稳定盈利的体系,没必要加,性价比低。 不多解释,信者入,不强求,随缘。

另外,有同学可能疑惑,为啥微信消息有些时候不回,主要是因为 个人微信消息太多了,简单打了标签, 忙不过来就忽略了见谅。每个人毕竟有自己的生活,我也不想因为太多无效的消息打乱了个人生活。

最后附上完整代码如下,把用户名密码修改成自己的就行。备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。

代码语言:javascript
复制
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()

如果我的分享对您有所帮助,欢迎点赞转发。 您的支持和鼓励是我写作的动力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档