【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'))

相关推荐

  1. flask快速上手)】

    2024-04-08 10:58:04       42 阅读
  2. flask快速上手(一)】

    2024-04-08 10:58:04       39 阅读
  3. 【Python快速上手)】

    2024-04-08 10:58:04       33 阅读
  4. electron 快速上手学习

    2024-04-08 10:58:04       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 10:58:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 10:58:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 10:58:04       82 阅读
  4. Python语言-面向对象

    2024-04-08 10:58:04       91 阅读

热门阅读

  1. Windows DLL(动态链接库)的用处

    2024-04-08 10:58:04       41 阅读
  2. Spring Boot中整合Redis

    2024-04-08 10:58:04       41 阅读
  3. C#实践作业1(类、接口、委托)

    2024-04-08 10:58:04       33 阅读
  4. 动态规划算法 - LC354. 俄罗斯套娃信封问题

    2024-04-08 10:58:04       39 阅读
  5. Linux常用命令

    2024-04-08 10:58:04       33 阅读
  6. Scrapy数据存储到数据库

    2024-04-08 10:58:04       36 阅读
  7. 人到中年,IT从业者怎么办

    2024-04-08 10:58:04       30 阅读
  8. 猜测生日日期

    2024-04-08 10:58:04       35 阅读
  9. 正则表达式

    2024-04-08 10:58:04       31 阅读
  10. 基于Docker 快速搭建EFK日志中心

    2024-04-08 10:58:04       32 阅读