Flask三剑客1
- HttpResponse
- Redirect
- render_template
HttpResponse
@app.route('/') # route用于指定url路径
def index():
return 'Hello World' # HttpResponse
这里直接返回结果,其内部调用的就是HttpResponse方法.
Flask中的HttpResponse在我们看来其实就是直接返回字符串.
Redirect
from flask import redirect # 导入redirect
@app.route('/home')
def home():
return redirect('/index') # 将跳转至"/"页面
当访问/home
这个地址时,视图函数会触发redirect('/')
方法,将跳转至url地址为/index
的页面,同时触发/index
路径对应的视图函数.
render_template
在开始之前,请先在你当前项目的根目录下创建一个名为templates
目录,用于存放模版文件.
这是Flask框架的规则,目录名必须为templates
,否则可能会遇到Jinja2的报错.
from flask import render_template # 导入render_template
@app.route('/login')
def login():
return render_template('login.html') # 将返回templates目录下的login.html页面
这里我们要说一下 jsonify 与 send_file 方法
jsonify
jsonify方法返回的是json类型的数据,且会使Centent-Type: application/json
.from flask import jsonify @app.route('/json') def json(): return jsonify({"name": "zyk", "sex": "boy"})
send_file
send_file可将文本内容,图片,视频等信息放到网页上.from flask import send_file @app.route('/text') def text(): return send_file("文件路径") # 其文件可以是文本、图片、视频
request
method 判断请求的类型
args GET请求的数据,可使用to_dict()将其转为字典
form POST请求的数据,需要在route中允许POST请求的数据:methods=[‘POST’]
headers 获取请求头中的信息
json 如果在请求中写入了 “application/json” 使用 request.json 则返回json解析数据, 否则返回 None
data 存放非mimetype类型的数据,即Content-Type无法解析的数据,原始数据,其类型为bytes
path 当前的url路径,示例:/login
url 当前url的全部路径
script_root 当前url路径的上一级路径
url_root 当前url的路径的上一级全部路径
host 访问主机url
host_url 示例:访问主机的完整url
values 获取所有类型请求的数据
files 获取上传的文件
cookies 获取cookies信息
environ 所有数据
一定要知道:request
是基于mimetype
进行处理的,详见:W3school
如果不属于mimetype
类型的数据,则request会将无法处理的数据转为Json并存到data
中.
其实我们可以通过request.data
和json.loads
拿到同样的数据.
上传文件示例
如果遇到文件上传的话,request.files 里面存的是你上传的文件,但是 Flask 在这个文件的操作中加了一定的封装,让操作变得极为简单
前端代码:<form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="提交"> </form>
后端代码:
from flask import Flask, request, render_template app = Flask(__name__) @app.route('/load', methods=['GET', 'POST']) # methods=['GET', 'POST'] 允许GET, POST请求 def load(): if request.method == 'POST': # print(request.files) # ImmutableMultiDict([('file', <FileStorage: '会心一笑.png' ('image/png')>)]) # print(request.files['file']) # <FileStorage: '会心一笑.png' ('image/png')> file = request.files['file'] file.save('img.png') # save保存文件 return 'is ok' return render_template('load.html') app.run('0.0.0.0', 5000, debug=True)
这样我们就成功的上传了一个名叫 “img.png” 的文件了,操作还是很简单的.
回到顶部 ↩︎