【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'))
相关推荐
萝卜白菜。5 分钟前
TongWeb7.0相同的类指明加载顺序
开发语言·python·pycharm
赵钰老师14 分钟前
【ADCIRC】基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟实践技术应用
python·信息可视化·数据分析
爬山算法28 分钟前
MongoDB(80)如何在MongoDB中使用多文档事务?
数据库·python·mongodb
YuanDaima20481 小时前
基于 LangChain 1.0 的检索增强生成(RAG)实战
人工智能·笔记·python·langchain·个人开发·langgraph
nbwenren1 小时前
Springboot中SLF4J详解
java·spring boot·后端
RopenYuan2 小时前
FastAPI -API Router的应用
前端·网络·python
听风吹等浪起2 小时前
用Python和Pygame从零实现坦克大战
开发语言·python·pygame
书到用时方恨少!2 小时前
Python Pandas 使用指南:数据分析的瑞士军刀
python·数据分析·pandas
helx822 小时前
SpringBoot中自定义Starter
java·spring boot·后端
智算菩萨3 小时前
【Pygame】第8章 文字渲染与字体系统(支持中文字体)
开发语言·python·pygame