【flask快速上手(二)】

目录

flask快速上手(二)

渲染模板

在 Python 内部生成 HTML 不好玩,且相当笨拙。因为你必须自己负责 HTML 转义, 以确保应用的安全。因此, Flask 自动为你配置 Jinja2 模板引擎。

使用 render_template() 方法可以渲染模板,你只要提供模板名称和需要 作为参数传递给模板的变量就行了。下面是一个简单的模板渲染例子:

复制代码
from flask import render_template

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)

Flask 会在 templates 文件夹内寻找模板。因此,如果你的应用是一个模块, 那么模板文件夹应该在模块旁边;如果是一个包,那么就应该在包里面:

情形 1 : 一个模块:

复制代码
/application.py
/templates
    /hello.html

情形 2 : 一个包:

复制代码
/application
    /__init__.py
    /templates
        /hello.html

你可以充分使用 Jinja2 模板引擎的威力。更多内容,详见官方 Jinja2 模板文档 。

模板示例:

复制代码
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello, World!</h1>
{% endif %}

文件上传

用 Flask 处理文件上传很容易,只要确保不要忘记在 HTML 表单中设置 enctype="multipart/form-data" 属性就可以了。否则浏览器将不会传送文件。

已上传的文件被储存在内存或文件系统的临时位置。你可以通过请求对象 files 属性来访问上传的文件。每个上传的文件都储存在这个字典型属性中。这个属性基本和标准 Python file 对象一样,另外多出一个用于把上传文件保存到服务器的文件系统中的 save() 方法。下例展示其如何运作:

复制代码
from flask import request

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['the_file']
        f.save('/var/www/uploads/uploaded_file.txt')
    ...

如果想要知道文件上传之前其在客户端系统中的名称,可以使用 filename 属性。但是请牢记这个值是 可以伪造的,永远不要信任这个值。如果想要把客户端的文件名作为服务器上的文件名, 可以通过 Werkzeug 提供的 secure_filename() 函数:

复制代码
from flask import request
from werkzeug.utils import secure_filename

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['the_file']
        f.save('/var/www/uploads/' + secure_filename(f.filename))
    ...

Cookies

要访问 cookies,可以使用 cookies 属性。可以使用响应对象的set_cookie 方法来设置 cookies 。请求对象的 cookies 属性是一个包含了客户端传输的所有 cookies 的字典。在 Flask 中,如果使用会话 ,那么就不要直接使用 cookies,因为会话比较安全一些。

  • 读取 cookies:

    from flask import request

    @app.route('/')
    def index():
    username = request.cookies.get('username')
    # use cookies.get(key) instead of cookies[key] to not get a
    # KeyError if the cookie is missing.

  • 储存 cookies:

    from flask import make_response

    @app.route('/')
    def index():
    resp = make_response(render_template(...))
    resp.set_cookie('username', 'the username')
    return resp

注意, cookies 设置在响应对象上。通常只是从视图函数返回字符串, Flask 会把它们 转换为响应对象。如果你想显式地转换,那么可以使用 make_response() 函数,然后再修改它。

重定向

使用 redirect() 函数可以重定向

复制代码
from flask import abort, redirect, url_for

@app.route('/')
def index():
    return redirect(url_for('login'))
相关推荐
superman超哥10 分钟前
Rust 日志级别与结构化日志:生产级可观测性实践
开发语言·后端·rust·可观测性·rust日志级别·rust结构化日志
每天早点睡10 分钟前
continue语句
后端
每天早点睡11 分钟前
while语句
后端
CryptoPP11 分钟前
对接BSE交易所获取数据。
python·金融·数据挖掘·数据分析·区块链
风象南11 分钟前
Spring Boot 配置 diff 实战
后端
老歌老听老掉牙18 分钟前
PyQt5中RadioButton互斥选择的实现方法
开发语言·python·qt
Pyeako20 分钟前
Opencv计算机视觉
人工智能·python·深度学习·opencv·计算机视觉
不会写代码的里奇24 分钟前
从零开发基于DeepSeek的端侧离线大模型语音助手:全流程指南
c++·后端·音视频
还不秃顶的计科生26 分钟前
LeetCode 热题 100第一题:两数之和python版本
python·算法·leetcode
不能放弃治疗30 分钟前
发消息逻辑写在MySQL事务中,导致消费逻辑Bug
后端