首页 > 其他分享 >Flask 会话技术 cookies原理

Flask 会话技术 cookies原理

时间:2023-06-01 15:45:11浏览次数:49  
标签:username cookies return Flask 会话 session cookie home response

cookies

# 首页
@blue.route('/')
@blue.route('/home/') # 装饰器可以用多个,这两个路由都能访问到home函数
def home()
    # 4. 获取cookie
    username = request.cookies.get('user')
    return render_template('home.html', username =username)

# 登陆
@blue.route('/login/', method = ['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')
        password = request.form.get('username')
        
        # 2. 模拟登陆: 用户名和密码验证
        if username=='lisi', and password=='123':
            # 登陆成功
            response = redirect('/home/')
            
            # 3. 设置cookie
            #    cookie不能用中文
            # response.set_cookie('user', username)  # 默认浏览器关闭则 cookie失效
            #   过期时间:
            #   max_age: 秒
            #   expires: 指定的datetime日期
            # response.set_cookie('user', username, max_age=3600*24*7)
             response.set_cookie('user', username, expires=datetime.datetime(2023,12,12)
            
             return response 
            
        else:
            return '用户名或密码错误!'
                                 
# 注销
@blue.route('/logout/')
def logout():
   response = redirect('/home/')    # 用户点注销的时候需要重定向页面,重新走到登陆函数去获取cookie,没有获取到就到登陆页面                         
   # 5. 删除cookie 
   response.delete_cookie('user')
                                 
    return response

源码:

  key、value、过期时间二选一,三者必填

 

session

# 服务器端回话技术,依赖于cookie
特点:
    - 服务端的回话技术
    - 所有数据存储在服务器中
    - 默认存储在内存中
    - 存储结构也是key-value形式,键值对
    - session 是离不开cookie的
    
Flask中的session是全局对象
(之前的request也是Flask的一个全局对象)

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

 

 

# 首页
@blue.route('/')
@blue.route('/home/') # 装饰器可以用多个,这两个路由都能访问到home函数
def home()
    # 获取session
    username = session.get('user') 
    return render_template('home.html', username =username)

# 登陆
@blue.route('/login/', method = ['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')
        password = request.form.get('username')
        
        # 2. 模拟登陆: 用户名和密码验证
        if username=='lisi', and password=='123':
            # 登陆成功
            response = redirect('/home/')
            
            # 设置sesssion
            session['user'] = username
            session.permanent = True  # 让session的过期时间生效
            
             return response 
            
        else:
            return '用户名或密码错误!'
                                 
# 注销
@blue.route('/logout/')
def logout():
   response = redirect('/home/')    # 用户点注销的时候需要重定向页面,重新走到登陆函数去获取cookie,没有获取到就到登陆页面                         
   # 删除session
   session.pop('user')                              
                                 
    return response

还需要在init.py 进行session的配置

print(app.config)  # flask配置信息

app.config['SECREY_KEY'] = 'abc123'  # 用于加密

# 设置session过期时间
app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(days=31)

cookie和session的区别

cookie:

  1,在浏览器存储

  2,安全性较低

  3,可以讲清服务器压力

session:

  1,在服务器端存存储

  2,安全性高

  3,对服务器要求较高

  4,依赖cookie 

标签:username,cookies,return,Flask,会话,session,cookie,home,response
From: https://www.cnblogs.com/jiqiong/p/17449221.html

相关文章

  • Flask---框架入门
    一个最小的Flask应用看起来会是这样:fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world():return'HelloWorld!'if__name__=='__main__':app.run()把它保存为 hello.py (或是类似的),然后用Python解释器来运行。确保你......
  • Flask, Django - 区别
    Python测试开发中Django和Flask框架为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用、系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后一块砖一块砖叠上去。而开发一个应用呢?同样也需要一个好的架构设计,数据库建模,然后一个模块一个模块......
  • Flask-----轻量级的框架,快速的搭建程序(python)
     Flask是一个基于Python开发并且依赖jinja2模板和WerkzeugWSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借......
  • Percona-Toolkit系列之pt-kill杀会话利器
    1.pt-kill生产环境中我们时常遇到这样的情况,数据库性能恶劣,需要马上杀掉全部会话,不然数据库就挂起来。我们可以先找showprocesslist的输出来杀会话,但是比较麻烦。pt-kill为我们解决了杀会话问题。2常用杀会话场景2.1按照用户杀会话pt-kill--host=192.168.56.103--user=root......
  • python~Flask框架建立web应用
    通过python来开发web应用,可以产简化了web开发的流程,功能和函数库也是非常丰富,我们也是开箱即用,目前比较流程的WEB框架就是Flask和django。根据2020年JetBrainsPython开发人员调查,Django和Flask是迄今为止最受欢迎的两个PythonWeb框架。考虑到Web开发行业在过去五年左右的时间......
  • 【Python】【Flask】前端调用后端方法
    后端代码:@app.route("/test",methods=['POST','GET'])deftest():return"我是测试的"前端代码:1、使用<a>标签<ahref="{{url_for('test')}}">我是测试</a>这个是最简单的,点击一下,就自动跳转了。2、使用<button>......
  • chatgpt~bingAI帮我解决flask错误
    出错信息我使用flask时,运行后出现下面的错误:Traceback(mostrecentcalllast):File"D:/github/lind-python/test-web.py",line1,in<module>fromflaskimportFlaskFile"C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-pa......
  • Flask013_宏和 import 语句
    宏 forms.html1{%macroinput(name,value="",type="text")%}2<inputtype="{{type}}"value="{{value|escape}}"name="{{name}}">3{%endmacro%}45{%macrotextarea(name,value="&q......
  • flask跨域
    跨域(Cross-Origin)是指在Web开发中,浏览器限制了从一个源(域、协议和端口)向另一个源发送HTTP请求的操作。简单来说,如果网页的JavaScript代码试图通过XMLHttpRequest、FetchAPI等方式向不同源的服务器发送请求,浏览器会根据同源策略(Same-OriginPolicy)进行限制,阻止跨域请求。  ......
  • flask得使用
    简单的flask使用fromflaskimportFlask,requestapp=Flask(__name__)#在当前文件下创建应用@app.route("/",methods=['POST'])#装饰器,url,路由defindex():#视图函数data=request.get_json(force=True)print(data)[email protected]......