首页 > 其他分享 >10、flask-会话-session

10、flask-会话-session

时间:2024-07-07 17:41:07浏览次数:22  
标签:username 10 登录 flask app session __ import

session会话

是一种服务器端的会话技术、依赖于cookie
特点:
- 服务端的会话技术
- 所有数据存储在服务器中
- 默认存储在内存中
- 存储结构也是key-value形式的键值对
- session是离不开cookie的

Flask中的session是全局对象

常用操作:
- 设置seesion:
    - seesion['key'] = value
- 获取seesion:
    - seesion.get(key, default=None)    #根据键获取会话的值
- 删除seesion:
    - session.pop(key) 删除某一个值
    - session.clear()    清除所有的session

cookie与session的区别:
- cookie
    - 在浏览器存储
    - 安全性较低
    - 可以减轻服务器压力
- seesion:
    - 在服务器段存储
    - 安全性高
    - 对服务器要求较高
    - 依赖cookie

 

__init__.py

 

#__init__.py: 初始化文件、用来创建flask应用
import datetime

from flask import Flask
from .views import blue     #蓝图

def create_app():
    app = Flask(__name__)   #创建flask应用

    #注册蓝图
    app.register_blueprint(blueprint=blue)

    # session配置
    print(app.config)
    '''
    <Config {'
    DEBUG': False, 
    'TESTING': False, 
    'PROPAGATE_EXCEPTIONS': None, 
    'SECRET_KEY': None, 
    'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 
    'USE_X_SENDFILE': False, 
    'SERVER_NAME': None, 
    'APPLICATION_ROOT': '/', 
    'SESSION_COOKIE_NAME': 'session', 
    'SESSION_COOKIE_DOMAIN': None, 
    'SESSION_COOKIE_PATH': None, 
    'SESSION_COOKIE_HTTPONLY': True, 
    'SESSION_COOKIE_SECURE': False, 
    'SESSION_COOKIE_SAMESITE': None, 
    'SESSION_REFRESH_EACH_REQUEST': True, 
    'MAX_CONTENT_LENGTH': None, 
    'SEND_FILE_MAX_AGE_DEFAULT': None, 
    'TRAP_BAD_REQUEST_ERRORS': None, 
    'TRAP_HTTP_EXCEPTIONS': False, 
    'EXPLAIN_TEMPLATE_LOADING': False, 
    'PREFERRED_URL_SCHEME': 'http', 
    'TEMPLATES_AUTO_RELOAD': None, 
    'MAX_COOKIE_SIZE': 4093}>
    
    '''

    # session配置
    # SECRET_KEY: session加密的密钥 将aa123456作为密钥
    app.config['SECRET_KEY'] = 'aa123456'
    app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(days=8)    #session过期时间


    return app

views.py

 

# 路由 + 视图函数
import datetime

from flask import request, redirect, session

from flask import Blueprint, render_template
# from models import *

#蓝图
# 创建蓝图对象
# 第一个参数:蓝图的名字
# 第二个参数:蓝图的包名
blue = Blueprint('user', __name__,)


#首页
@blue.route('/')        # 路由
@blue.route('/home/')
def home():
    # 获取session
    username = session.get('user')

    return render_template('home.html', username=username)


#登录页面
@blue.route('/login/', methods=['GET', 'POST'])
def login():

    # 判断请求方式、如果是get请求,则返回登录页面
    if request.method == 'GET':
        return render_template('login.html')

    # 如果是post请求,则进行登录操作
    elif request.method == 'POST':
        pass
        #1. 获取前端提交的数据
        username = request.form.get('username') #post提交使用form、这里的username要和html中的name属性一致
        password = request.form.get('password') #这里的password要和html中的name属性一致

        #2. 实现登录功能, 验证账号密码是否正确
        if username == 'xiaoxin' and password == '123456':
            #登录成功、跳转到首页
            response = redirect('/home/')

            # 设置session
            session['user'] = username
            session.permanent = True    # 设置session的过期时间, 默认是31天、如果__init__.py中设置过,则这里可以不用设置

            return response
        else:
            return '登录失败,用户名或密码错误'

# 注销
@blue.route('/logout/')
def logout():

    #先跳转到首页(刷新)
    response = redirect('/home/')

    # 删除session
    session.pop('user')
    # session.clear()   #清除所有的session

    return response

home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

    <h2>首页</h2>
    <hr>

    {% if username %}
        <p>你已经登录了,欢迎你:{{ username }}</p>
        <a href="/logout/">注销</a>
    {% else %}
        {#跳转到登录页面,注意这里要从后端路由去跳转#}
        <a href="/login/">登录</a>
    {% endif %}


</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>

    <h2>登录</h2>
    <hr>

    {#登录表单#}
{#    <form action="" method="post">#}
{#    <form action="{{ url_for('user.login') }}" method="post">#}
    <form action="/login/" method="post">
        <p>用户名:<input type="text" name="username"></p>
        <p>密码:<input type="password" name="password"></p>
        <p><input type="submit" value="登录"></p>
    </form>

</body>
</html>

app.py

from App import create_app

app = create_app()

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

 

标签:username,10,登录,flask,app,session,__,import
From: https://www.cnblogs.com/littlecc/p/18288749

相关文章

  • 最小步数模型——AcWing 1107. 魔板
    最小步数模型定义最小步数模型通常是指在某种约束条件下,寻找从初始状态到目标状态所需的最少操作或移动次数的问题。这类问题广泛存在于算法、图论、动态规划、组合优化等领域。具体来说,它涉及确定一个序列或路径,使得按照特定规则执行一系列步骤后,能够从起始位置或状态转换到......
  • P1093 [NOIP2007 普及组] 奖学金【排序】
    [NOIP2007普及组]奖学金题目背景NOIP2007普及组T1题目描述某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前555名学生发奖学金。期末,每个学生都......
  • 9、flask-会话-cookie
    Cookie客户端的会话技术:-cookie本身由浏览器保存,通过response将cookie写道浏览器上、下一次访问时、浏览器会根据不同的规则携带cookie过来特点:-客户端的会话技术、浏览器的会话技术-数据全都是存储在客户端中-存储使用的键值对结构进行的存储-特性:-支持过期时......
  • PHP留守儿童关爱之家网站-计算机毕业设计源码11079
    目录1绪论1.1研究背景1.2研究意义1.3 论文结构与章节安排2 留守儿童关爱之家网站系统分析2.1可行性分析2.2系统功能分析2.3 系统用例分析2.4系统流程和逻辑2.5本章小结3留守儿童关爱之家网站总体设计3.1系统结构设计3.2系统功能模块设计3......
  • 8、flask-Redirect重定向
    #路由+视图函数fromflaskimportBlueprint,request,render_template,jsonify,Response,redirect,url_for#frommodelsimport*#蓝图#创建蓝图对象#第一个参数:蓝图的名字#第二个参数:蓝图的包名blue=Blueprint('user',__name__,)@blue.route('/')#......
  • 7、flask-response响应
    #路由+视图函数fromflaskimportBlueprint,request,render_template,jsonify,Response#frommodelsimport*#蓝图#创建蓝图对象#第一个参数:蓝图的名字#第二个参数:蓝图的包名blue=Blueprint('user',__name__,)@blue.route('/')#路由defindex():......
  • Windows 11 中使用 Win10的文件资源管理器!
    1.在Windows11中恢复旧文件资源管理器,首先打开记事本并粘贴以下文本代码:WindowsRegistryEditorVersion5.00[HKEY_CURRENT_USER\Software\Classes\CLSID\{2aa9162e-c906-4dd9-ad0b-3d24a8eef5a0}]@="CLSID_ItemsViewAdapter"[HKEY_CURRENT_USER\Software\Classes\CLS......
  • 轻松解决win7和win10共享打印机出现错误代码0x00000709的办法
    轻松解决win7系统共享打印机错误代码0x00000709的办法轻松解决win10系统共享打印机错误代码0x00000709的办法为了方便用户更方便充分的利用打印机,配置打印机共享功能,开启共享后可以查询到共享的打印机,但是点击选择连接时出现错误代码0x00000709,尝试了各种方法修改注册表等还......
  • C语言 找出 1000 以内的所有完数
    一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,而6=1+2+3,因此6是“完数”,编程序找出1000以内的所有完数,并按下面格式输出其因子:6itsfactorsare1,2,3这个程序找出1000以内的所有完数,并输出每个完数及其因子。(如果因子和等于该数,则该数为完数。)#i......
  • 六、数据可视化—flask框架入门(爬虫及数据可视化)
    六、数据可视化—flask框架入门(爬虫及数据可视化)1,数据可视化简介2,flask(1)创建flask项目(2)开启debug模式(3)通过访问路径传递参数(4)加入渲染模板,渲染HTML文件(4-1)普通变量(4-2)列表变量(4-3)字典变量(5)用户表单提交1,数据可视化简介  数据可视化主要旨在借助于图形化手段,清晰......