Flask Jinja2 知识点
Jinja2模板引擎使用以下分隔符从HTML转义。
- {% ... %}用于语句
- {{ ... }}用于表达式可以打印到模板输出
- {# ... #}用于未包含在模板输出中的注释
- # ... ##用于行语句
{% if marks>50 %} <h1> Your result is pass!</h1> {% else %} <h1>Your result is fail</h1> {% endif %}
<!doctype html> <table border = 1> {% for key, value in result.iteritems() %} <tr> <th> {{ key }} </th> <td> {{ value }} </td> </tr> {% endfor %} </table>
Flask Request对象
来自客户端网页的数据作为全局请求对象发送到服务器。为了处理请求数据,应该从Flask模块导入。
Request对象的重要属性如下所列:
-
Form - 它是一个字典对象,包含表单参数及其值的键和值对。
-
args - 解析查询字符串的内容,它是问号(?)之后的URL的一部分。
-
Cookies - 保存Cookie名称和值的字典对象。
-
files - 与上传文件有关的数据。
-
method - 当前请求方法
lask 重定向和错误
Flask 重定向和错误
Flask类有一个redirect()函数。调用时,它返回一个响应对象,并将用户重定向到具有指定状态代码的另一个目标位置。
redirect()函数的原型如下:
Flask.redirect(location, statuscode, response)
在上述函数中:
-
location参数是应该重定向响应的URL。
-
statuscode发送到浏览器标头,默认为302。
-
response参数用于实例化响应
from flask import Flask, redirect, url_for, render_template, request # Initialize the Flask application app = Flask(__name__) @app.route('/') def index(): return render_template('log_in.html') @app.route('/login',methods = ['POST', 'GET']) def login(): if request.method == 'POST' and request.form['username'] == 'admin' : return redirect(url_for('success')) return redirect(url_for('index')) @app.route('/success') def success(): return 'logged in successfully' if __name__ == '__main__': app.run(debug = True)
Flask 文件上传
ask 文件上传
在Flask中处理文件上传非常简单。它需要一个HTML表单,其enctype属性设置为“multipart / form-data”,将文件发布到URL。URL处理程序从request.files[]对象中提取文件,并将其保存到所需的位置。
每个上传的文件首先会保存在服务器上的临时位置,然后将其实际保存到它的最终位置。目标文件的名称可以是硬编码的,也可以从request.files[file]对象的filename属性中获取。但是,建议使用secure_filename()函数获取它的安全版本。
可以在Flask对象的配置设置中定义默认上传文件夹的路径和上传文件的最大大小。
app.config[‘UPLOAD_FOLDER’] | 定义上传文件夹的路径 |
app.config[‘MAX_CONTENT_PATH’] | 指定要上传的文件的最大大小(以字节为单位) |
以下代码具有'/ upload' URL规则,该规则在templates文件夹中显示'upload.html',以及'/ upload-file' URL规则,用于调用uploader()函数处理上传过程。
'upload.html'有一个文件选择器按钮和一个提交按钮。
<html> <body> <form action = "http://localhost:5000/uploader" method = "POST" enctype = "multipart/form-data"> <input type = "file" name = "file" /> <input type = "submit"/> </form> </body> </html>
from flask import Flask, render_template, request from werkzeug import secure_filename app = Flask(__name__) @app.route('/upload') def upload_file(): return render_template('upload.html') @app.route('/uploader', methods = ['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['file'] f.save(secure_filename(f.filename)) return 'file uploaded successfully' if __name__ == '__main__': app.run(debug = True)
重要的Flask扩展:
-
Flask Mail - 为Flask应用程序提供SMTP接口
-
Flask WTF - 添加WTForms的渲染和验证
-
Flask SQLAlchemy - 为Flask应用程序添加SQLAlchemy支持
-
Flask Sijax - Sijax的接口 - Python/jQuery库,使AJAX易于在Web应用程序中使用
https://www.w3cschool.cn/flask/flask_mail.html