8、flask-Redirect重定向

little小新發表於2024-07-07
# 路由 + 檢視函式

from flask import Blueprint, request, render_template, jsonify, Response, redirect, url_for

# from models import *

#藍圖
# 建立藍圖物件
# 第一個引數:藍圖的名字
# 第二個引數:藍圖的包名
blue = Blueprint('user', __name__,)

@blue.route('/') # 路由
def index():
    return 'user index'


# 請求和響應

# Request 物件 匯入from flask import request
@blue.route('/request/', methods=['GET', 'POST'])
def get_request():
    pass
    # print(request)

    #重要屬性
    #get請求  列印請求的引數或屬性
    print(request.method)   #請求方法 GET或POST http://127.0.0.1:5000/request/
    # 請求引數 http://127.0.0.1:5000/request/?name=zhangsan&&name=lishi&age=18
    # 輸出一個類字典物件:ImmutableMultiDict([('name', 'zhangsan'), ('name', 'lishi'), ('age', '18')])
    #ImmutableMultiDict:類字典物件、可以出現重複的key
    print(request.args)
    #引數取值
    print(request.args.get('name'))
    print(request.args.getlist('name'))
    # print(request.args.get['name'], request.args['age'])


    #post請求
    print(request.form) #列印post請求過來的引數
    print(request.form.get('name')) #取值

    #cookie
    print(request.cookies)  # 列印cookie


    #不常用
    #獲取請求的路徑
    #請求:http://127.0.0.1:5000/request/?name=zhangsan&&name=lishi&age=18
    print(request.path)     # /request/
    print(request.url)      # http://127.0.0.1:5000/request/?name=zhangsan&&name=lishi&age=18
    print(request.full_path)    # /request/?name=zhangsan&&name=lishi&age=18
    print(request.base_url)     # http://127.0.0.1:5000/request/
    print(request.host_url)     # 127.0.0.1
    print(request.remote_addr)  # 127.0.0.1:5000,客戶端的ip

    #請求頭
    print(request.headers)  # 請求頭
    print(request.files)    # 上傳的檔案
    print(request.user_agent)   # 使用者代理、瀏覽器資訊

    return 'get_request'


#response響應
@blue.route('/response/')
def get_response():
    pass
    #響應的幾種方式
    # 1. 返回字串
    # return 'response'

    # 2.模板渲染(前後端不分離)
    # return render_template('index.html', name='zhangsan', age=18)

    # # 3.返回json資料(前後端分離)
    # data = {'name': 'zhangsan', 'age': 18}
    # # return data
    # return jsonify(data)    # 序列化、將字典轉為字串
    #
    # 4. 自定義響應物件
    html = render_template('index.html', name='zhangsan', age=18)
    print(html, type(html))
    # res = make_response(html, 200)
    res = Response(html, 200)

    return res

# 重定向
@blue.route('/redirect/')
def get_redirect():
    pass

    # 重定向的集中方式
    # 1. 重定向到網站
    # return redirect('https://www.baidu.com')

    # 2. 重定向到自身的路由
    # return redirect('/resonpse/')

    # #3. url_for('藍圖名稱.檢視函式名稱') -》反向解析 根據函式名找到路由
    # # blue = Blueprint('user', __name__,)   這裡user是藍圖的名稱
    # ret = url_for('user.get_response')
    # print(ret)  #/response/
    # return redirect(ret)
    #或 直接傳入引數
    ret2 = url_for('user.get_request', name='zhangsan', age=18)
    return redirect(ret2)