Flask--request / response
request
request是请求数据。
在flask中request是需要导入,也可以称作公共对象
request.form
request.from 获取的FormData中的数据 -- 也就html中form表单
from flask import Flask, render_template, redirect, request, session app = Flask(__name__) app.debug = True app.secret_key = '123' @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') print(request.form) #查看request.form中的数据 user = request.form.get('username') pwd = request.form.get('pwd') if user == '123' and pwd == '123': session['user'] = user return render_template('index.html', stu_dic=STUDENT_DICT)
结果:
ImmutableMultiDict([('username', '123'), ('pwd', '123')])
这个数据类型看起来很高大上。其实取值方法和字典一点。可以用get / dict['key'] -- 建议用get
如果感觉看起来不是很习惯。可以使用request.form.to_dict()
print(request.form.to_dict()) 结果: {'username': '123', 'pwd': '123'}
这种方法是将他变成普通字典的样子。这样你就可以玩的起飞啦~
request.args
request.arg 获取的是访问路径的参数
print(request.args) 结果: ImmutableMultiDict([('a', '1'), ('b', '2')])
print(request.args.get("id")) # 获取URL中的参数
print(request.args["id"]) # 获取URL中的参数
print(request.args.to_dict()) # 获取URL中的参数 转换成 字典
request.files
request.files 获取的FormData中的 文件数据
<form action="" method="post" enctype="multipart/form-data"> <button>ok</button> <input type="file" name="my_file"> </form> 要注意上传文件要写 enctype="multipart/form-data" print(request.files) 结果: ImmutableMultiDict([('my_file', <FileStorage: 'test.png' ('image/png')>)]) 可以通过字典取值方式取出文件 print(request.files.get('my_file')) # 查看文件 my_file = request.files.get('my_file') # 获取文件数据 my_file.save(my_file.filename) # 保存数据,括号里的参数是必填的,写上传文件的名字 保存在当前工作目录
request.url
request.url 获取的是 访问的全路径 -- 包括参数
print(request.url) 结果: http://127.0.0.1:5000/login?a=1&b=2
request.method
request.method 获取的是请求方式 -- 比如get / post ...
print(request.method) 结果: POST
request.path
reqeust.path 获取的是访问的路径 -- 不含参数
print(request.path) 结果: /login
request.values
request.valuse 获取的 Form 和 Args 中的数据
print(request.values) 结果: CombinedMultiDict([ImmutableMultiDict([('a', '1'), ('b', '2')]), ImmutableMultiDict([('username', '123'), ('pwd', '123')])])
request.environ
request.environ 获取的是 请求原始信息
request.base_url
request.base_url 获取的是 url的头信息 -- 不含参数
print(request.base_url) 结果: http://127.0.0.1:5000/login
Response
HttpResponse
HttpResponse 返回的是字符串
@app.route('/') def home(): return 'hello word'
render
render 返回的是模块
@app.route('/index') # 参数写模板路径 def index(): return render_template('index.html')
redirect
redrect 是重定向
@app.route('/') def home(): return redirect('/login') # 参数写路径
send_file
发送文件
打开并返回文件内容,
自动识别文件类型,
响应头中加入Content-type:文件类型
ps:当浏览器无法识别Content-type时,会下载文件