flask框架
一个完整的程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
Flask上下文全局变量
变量名 | 上下文 | 说明 |
---|---|---|
current_app | 程序上下文 | 当前激活程序的程序实例 |
g | 程序上下文 | 处理请求是用作临时存储对象,每次请求都会重设这个变量 |
request | 请求上下文 | 请求对象,封装了客户端发出的TTP请求 中的内容 |
session | 请求上下文 | 用户会话,用于存储请求之间需要“记住”的值得词典 |
请求钩子
Flask提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数之前或之后调用。
请求钩子用装饰器实现,Flask支持四种钩子
before_first_request | 注册一个函数,在处理第一个请求之前运行 |
---|---|
before_request | 注册一个函数,在每次请求之前运行 |
after_request | 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行 |
teardown_request | 注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行 |
响应
1.视图函数返回的响应的参数:
2.Response对象
3.重定向的特殊响应类型:redirect()
4.abort()生成特殊响应
模板
jinja2模板引擎
1.在template文件夹中建立相应的html文件
2.渲染使用reder_template()
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html',name=name)
if __name__ == '__main__':
app.run()
变量
{{name}}
结构表示一个变量,他是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取
过滤器修改变量
hello,{{name|capitalize}}
Jinja2过滤器
过滤器名 | 说明 |
---|---|
safe | 渲染时不转义 |
capitalize | 把值得首字母转换成大写,其他字母转换成小写 |
lower | 把值转换成小写形式 |
upper | 把值转换成大写形式 |
title | 把值中每个单词的首字母都转换成小写 |
trim | 把值得首尾空格去掉 |
striptags | 渲染之前把值中所有的HTML标签都删掉 |
safe过滤器:默认情况下,处于安全考虑,Jinja2会转义所有变量,很多情况下需要变量中存储的HTML代码,就可以使用safe过滤器
控制结构
1.条件控制语句
2.for循环
3.宏
4.多出重复的代码可以写入单独文件中,再包含在所有模板中(incliude)
5.模板继承
6.super()
Flask_Bootstrap
Flask_Bootstrap基模板中定义的块
块名 | 说明 |
---|---|
doc | 整个HTML文档 |
html_attribs | <html>标签的属性 |
html | <html>标签中的内容 |
head | <head>标签中的内容 |
title | <title>标签中的内容 |
metas | 一组<meta>标签 |
styles | 层叠样式表定义 |
body_attribs | <body>标签中的属性 |
body | <body>标签中的内容 |
navbar | 用户定义的导航条 |
content | 用户定义的页面内容 |
scripts | 文档底部的JavaScripts声明 |
自定义错误页面
链接
url_for()函数的使用
Flask_Moment本地化日期和时间
Web表单
Flask_WTF
CSRF攻击
定义表单类
from flask_wtf import Form
from wtforms import StringField
from wtforms.validators import DataRequired
class MyForm(Form):
name = StringField('name', validators=[DataRequired()])