首页 > 其他分享 >9、flask-会话-cookie

9、flask-会话-cookie

时间:2024-07-07 16:31:56浏览次数:17  
标签:username __ 登录 flask app 会话 cookie response

Cookie

客户端的会话技术:
- cookie本身由浏览器保存,通过response将cookie写道浏览器上、下一次访问时、浏览器会根据不同的规则携带cookie过来

特点:
- 客户端的会话技术、浏览器的会话技术
- 数据全都是存储在客户端中
- 存储使用的键值对结构进行的存储
- 特性:
    - 支持过期时间
    - 默认会自动携带本网站的所有cookie
    - 根据域名进行cookie存储
    - 不能跨域名
    - 不能跨浏览器
- cookie是通过服务器创建的response来创建的

设置cookie:
- response.set_cookie(key, valuep[,max_age=None,exprise=None])
    - max_age:整数,指定cookie过期的时间
    - expries:整数,指定过期时间,可以指定一个具体日期时间 
    - max_age和expries两个选一个指定
    

获取cookie:

  request.cookies.get(key)

删除cookie:

  response.delete_cookie(key)

 

案例:

__init__.py

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


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

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

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

    return app

app.py

from App import create_app

app = create_app()

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

views.py

# 路由 + 视图函数
import datetime

from flask import request, redirect

from flask import Blueprint, render_template
# from models import *

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


#首页
@blue.route('/')        # 路由
@blue.route('/home/')
def home():

    #4.获取cookie
    # 这里的user 是保存到cookie中的变量名,如果不一样或是不存在就无法获取
    username = request.cookies.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/')

            # 3.设置cookie
            # cookie中不能用中文
            # response.set_cookie('user', username) 默认浏览器关闭则cookie失效
            #过期时间:
            #   max_age: 秒    # 7天
            #   expires: 指定日期
            # response.set_cookie('user', username, max_age=3600*24*7)
            response.set_cookie('user', username, expires=datetime.datetime(2025, 7, 9))
            return response

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

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

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

    # 5.选择要删除的cookie
    response.delete_cookie('user')

    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>

 

 

标签:username,__,登录,flask,app,会话,cookie,response
From: https://www.cnblogs.com/littlecc/p/18288638

相关文章

  • 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():......
  • cookies
    进入题目,提示cookies伪造查看url发现filename为base64加密,发现参数line尝试查看index.php,base64加密对参数line进行遍历得到源码error_reporting(0);$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");$line=isset($_GET['line'])?in......
  • 六、数据可视化—flask框架入门(爬虫及数据可视化)
    六、数据可视化—flask框架入门(爬虫及数据可视化)1,数据可视化简介2,flask(1)创建flask项目(2)开启debug模式(3)通过访问路径传递参数(4)加入渲染模板,渲染HTML文件(4-1)普通变量(4-2)列表变量(4-3)字典变量(5)用户表单提交1,数据可视化简介  数据可视化主要旨在借助于图形化手段,清晰......
  • flask旅游大数据可视化分析推荐系统 毕业设计-附源码10903
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对旅游大数据可视化分析推荐系统等问题,对旅游大数据可视化分析推荐系统进行研究分析,然后开发......
  • ubuntu的screen会话,断开远程连接也能照样运行程序
    文章目录创建新的`screen`会话管理`screen`会话例子关闭某一个`screen`会话删除某一个`screen`会话在Ubuntu中使用screen工具可以创建和管理多个终端会话。以下是创建screen会话的方法:创建新的screen会话启动一个新的screen会话:screen这将......
  • 5、flask-路由参数
     这里延续上一节的内容#路由+视图函数fromflaskimportBlueprint#frommodelsimport*#蓝图#创建蓝图对象#第一个参数:蓝图的名字#第二个参数:蓝图的包名blue=Blueprint('user',__name__,)@blue.route('/')#路由defindex():return'user......
  • 4、flask-项目拆分
    项目的拆分其实就是将app.py中的工作拆分开来、类似Django一样、每个项目都把路由模板和试图函数分开写 app.py#路由+视图函数fromflaskimportBlueprintfrommodelsimport*#蓝图#创建蓝图对象#第一个参数:蓝图的名字#第二个参数:蓝图的包名blue=Blueprin......
  • 3、flask-模板渲染
    模板渲染其实就是静态文件的展示app.pyimportosfromflaskimportFlask,render_template,jsonifyapp=Flask(__name__)@app.route('/')defhome():return'flaskhome2'@app.route('/index/')defindex():##返回字符串......
  • 2、flask-run启动参数详解
    app.py这里 app.run(True,port=5001,host='0.0.0.0')fromflaskimportFlask#创建flask应用对象app=Flask(__name__)@app.route('/')#路由defhello_world():#视图函数return'HelloWorld!'#响应给前端#添加路由和视图函数@app.route......