当前位置: 首页 > article >正文

flask实现session开发

要在Flask应用中实现会话(session)开发,你可以使用Flask内置的session模块。以下是一个示例代码,演示在Flask应用中启用和使用会话功能:

from flask import Flask, session, redirect, url_for, request

app = Flask(__name__)
app.secret_key = 'your-secret-key'

@app.route('/')
def index():
    if 'username' in session:
        return f"Hello, {session['username']}! You are logged in."
    else:
        return 'You are not logged in.'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
        <form method="post" action="/login">
            <input type="text" name="username" placeholder="Enter your username">
            <input type="submit" value="Login">
        </form>
    '''

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

在上述示例中,我们首先导入了必要的模块。然后,创建了一个Flask应用实例,并设置了一个密钥作为��话的加密密钥,使用app.secret_key属性进行设置。

接下来,我们定义了三个路由:

  • /:主页路由,检查会话中是否存在username键。如果存在,欢迎用户并显示其用户名,否则显示用户��登录的消息。

  • /login:登录页面路由,支持GET和POST请求。如果是POST请求,则将用户输入的用户名存储到会话中,并重定向至主页。如果是GET请求,则显示登录表单。

  • request.method == 'POST':用于检查当前请求是否是POST请求。只有在用户提交登录表单时,请求方法才会是POST。

  • session['username'] = request.form['username']:将从登录表单中提交的用户名存储到会话的"username"键中。request.form用于访问POST请求的表单数据,"username"是表单中的输入字段名。

  • return redirect(url_for('index')):重定向至主页路由(“index”)。这里使用redirect()函数来指定重定向的路径,url_for()函数根据路由函数的名称生成该路由的URL。

  • /logout:登出路由,从会话中移除username键,并重定向至主页。

  • def logout()::函数名为logout,它没有参数。

  • session.pop('username', None):这行代码从会话(session)中移除键为"username"的值。session.pop(key, default)用于移除会话中指定键的项,并返回对应的值。如果键不存在,则返回默认值None。

  • return redirect(url_for('index')):重定向到主页路由(“index”)。用户登出后,重定向到主页以展示未登录状态。

需要注意的是,会话数据默认存储在客户端的cookie中。为了安全起见,您可能会考虑将会话数据保存在服务器端或使用其他加密手段。您可以进一步对会话进行自定义设置以符合您的项目需求。


http://www.kler.cn/news/136129.html

相关文章:

  • 1. hadoop环境准备
  • 基于一致性算法的微电网分布式控制MATLAB仿真模型
  • Java格式化类Format
  • 电子学会C/C++编程等级考试2022年06月(一级)真题解析
  • 初识分布式键值对存储etcd
  • Zotero在word中插入带超链接的参考文献/交叉引用/跳转参考文献
  • 工作记录---为什么双11当天不能申请退款?(有趣~)
  • 万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志分层
  • 2023-11-18 mysql-sysbench压测TPS/QPS-记录
  • LangChain 5易速鲜花内部问答系统
  • 使用cli批量下载GitHub仓库中所有的release
  • 暖阳脚本_ 将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent
  • SpringCloud--分布式锁实现
  • K8S配置资源管理
  • 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷
  • 【grafana | clickhouse】实现展示多折线图
  • SVR和SVM是什么关系
  • ES索引数据清理脚本示例
  • 01背包 P1507 NASA的食物计划
  • 十一、统一网关GateWay(搭建网关、过滤器、跨越解决)
  • 傅里叶级数@正弦级数和余弦级数@奇偶延拓和周期延拓
  • mysql清除数据痕迹_MySQL使用痕迹清理~/.mysql_history - milantgh
  • 【手撕数据结构】(三)顺序表和链表
  • PyCharm:PyCharm新建.py文件时自动带出指定内容
  • 服务器端请求伪造(SSRF)
  • 提高matlab运算效率——预分配内存
  • [github配置] 远程访问仓库以及问题解决
  • 数据结构02附录01:顺序表考研习题[C++]
  • 前端入门(二)Vue2到Vue3
  • golang学习笔记——要求用户输入一个数字,如果该数字为负数,则进入紧急状态