flask(会话技术)

PythonWebLesson03–Flask

会话技术

文章目录

  • PythonWebLesson03--Flask
    • 会话技术
          • Response
          • Cookie
            • 1.首先注册两个路由,login和report
            • 2.在templates/login/login.html表单中添加name,使用ctrl+f快捷键搜索表单搜索from ,
            • 3.在action加上方法请求路径
            • 4.获取表单信息
            • 5.简单的表单认证
            • 6.设置响应
            • 7.重定向
            • 8.在report处获取cookie
            • 9.使用response.del.cookie实现登出注销功能
            • 设置cookie过期时间
          • Session
            • session注销

Response

response.data:获取二进制的响应body数据

response.data = ‘xxx’ :设置响应body数据

response.calculate_content_length:获取响应的总字节数

response.header:获取响应对象的头部信息

response.status:获取字符串格式的响应状态码

response.status_code:获取int格式的响应状态码

response.freeze():将响应对象序列化,返回None

response.set_cookie():设置cookie(重点)

response.delete_cookie():删除cookie,将cookie设置为立即失效(重点)

Cookie
  • 客户端会话技术
  • 数据存储在客户端
  • Key-value

用Cookie进行信息展示

1.首先注册两个路由,login和report
@admin.route('/login',methods=['POST','GET'])
def login():
    return render_template('login/login.html')
@admin.route('/report')
def report():
    return render_template('report/member.html', username=username)
2.在templates/login/login.html表单中添加name,使用ctrl+f快捷键搜索表单搜索from ,
<input id="" name="username" type="text" placeholder="账户" class="input-text size-L">

<input id="" name="password" type="password" placeholder="密码" class="input-text size-L">
3.在action加上方法请求路径
<form class="form form-horizontal" action="{{ url_for('admin.login') }}" method="post">
4.获取表单信息
@admin.route('/login',methods=['POST','GET'])
def login():
    if request.method == 'POST':
       # username = request.form.get('username')  #这里不能用单引号,否则获取为None
       # password = request.form.get('password')	#这里不能用单引号,否则获取为None
        
        username = request.form.get("username")
        password = request.form.get("password")
        print(username+''+password)
    return render_template('login/login.html')
5.简单的表单认证
@admin.route('/login',methods=['POST','GET'])
def login():
    if request.method == 'POST':
        username = request.form.get("username")
        password = request.form.get("password")
        print(username+" "+password)

    #简单的表单验证,如果账号密码为空,报错,否则登录成功!
    if username is None or len(username) < 1:
        return '请输入正确的用户名'

    if password is None or len(password) < 1:
        return '请输入正确的密码'

    return render_template('login/login.html')

6.设置响应
        response = Response("欢迎你%s" %username)
        return  response@admin.route('/login',methods=['POST','GET'])
def login():
    if request.method == 'POST':
        username = request.form.get("username")
        password = request.form.get("password")
        print(username+" "+password)
        #简单的表单验证,如果账号密码为空,报错,否则登录成功!
        if username is None or len(username) < 1:
            return '请输入正确的用户名'
        if password is None or len(password) < 1:
            return '请输入正确的密码'
        response = Response("欢迎你%s" %username)
        return  response
     return render_template('login/login.html')
7.重定向
@admin.route('/login',methods=['POST','GET'])
def login():
    if request.method == 'POST':
        username = request.form.get("username")
        password = request.form.get("password")
        print(username+" "+password)
        #简单的表单验证,如果账号密码为空,报错,否则登录成功!
        if username is None or len(username) < 1:
            return '请输入正确的用户名'
        if password is None or len(password) < 1:
            return '请输入正确的密码'
        # response = Response("欢迎你%s" %username)
        #return  response
        
        response = redirect(url_for('admin.report'))  #创建一个响应,重定向
        response.set_cookie('username', username)   #设置cookie的方法
        return response

        # session['username'] = username #设置session的方法
        # return redirect(url_for('admin.report'))

    return render_template('login/login.html')
8.在report处获取cookie
@admin.route('/report',methods=['POST','GET'])
def report():
    username = request.cookies.get('username')
    print(username)
    return render_template('report/member.html',username=username) #传到视图

在member.html处admin改为变量代码块使用我们的username

<li class="dropDown dropDown_hover"> <a href="#" class="dropDown_A">{{ username }} <i class="Hui-iconfont">i>a>
9.使用response.del.cookie实现登出注销功能
@admin.route('/logout',methods=['POST','GET'])
def logout():
    response = redirect(url_for('admin.login'))
    response.delete_cookie('username')
    return response
设置cookie过期时间

默认关闭浏览器cookie过期

先尝试登录,然后直接进入member页,名字为None

 response.set_cookie('username', username,max_age=3600)   #设置cookie的方法,过期时间(秒)
Session
  • 内存存储
  • RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.(配置混淆秘钥)APP.config[SECRET_KEY]=‘GDPUJF’
  • flask将session存到cookie
@admin.route('/login',methods=['POST','GET'])
def login():
    if request.method == "GET":
        return render_template('login/login.html')

    elif request.method == "POST":
        username = request.form.get("username")
        password = request.form.get("password")
        # response = make_response()
        if username is None or len(username) < 1:
            return '请输入正确的用户名'

        if password is None or len(password) < 1:
            return '请输入正确的密码'

            #response = Response('登录成功%s' %username)
           	#response.set_cookie('username', username)

        # session的方式
        session['username'] = username
        return redirect(url_for('admin.report'))

        #在浏览器检查看看respon
        # return response

@admin.route('/report',methods=['POST','GET'])
def report():
    #username = request.cookies.get('username');
     username = session.get('username')
    print(username)
    if username is None:
        return redirect(url_for('admin.login'))
    return render_template('report/member.html', username=username)

session F12查看session

session注销
@admin.route('/logout',methods=['POST','GET'])
def logout():
    response = redirect(url_for('admin.login'))
    session.pop('username',None)    #session注销
    #response.delete_cookie('username')
    return response

设置session有效期:如果没有设置session的有效期。那么默认就是浏览器关闭后过期。如果设置session.parmanent=True,那么就会默认31天后过期。如果不想在31天后过期,那么可以设置app.config[‘PERMANENT_SESSION_LIFETIME’]= timedelta(hour=2),可以指定多久后过期(比如:2小时)

cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前是哪个用户了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4kb。因此使用cookie只能存储一些小量的数据。

cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前是哪个用户了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4kb。因此使用cookie只能存储一些小量的数据。

session:session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,存储一些session信息还是绰绰有余的。

你可能感兴趣的:(flask,python,cookie,session)