Flask 从入门到实践

Flask 从入门到实践

路由的介绍

程序实例保存了一个URL到Python程序的映射关系,处理URL和函数之间关系的程序成为路由

使用程序实例的app.route装饰器即可把要修饰的函数(可称为视图函数,下例中为index(),user())注册为路由。

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello World!</h1>'

@app.route('/user/<name>')
def user(name):
    return '<h1>Hello, %s !</h1>' %name

@app.route('/users/<int:id>')
def users(id):
    return '<h1>Your ID is : %d !</h1>' %id

@app.route('/info/')
def info():
    user_agent = request.headers.get('User-Agent')
    return '<p>Your browser is %s</p>' % user_agent

if __name__ == '__main__':
    app.run(debug=True)

Flask上下文全局变量

变量名 上下文 说明
current_app 程序上下文 当前激活程序的程序实例
g 程序上下文 处理请求时用作临时存储的对象,每次请求会重设该变量
request 请求上下文 请求对象,封装了客户端发出的HTTP请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典

Flask中有两种上下文:程序上下文和请求上下文,在调用之前需要先激活。

视图函数用来处理客户端发来的请求,Flask用app.route装饰器或者非装饰器的app.add_url_rule() 来生成URL映射。

在处理请求之前或之后执行处理的代码称为请求钩子函数,Flask支持以下4种装饰器来实现:

  • before_first_request:处理第一个请求前运行
  • before_request:每次请求前运行
  • after_request:如没有未处理的异常抛出,在每次请求之后运行
  • teardown_request:即是有未处理的异常也在每次请求后运行

在请求析构函数和视图函数之间共享数据一般使用上下文全局变量 g.

Flask中可用make_response来自定义响应对象,例如携带cookie等:

from flask import make_response
@app.route('/cookie/')
def cookie_test():
    response = make_response('<h1>This document carries a cookie!</h1>')
    response.set_cookie('year', '2017')
    return response

302重定向:

from flask import redirect
@app.route('/r/')
def redirect():
    return redirect('http://www.hython.com')

处理错误的响应用abort函数,若抛出异常则交控制权给web服务器:

from flask import abort
@app.route('/user/<id>')
def get_user(id):
    user = load_user(id)
    if not user:
        abort(404)
    return '<h1>Hello, %s</h1>' % user.name

Jinja2模板的使用

Jinja2变量过滤器

过滤器名 说明
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其余的小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 值中的每个单词的首字母转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的HTML标签都删掉

控制结构

  1. 条件控制语句:if
  2. for循环
  3. 宏函数(macros)

Flask-Bootstrap插件

flask bootstrap基模板中定义的块

块名 说明
doc 整个HTML文档
html_attribs 标签的属性
html 标签中的内容
head 标签中的内容
title 标签中的内容
metas 一组标签
styles css样式表定义
body_attribs 标签的属性
body 标签中的内容
navbar 用户定义的导航条
content 用户定义的页面内容
scripts 文档底部的JavaScript声明

如果需要重新定义块,比如自定义css和js的styles和scripts,需使用jinja2中的super()函数:

{% block scripts %}
{{ super() }}
<script type="text/javascript" scr="my-script.js"></script>
{% endblock %}

url_for()函数:

# _external=True返回绝对地址:http://127.0.0.1:5000/static/css/styles.css
url_for('static', filename='css/styles.css', _external=True)

Flask-moment插件本地化日期和时间

引入并实例:

from flask.ext.moment import Moment
moment = Moment(app)

base.html中需要引入:

{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{{ moment.lang('ja') }}
{% endblock %}

index.html中即可使用:

<p>The Local date and time is {{ moment(current_time).format('LLL') }}.</p>
<p>That was {{ moment(current_time).fromNow(refresh=True) }}</p>

除此之外Flask-Moment实现了moment.js中format(),fromNow(),fromTime(),calendar(),valueOf(),和unix()等方法。具体可参阅官方文档

Web表单

设置Flask-WTF插件

为免受跨站伪造请求CSRF的攻击,需要在app.config设置通用密钥如下:

app = Flask(__name__)
app.config['SECRET_KEY'] = 'do not guess this string'

其实配置密钥的变量保存在系统变量中比写在代码里更为安全。

字段类型 说明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为datetime.date格式
DateTimeField 文本字段,值为datetime.datetime格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文本上传字段
SubmitField 表单提交
FormField 把表单作为字段嵌入另一个表单
FormField 一组指定类型的字段

WTForms验证函数

验证函数 说明
Email 电子邮件地址
EqualTo 比较两字段值,常用于要求输入两次密码确认
IPAddress 验证IPv4网络地址
Length 验证输入字符串长度
NumberRange 验证输入的值在数字范围内
Optional 无输入值时跳过其他验证函数
Required 确保字段中有数据
Regexp 使用正则表达式验证输入值
URL 验证URL
AnyOf 确保输入值在可选值列表中
NoneOf 确保输入值不在可选值列表中
时间: 2024-11-09 03:10:43

Flask 从入门到实践的相关文章

&lt;&lt;Python编程:从入门到实践&gt;&gt;踩坑记 Django

<<Python编程:从入门到实践>>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是virtual studio code , 测试起来很是难受,因为我配置的debug环境,断点操作没有作用. 经过我不断的测试,才发现我失败的原因是由于之前的误操作,先建立new_pizzas.py后改为new_pizzas.html的,错误就在这里.在我之后新建

嵌入式LINUX入门到实践

从今天开始,用这个博客记录和总结嵌入式LINUX从入门到实践完整过程. 第一章的内容是IIC协议与自平衡小车.首先树立目标: 1.使用mini2440开发板的IIC协议,采集MPU6050六轴传感器数据. 2.将步骤1整理为驱动,写入LINUX内核. 3.编写简单的上位机3D模型,实时显示传感器状态. 4.完善上述三步骤,完成平衡小车的硬件. 5.搭建基于2440芯片的自平衡小车平台,包括机械与电路部分. 6.完成自平衡小车的平衡. 7.完成自平衡小车的前进和转向. 8.加入安卓端,进行简单的手

《Python编程从入门到实践》_第十章_文件和异常

读取整个文件 文件pi_digits.txt #文件pi_digits.txt 3.1415926535 8979323846 2643383279 下面的程序打开并读取整个文件,再将其内容显示到屏幕中: with open("pi_digits.txt") as fileobject: contents = fileobject.read() print(contents) #运行结果 3.1415926535 8979323846 2643383279 使用函数open()打开文件

网站后端_Python+Flask.0003.FLASK快速入门之Hello Word?

框架特点: 1. 非常小, 小到可称为微型框架 2. 可扩展, 设计初衷就是不会替开发者做太多决策,支持随时更换或动手实现扩展模块 3. 三依赖, 路由/调试/WSGI(由WERKZEUG提供的WEB服务器网关接口实现),模版系统(由JINJA2实现),签名(由ITSDANGEROUS实现) 快速安装: pip install flask 快速入门: #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: 

Storm实时计算:流操作入门编程实践

转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比较简单,实际编程开发起来相对容易.下面,简单介绍编程实践过程中需要理解的Storm中的几个概念: Topology Storm中Topology的概念类似于Hadoop中的MapReduce Job,是一个用来编排.容纳一组计算逻辑组件(Spout.Bolt)的对象(Hadoop MapReduce中一

Docker —— 从入门到实践

Docker —— 从入门到实践

Python编程入门到实践 - 笔记(1,2章)

自学 Python 有段时间了,总是觉得自己基础不牢,想着把看完的两本基础书写个博客做个笔记啥的. 准备在重新看一遍<Python编程入门到实践>,坚持写博客笔记. Python编程入门到实践的前两章笔记,学习的内容如下: 查看当前环境中的 python 版本 python环境的搭建 变量和变量的命名 字符串的打印 修改字符串的大小写 制表符和换行符 删除空白字符 python的整数运算,计算平方,立方 使用 str() 函数 查看当前环境中的 python 版本 命令行下输入 python 

GitHub入门与实践

这篇是计算机类的优质预售推荐>>>><GitHub入门与实践> 与全世界程序员分享你的代码! 编辑推荐 代码审查不到位,审查效率低下 只有编程者本人能看懂的代码直接被部署至正式环境中 因低级代码错误导致BUG频繁出现 没有机会和其他人互相交流代码,共享知识 没有一个简单高效.能在一天之内添加多个功能的开发流程 GitHub 为我们提供了解决这些问题的机会和功能. 本书旨在指导读者使用GitHub进行高效开发. 内容全面,系统讲解GitHub的功能和实用技巧 图文直观,一

spring boot 1.5.4 从入门到实践

Spring Boot四个重要核心: 自动配置:针对很多Sping应用程序常见的应用功能,Spring Boot能自动提供相关配置: 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库: 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建(实际开发中,可用性小): Actuator:让你能够深入运行中的SpringBoot应用程序的开发,一探究竟. spring-boot相关项目源码, 码云地址:https://git.o