# 路由 + 檢視函式
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)