1. 程式人生 > 實用技巧 >flask之request

flask之request

flask的request

每個框架中都有處理請求的機制(request),但是每個框架的處理方式和機制是不同的,看看程式碼中怎麼用...

from flask import Flask
from flask import request
from flask import render_template

app = Flask(__name__)


@app.route('/')
def aa():
    return render_template('formss.html')


@app.route('/rep', methods=['POST'])  # 表示只允許post請求,是個列表就意味著可以允許多種請求方式
def rep():
    print(request.values)  # 可以同時獲取ulr和form的引數  CombinedMultiDict([ImmutableMultiDict([('id', '1'), ('age', '12')]),
    # ImmutableMultiDict([('user', '小明'), ('pwd', '123')])])
    print(request.values.get('id'))
    print(request.values['user'])
    print(request.values.to_dict())  # 直接將url和form的內容轉換成字典
    print(request.method)  # 用來驗證請求方式
    print(request.form)  # 類似字典的東西  ImmutableMultiDict([('user', '小明'), ('pwd', '123')])
    print(request.form['user'])  # 字典取值 小明
    print(request.form['pwd'])  # 字典取值  123
    print(list(request.form.keys()))  # 拿出所有的value值
    return 'OK'


@app.route('/gg', methods=['GET', 'POST'])
def gg():
    print(request.args)  # 獲取url中的引數  也是一個類似字典  ImmutableMultiDict([('id', '1'), ('age', '18')])
    # request.args與request.form 的區別是 一個是獲取url的引數值 一個是是獲取表單的內容 都是一個類似的字典
    dic = dict(request.args)
    print(dic)  # {'id': '1', 'age': '18'}
    print(request.headers)
    '''
    Host: 127.0.0.1:5000
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    '''
    print(request.data)  # request.data 之 如果處理不了的就變成字串兒存在data裡面
    '''
    b''
    '''
    return 'ok'

# request 是基於 mimetype 進行處理的mimetype的型別 以及 字串兒 : http://www.w3school.com.cn/media/media_mimeref.asp
#
# 如果不屬於上述型別的描述,request就會將無法處理的引數轉為Json存入到 data 中
#
# 其實我們可以將 request.data , json.loads 同樣可以拿到裡面的引數


# 注意這裡的坑來啦! 坑來啦!
# 如果url和form中的Key重名的話,form中的同名的key中value會被url中的value覆蓋
# request.cookies 是將儲存在瀏覽器中的cookie讀取出來
@app.route('/a')
def file():
    return render_template('forms1.html')

@app.route('/file',methods=['POST'])
def form1():
    print(request.files)
    print(request.files['file'])
    my_file = request.files['file']
    my_file.save('douzi.txt')
    return 'OK'

@app.route('/path')
def path_():
    print(request.path)   #獲取當前的url路徑  /path
    print(request.script_root) #獲取當前url的上一級路徑
    print(request.url)  #獲取當前的url的全部路徑
    print(request.url_root)  #獲取當前的url上一級的全部路徑
    return 'ok'

# request.json 之 前提你得告訴是json

# 如果在請求中寫入了 "application/json" 使用 request.json 則返回json解析資料, 否則返回 None
if __name__ == '__main__':
    app.run('127.0.0.1', 5000, debug=True)