社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

子晓聊技术 • 2 天前 • 10 次点击  
之前写了个streamlit多页面功能量化分析应用, 当时星球群里同学建议我增加个鉴权, 我觉得没必要就没搞。 这几天发生一些事情以后,今天想了想还是加上吧, 这里写个例子,方便需要增加鉴权的同学参考。
改造的功能:
  1. 安全增强
  • 使用bcrypt进行密码哈希存储与验证(需安装bcrypt包)
  • 密码对比使用恒定时间算法防止时序攻击

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

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

相关文章推荐:
[Python技术]利用streamlit构建多页面应用功能
为什么我选择Streamlit构建股票分析应用,而不是ipynb,文末送蛇年红包封面


题外话:
最近有同学问我知识星球有哪些有价值的东西,这里再说明下。 看每个人对价值的理解。  1年99的价格不多说,文章里的源代码文件、可以访问的网站,  专属微信群闲聊。 至于闲聊什么, 看自己的理解了。  如果能独立运行公开项目的源代码,如果有稳定盈利的体系,没必要加,性价比低。 不多解释,信者入,不强求,随缘。
另外,有同学可能疑惑,为啥微信消息有些时候不回,主要是因为 个人微信消息太多了,简单打了标签, 忙不过来就忽略了见谅。每个人毕竟有自己的生活,我也不想因为太多无效的消息打乱了个人生活。  

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

import streamlit as stimport homefrom zhangting import zhangting_lianbanfrom zhangting import  zhangting_gainianfrom zuigaoban import  zuigaoban_zhexianfrom jingjia import jingjiafenxifrom gegu import gegufrom jishuzhibiao import dapanfrom jishuzhibiao import shenqijiuzhuan#from jishuzhibiao import jishuzhibiaofrom bankuai import bankuai_tonghuashunfrom bankuai import bankuai_dongfangcaifufrom  qingxu import  qingxufrom huice import  huicefrom zhouqi import all_monthfrom kaipanla import kaipanla_ticaifrom xuanxue import meiriyijifrom news import newsimport 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()

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

为了防范一些不可预知的风险,欢迎有兴趣的同学同时关注我另外一个备用号,偶尔发点文章。正所谓有备无患。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181595
 
10 次点击