常用的request参数:
属性 | 说明 | 类型 |
---|---|---|
values | 记录请求的数据,并转换为字符串 | * |
form | 记录请求中的表单数据 | MultiDict |
args | 记录请求中的查询参数 | MultiDict |
cookies | 记录请求中的cookie信息 | Dict |
headers | 记录请求中的报文头 | EnvironHeaders |
method | 记录请求使用的HTTP方法 | GET/POST |
url | 记录请求的URL地址 | string |
files | 记录请求上传的文件 | * |
下面是url、method、headers的简单使用:
from flask import Flask,request
app = Flask(__name__)
@app.route('/args',methods=['POST','GET'])
def index():
url = request.url
method = request.method
headers = request.headers.get('Content-Type')
return f'hello == {url} == {method} == {headers}'
if __name__ == '__main__':
app.run(debug=True)
通过函数反向找到路由地址
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/index')
def index():
return 'hello'
@app.route('/home/')
def home(uid):
return f'hello{uid}'
@app.route('/show_rul')
def show_url():
#第一个参数是函数的名字
#url = url_for("home")
#第二次参数默认开始匹配路径参数了,匹配不上就会以查询参数进行处理
url = url_for("home",uid=1001)
return f'反向查找到的url地址:{url}'
if __name__ == '__main__':
app.run(debug=True)
为什么选择url_for
而不选择直接在代码中拼 URL 的原因有两点:
有两种重定向:
1.永久性重定向,此时http的状态码为301,用于旧网址废弃后需要转到新的网址。
2.暂时性重定向,此时http的状态码为302,表示页面暂时性的转跳。例如:需要登陆才能获取权限的网站,如果用户没有登录,则会重定向到登录页面。
flask中重定向
通过redirect(location,code=302)函数来实现,location表示需要定向到的url,code表示采用哪个重定向,默认为302(暂时性重定向),可以修改为301(永久性重定向)。
from flask import Flask,redirect,url_for
app = Flask(__name__)
@app.route('/login/')
def login():
return f'登录页面'
@app.route('/info/')
def info():
return redirect(url_for('login'),code=302)
if __name__ == '__main__':
app.run(debug=True)
使用redirect函数时可以配合url_for函数使用可以有效提高效率,减少工作量。
返回字符串:
from flask import redirectd
@app.route('/return_str')
def return_str():
return "hello!!"
返回JSON
from flask import jsonify
app.config['JSON_AS_ASCII'] = False
@app.route('/return_json1')
def return_json1():
json_dict = {
"msg_int": 10,
"msg_str": "hello!!"
}
return jsonify(json_dict)
@app.route('/return_json2')
def return_json2():
json_dict = {
"msg_int": 10,
"msg_str": "hello!!"
}
return json_dict
需要导入Response或make_response,可以对状态码、主体部分和响应头进行修改。
具体代码如下:
from flask import Flask,Response,make_response
app = Flask(__name__)
@app.route('/')
def index():
return Response('hello!!!!',status=500)
app.route('/home/')
def home():
resp = make_response('创建response对象')
resp.status = 666
return resp
if __name__ == '__main__':
app.run(debug=True)
2022年10月18日晚