參數篇
request接收數據
request對象
method:當前請求方法(POST,GET等)
url:當前鏈接地址
path:當前鏈接的路徑
environ:潛在的WSGI環境
headers:傳入的請求頭作為字典類對象
data:包含傳入的請求數據作為
args:請求鏈接中的參數(GET參數),解析后
form:form提交中的參數,解析后
values:args和forms的集合
json:json格式的body數據,解析后
cookies:cookie讀取
#1 生成response對象 response = make_response(render_template(index.html)) 方法 status:響應狀態 headers:響應頭,設置http字段 set_coockie:設置一個cookie
1.get請求
request.args.get("key") 獲取get請求參數
2.post請求
request.form.get("key", type=str, default=None) 獲取表單數據
request.values.get("key") 獲取所有參數
# 參數解析對象生成
parser = reqparse.RequestParser()
args = parser.parse_args()
parser.add_argument("username", type=str, required=True)
parser.add_argument("password", required=True)
parser.add_argument("cpuCount", type=int, required=True)
parser.add_argument("memorySize", type=int, required=True)
parser.add_argument("diskSize", type=int, required=True)
args = parser.parse_args()
print 'flask_restful%s' %args # {'username': 'zk', 'diskSize': 1000, 'cpuCount': 2, 'password': u'123456789', 'memorySize': 512}
inf_json = request.json
print 'json%s' %inf_json # None
inf_get_json = request.get_json
print 'get_json%s' %inf_get_json # <bound method Request.get_json of <Request 'http://127.0.0.1:5000/login' [POST]>>
inf_valus = request.values
print 'valus%s' %inf_valus # valusCombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('username', u'zk'), ('memorySize', u'512'), ('password', u'123456789'), ('cpuCount', u'2'), ('diskSize', u'1000')])])
inf_form = request.form
print 'form%s' %inf_form # formImmutableMultiDict([('username', u'zk'), ('memorySize', u'512'), ('password', u'123456789'), ('cpuCount', u'2'), ('diskSize', u'1000')])
inf_get_data = request.get_data
print 'get_data%s' %inf_get_data # get_data<bound method Request.get_data of <Request 'http://127.0.0.1:5000/login' [POST]>>
username = request.form.get("username")
password = request.form.get("password", type=str, default=None)
cpuCount = request.form.get("cpuCount", type=int, default=None)
memorySize = request.form.get("memorySize", type=int, default=None)
@app.route('/login',methods=["GET","POST"])
def login():
if request.method == "POST":
# 以POST方式傳參數,通過form取值
# 如果Key之不存在,報錯KeyError,返回400的頁面
username = request.form['username']
password = request.form['password']
print username,password
else:
# 以GET方式傳參數,通過args取值
username = request.args['username']
print username
return render_template('login.html', req_method=request.method)
文件上傳
from werkzeug.utils import secure_filename
@app.route('/uploads', methods=['GET', 'POST'])
def uploads():
if request.method == "POST":
fe = request.files['files']
# basepath = os.path.dirname(os.path.abspath(__file__))
basepath = os.path.abspath(os.path.dirname(__file__))
upload_path = os.path.join(basepath, 'static', 'upload')
# f.filename可以拿到文件名,但是是客戶端定義的名,不要相信這個名稱,用secure_filename包裝一下
fe.save(upload_path+'/'+secure_filename(fe.filename))
# 這里的url_for 和jinja的前端用法不一樣,可以忽略.的引用
# url_for重定向
return redirect(url_for('uploads'))
return render_template('upload.html')
cookie設置
@app.route('/index')
def index():
response = make_response(render_template('index.html',title='Index'))
reqparse.set_cookie('username', '')
return response
自定義錯誤頁面
from flask import abort
@app.errorhandler(404)
def page_not_not_found(error):
return render_template('404.html'), 404
驗證格式
import jsonschema
#定義格式要求
#https://jsonschema.net/#/editor
json_layout = {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"cpuCount": {
"type": "integer"
},
"memorySize": {
"type": "integer"
},
"diskSize": {
"type": "integer"
}
},
"required": [
"username",
"password",
"cpuCount",
"memorySize",
"diskSize"
]
}
def login():
if request.method == "POST":
# 以POST方式傳參數,通過form取值
# 如果Key之不存在,報錯KeyError,返回400的頁面
parser.add_argument("username", required=True)
parser.add_argument("password", required=True)
parser.add_argument("cpuCount", type=int, required=True)
parser.add_argument("memorySize", type=int, required=True)
parser.add_argument("diskSize", type=int, required=True)
args = parser.parse_args()
# 獲取到參數后,傳入,驗證
jsonschema.validate(args, json_layout)
return u'login返回'
格式正常無返回值(None)
格式錯誤報錯ValidationError
