日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Web框架——Flask系列之request请求参数详解(十一)

發布時間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web框架——Flask系列之request请求参数详解(十一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、request參數

request 就是flask中代表當前請求的 request
對象,其中一個請求上下文變量(理解成全局變量,在視圖函數中直接使用可以取到當前本次請求)

from flask import request
就是Flask中表示當前請求的request對象,request對象中保存了一次HTTP請求的一切信息。
常用的屬性如下:

from flask import Flask,requestapp = Flask(__name__)# 接口 api # 127.0.0.1:5000/index?city=shenzhen &country=china ?后面的稱為查詢字符串 @app.route("/index",methods=["GET","POST"]) def index():# request中包含了前端發送過來的所有請求數據# form和data是用來提取請求體的數據的# 通過request.form 可以直接提取請求體中的表單格式的數據,是一個類字典的對象# 通過get方法只能拿到多個同名參數的第一個值name = request.form.get("name")age = request.form.get("age")gender = request.data# args是用來提取url中的參數(查詢字符串)city = request.args.get("city")print(request.data)return "hello name=%s,age=%s,gender=%s,city=%s" % (name,age,gender,city)if __name__ == '__main__':app.run(debug=True)

通過request.get(“name”)方法只能拿到多個同名參數的第一個值,request.args.get(“city”)是用來提取url中的參數(查詢字符串):

通過request.form.getlist(“name”),可以拿到所有同名參數的值

二、字符編碼問題:

python2 字符串類型:
str “utf-8” “gbk”
unicode
python3中已經將兩者進行了統一!

示例:
a = “中國” # str
a = u"中國" # unicode

“中國” % “sa”
報錯:
ASCII cannot decode \xxx\xx
解決方法:在非英文字符前面加上u
u"中國" % “sa”

三、上傳文件

已上傳的文件存儲在內存或是文件系統中一個臨時的位置。你可以通過請求對象的 files 屬性訪問它們。每個上傳的文件都會存儲在這個字典里。它表現近乎為一個標準的 Python file 對象,但它還有一個 save() 方法,這個方法允許你把文件保存到服務器的文件系統上。這里是一個用它保存文件的例子:

from flask import request@app.route('/upload', methods=['GET', 'POST']) def upload_file():if request.method == 'POST':f = request.files['the_file']f.save('/var/www/uploads/uploaded_file.txt')...

如果你想知道上傳前文件在客戶端的文件名是什么,你可以訪問 filename 屬性。但請記住, 永遠不要信任這個值,這個值是可以偽造的。如果你要把文件按客戶端提供的文件名存儲在服務器上,那么請把它傳遞給 Werkzeug 提供的 secure_filename() 函數:

from flask import request from werkzeug import secure_filename@app.route('/upload', methods=['GET', 'POST']) def upload_file():if request.method == 'POST':f = request.files['the_file']f.save('/var/www/uploads/' + secure_filename(f.filename))
  • myCode:
from flask import Flask,requestapp = Flask(__name__)@app.route("/upload",methods=["POST"]) def upload():'''接收前端傳送過來的文件'''file_obj = request.files.get("pic")if file_obj is None:# 表示文件沒有傳過來return "未上傳文件"# 否則將文件保存到本地# # 1. 創建一個文件# f = open("./demo.png", "wb")## # 2. 向文件中寫入內容# data = file_obj.read()# f.write(data)# # 3. 關閉文件# f.close()# 直接使用上傳的文件對象保存file_obj.save("./demo1.png")return "上傳成功"if __name__ == '__main__':app.run(debug=True)


運行結果:

最原始的將內容寫入文件的方法:

# 1. 創建一個文件f = open("./1.txt", "wb")# 2. 向文件中寫入內容try:f.write("hello flask!")except Exception:passfinally:# 3. 關閉文件f.close()

with open()的使用:

# 上下文管理器 with open("./2.txt","wb") as f:str = "hello flask"# 報錯原因:# 在這里,python3和Python2在套接字返回值解碼上有區別。# 解決辦法非常的簡單,只需要用上python的bytes和str兩種類型轉換的函數encode()、decode()即可!## str通過encode()方法可以編碼為指定的bytes;# 反過來,如果我們從網絡或磁盤上讀取了字節流,那么讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法;str = str.encode()f.write(str)


with的使用:

class Foo(object):def __enter__(self):# 進入with語句的時候被with調用print("enter called")def __exit__(self, exc_type, exc_val, exc_tb):# 離開with語句的時候被with調用print("exit called")print("exc_type:%s" % exc_type)print("exc_val:%s" % exc_val)print("exc_tb:%s" % exc_tb)with Foo() as foo:print("hello python")

總結

以上是生活随笔為你收集整理的Web框架——Flask系列之request请求参数详解(十一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。