【Flask实战】Flask知识点总结(一)

简介: Flask知识点总结(一)

Flask知识点总结(一)

escape()的作用

用户输入的数据会包含恶意代码,所以不能直接作为响应返回,需要使用 Flask提供的 escape()函数对 name 变量进行转义处理,比如把< 转换成 &lt;。这样在返回响应时浏览器就不会把它们当做代码执行。

from flask import escape

@app.route('/user/<name>')
def user_page(name):
    return 'User: %s' % escape(name)

request.args.get()方法

和普通的字典类型不同,当我们从request对象中类型为MutliDictImmutableMultiDict的属性(比如filesformargs)中直接使用键作为索引获取数据时(比如request.args['name']),如果没有对应的键,那么会返回HTTP 400错误响应(Bad Request,表示请求无效),而不是抛出KeyError异常,如下图所示。为了避免这个错误,我们应该使用get()方法获取数据,如果没有对应的值则返回Noneget()方法的第二个参数可以设置默认值,比如requset.args.get('name', 'Human')

flask routes命令

使用flask routes命令可以查看程序中定义的所有路由,这个列表由app.url_map解析得到:

$ flask routes
Endpoint  Methods  Rule
--------  -------  -----------------------
hello     GET      /
static    GET      /static/<path:filename>

url_for()在模板中可以直接使用

在 Python 脚本里,url_for() 函数需要从 flask 包中导入,而在模板中则可以直接使用,因为 Flask 把一些常用的函数和对象添加到了模板上下文(环境)里。

自定义命令@app.cli.command()

import click

@app.cli.command()  # 注册为命令
@click.option('--drop', is_flag=True, help='Create after drop.')  # 设置选项
def initdb(drop):
    """Initialize the database."""
    if drop:  # 判断是否输入了选项
        db.drop_all()
    db.create_all()
    click.echo('Initialized database.')  # 输出提示信息

默认情况下,函数名称就是命令的名字,现在执行 flask initdb 命令就可以创建数据库表:

$ flask initdb

使用 --drop 选项可以删除表后重新创建:

$ flask initdb --drop

模板上下文处理函数app.context_processor

对于多个模板内都需要使用的变量,我们可以使用 app.context_processor 装饰器注册一个模板上下文处理函数,如下所示:

@app.context_processor
def inject_user():  # 函数名可以随意修改
    user = User.query.first()
    return dict(user=user)  # 需要返回字典,等同于 return {'user': user}

这个函数返回的变量(以字典键值对的形式)将会统一注入到每一个模板的上下文环境中,因此可以直接在模板中使用。
使用思路:对与从基础模板继承的模板,如果基础模板中有从后端获取的变量,那么这个变量就可以使用模板上下文处理函数注入到模板中。

jinja2模板继承中{ { super() }}的使用

默认的块重写行为是覆盖,如果你想向父块里追加内容,可以在子块中使用 super() 声明,即 { { super() }}。

form表单填写注意事项

  • <form>标签里使用method属性将提交表单数据的 HTTP 请求方法指定为 POST。如果不指定,则会默认使用 GET 方法,这会将表单数据通过 URL 提交,容易导致数据泄露,而且不适用于包含大量数据的情况。
  • <input>元素必须要指定name 属性,否则无法提交数据,在服务器端,我们也需要通过这个 name 属性值来获取对应字段的数据。
  • 填写输入框标签文字的<label> 元素不是必须的,只是为了辅助鼠标用户。当使用鼠标点击标签文字时,会自动激活对应的输入框,这对复选框来说比较有用。
  • for属性填入要绑定的 <input> 元素的 id 属性值。
相关文章
|
2天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
29 1
|
2天前
|
前端开发 安全 JavaScript
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
|
2天前
|
存储 缓存 监控
利用Python和Flask构建RESTful API的实战指南
在当今的软件开发中,RESTful API已成为前后端分离架构中的核心组件。本文将带你走进实战,通过Python的Flask框架,一步步构建出高效、安全的RESTful API。我们将从项目初始化、路由设置、数据验证、错误处理到API文档生成,全方位地探讨如何构建RESTful API,并给出一些实用的最佳实践和优化建议。
|
2天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
18 1
Flask框架在Python面试中的应用与实战
|
2天前
|
存储 安全 算法
Flask用户认证与权限管理实战
【4月更文挑战第16天】在Flask Web开发中,用户认证和权限管理是保障安全的关键。本文介绍了实现这一目标的最佳实践:1) 设计用户模型,使用SQLAlchemy存储用户信息;2) 通过密码哈希确保密码安全,使用`werkzeug.security`进行哈希和验证;3) 实现登录功能,借助Flask-Login处理登录和登出;4) 进行权限管理,定义角色和权限模型,用装饰器或函数检查用户权限。通过这些方法,开发者能有效地控制用户访问,提升应用安全性。
|
2天前
|
安全 数据库连接 数据库
Flask数据库操作实战:增删改查一网打尽
【4月更文挑战第15天】本文介绍了在Flask中进行数据库操作的方法,包括选择数据库扩展(如Flask-SQLAlchemy)、配置数据库、定义模型以及执行CRUD操作。通过Flask-SQLAlchemy的ORM功能,开发者可以方便地管理数据库表和记录。文章详细展示了如何创建模型、添加、查询、更新和删除数据,并提到了高级查询和关系映射。此外,还提及了数据库迁移工具Flask-Migrate以及性能优化和安全性问题。了解这些基础,有助于开发者构建高效、安全的Flask Web应用。
|
2天前
|
搜索推荐 数据库连接 数据库
手把手教你使用Flask搭建ES搜索引擎(实战篇)
手把手教你使用Flask搭建ES搜索引擎(实战篇)
59 0
手把手教你使用Flask搭建ES搜索引擎(实战篇)
|
10月前
|
Python
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
|
10月前
|
开发框架 数据可视化 应用服务中间件
【Flask实战】Apache+WSGI在内网Windows环境下部署Flask项目(艰难爬坑总结)
【Flask实战】Apache+WSGI在内网Windows环境下部署Flask项目(艰难爬坑总结)
|
10月前
|
存储 Python
【Flask实战】Flask知识点总结(三)— Flask-Login使用
【Flask实战】Flask知识点总结(三)— Flask-Login使用