Flask框架從入門到精通之Response(七)

知識點: 一、HttpResponse 二、Cookiehtml

1、概況

視圖在接收HttpRequest並處理後,必須返回HttpResponse對象。目前視圖函數只是返回字符串,以後 Flask 將字符串轉換爲響應對象。若是你要顯式地轉換,你可使用make_response()函數而後再進行修改。python

2、HttpResponse

咱們新建一個名爲cookie.html的模板,簡單寫上下面代碼:flask

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

<h1>設置cookie</h1>

</body>
</html>
複製代碼

咱們在後臺用make_response()返回HttpResponse:瀏覽器

from flask import Flask, render_template, make_response

app = Flask(__name__)


@app.route('/setcookie', methods=['GET', 'POST']) # 支持get、post請求
def setcookie():  # 視圖函數
    resp = make_response(render_template('cookie.html'))  # 顯式轉換成HttpResponse對象
   
    return resp


app.config['DEBUG'] = True

if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000)  # 運行程序

複製代碼

咱們訪問瀏覽器試一下: 安全

在這裏插入圖片描述

3、Cookie

咱們都知道HTTP協議是無狀態的請求協議,用戶此次訪問和下一次訪問都是新的請求,它們之間是沒任何關係的。可是咱們須要知道上一次訪問用戶作了什麼操做,就須要用到cookie。cookie是網站以鍵值對格式存儲在瀏覽器中的一段純文本信息,用於實現用戶跟蹤。cookie是基於域安全的 咱們經過set_cookie方法設置cookiecookie

from flask import Flask, render_template, make_response

app = Flask(__name__)


@app.route('/setcookie', methods=['GET', 'POST']) # 支持get、post請求
def setcookie():  # 視圖函數
    resp = make_response(render_template('cookie.html'))  # 顯式轉換成HttpResponse對象
    resp.set_cookie('nickname', 'laowang')  # 設置cookie
    resp.set_cookie('age', "12")  # 設置cookie
    return resp


app.config['DEBUG'] = True

if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000)  # 運行程序

複製代碼

咱們訪問瀏覽器試一下: app

在這裏插入圖片描述
咱們已經瀏覽器寫入了以下信息,當咱們下一次請求的時候,會自動把本地的cookie傳給後臺。

咱們經過HttpReqeust對象把咱們瀏覽器的cookies取到,咱們新寫一個視圖把cookie取到:函數

@app.route('/getcookie', methods=['GET', 'POST']) # 支持get、post請求
def getcookie():  # 視圖函數
    nickname = request.cookies.get('nickname')
    age = request.cookies.get('age')
    return 'nickname=%s age=%s' % (nickname, age)
複製代碼

咱們訪問瀏覽器試一下: post

在這裏插入圖片描述
咱們已經在後臺把瀏覽器本地的cookie取到了。

過時時間:

cookie是有過時時間的,當咱們設置cookie的時候能夠直接給cookie設置過時時間,有以下幾種設置方法:網站

  • max_age是一個整數,表示在指定秒數後過時。
  • expires是一個datetime或timedelta對象,會話將在這個指定的日期/時間過時。
  • max_age與expires二選一。
  • 若是不指定過時時間,在關閉瀏覽器時cookie會過時。
from flask import Flask, request, render_template, make_response
from datetime import datetime

app = Flask(__name__)


@app.route('/setcookie', methods=['GET', 'POST']) # 支持get、post請求
def setcookie():  # 視圖函數
    resp = make_response(render_template('cookie.html'))  # 顯式轉換成HttpResponse對象
    resp.set_cookie('nickname', 'laowang', max_age=3600)  # 設置cookie 3600秒過時
    resp.set_cookie('age', "12", expires=datetime(2019, 3, 18))  # 設置cookie,2019年3月18後過時
    return resp


@app.route('/getcookie', methods=['GET', 'POST']) # 支持get、post請求
def getcookie():  # 視圖函數
    nickname = request.cookies.get('nickname')
    age = request.cookies.get('age')
    return 'nickname=%s age=%s' % (nickname, age)


app.config['DEBUG'] = True

if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000)  # 運行程序

複製代碼

咱們訪問瀏覽器試一下:

在這裏插入圖片描述
咱們能夠清楚地看到,一個cookie是一小時後過時,一個則是2019年3月18後過時。

刪除cookie:

咱們能夠經過delete_cookie方法刪除cookie

@app.route('/delcookie', methods=['GET', 'POST']) # 支持get、post請求
def delcookie():  # 視圖函數
    res = make_response('刪除cookie')
    res.delete_cookie('nickname')  # 刪除的cookie的本質就是改變cookie的過時時間
    return res
複製代碼

歡迎關注個人公衆號:

image
相關文章
相關標籤/搜索