一、request模块
get:网址方式
post:表单方式
-
method == ‘GET’
-
方式1
id = request.args print(id) print(id.get('telephoe'))
-
方式2
qs = request.query_string.decode('utf-8') regex = re.compile(r'id=(\w+)&charset=(.+)') res = re.findall(regex, qs)
-
方式3
qs = request.query_string.decode('utf-8') res = re.split(r'[=&]',qs) print(res)
-
-
method == ‘POST’
-
form data 表单【form或values或get_data()字节码】
headers:content-type:application/x-www-form-urlencodedform = request.form print(form) print(form['telephone']
-
x-www-form-urlencoded【form或values或get_data()字节码】
headers:content-type:application/x-www-form-urlencodedform = request.form print(form) print(form['telephone']
-
json【get_json()或get_data()字节码】
headers:content-type:application/jsondata = request.get_json() # {'id': '008', 'name': 'tom', 'test': '测试'} print(data.get('telephone')) print(request.get_data()) # b'{"id":"008","name":"tom","test":"\xe6\xb5\x8b\xe8\xaf\x95"}'
form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
- x-www-form-urlencoded
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url。 - multipart/form-data
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。【enctype="multipart/form-data"是上传二进制数据;它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法】
-
-
request.values 获取所有值
get 和 post 都可以使用args返回请求中的参数,values返回请求中的参数和form
print(args):
ImmutableMultiDict([('id', '008'), ('psw', 'dflef'), ('test', '汉语')])
print(values):
CombinedMultiDict([ImmutableMultiDict([('id', '008'), ('psw', 'dflef'), ('test', '汉语')]), ImmutableMultiDict([])])
-
request.headers
request.headers['token']
-
url属性
- requets.url 获取当前请求的完整路径,包括查询字符串
- request.base_url 获取基本路径
二、response模块
-
方法或属性描述
- headers:response服务器传输数据包的头部
- status
- status_code:服务器的状态码(200、404、500)
- data:response的body,就是 return ‘success’ ==response.data=‘success’
- get_json(force=False, silent=False, cache=True)
- is_json
- max_cookie_size
- mimetype
- set_cookie(key, value=”, max_age=None, expires=None, path=’/’, domain=None, secure=False, httponly=False, samesite=None)
-
多个返回值
@app.route('/response/') def response(): #body,status_code,headers return 'Hello3', 200, {"sherlock":"XX"}
-
json.dumps() 和jsonify 区别
-
json.dumps()时字段值为text/html
jsonify()将我们传入的json形式的数据序列化成json字符串,作为响应的body,并设置响应的Content-Type为application/json,构建出响应返回至客户端
-
json.dumps()可以赋值给rsp.data
jsonify()不可以赋值给rsp.data,要么直接返回jsonify(),要么make_response(jsonify())
-
json.dumps()不可以对时间对象直接操作,需要datetime.now().strftime(’%Y-%m-%d’)
jsonify()可以直接对时间对象操作,不过转换成英文时间形式
@user.route('/response/') def reponse(): dict_data = {"id":"001","name":"tom"} dict_data_t = {"id":"002","name":"rose","date":datetime.now().strftime('%Y-%m-%d')} list_dict_data = [ {"id":"001","hobby":["read","sleep"]}, {"id":"001","test":{"1":"qw","2":"aaa"}} ] rsp = make_response() rsp.data = json.dumps(dict_data) rsp.data = json.dumps(dict_data_t) rsp.data = json.dumps(list_dict_data) rsp.headers["sherlock"] = "XX" return rsp # from flask import jsonify # dict_test = {"id":"001","date":datetime.now()} # rsp = make_response(jsonify(dict_test)) # return rsp
-
来源:https://blog.csdn.net/qq_38328762/article/details/99168102