flask definitions

Flask’s some definitions

  • WSGI: Web服务器网关接口,是一种Web服务使用的协议
  • 路由: 处理URL和函数之间关系的程序称为”路由”
  • 视图函数: 类似于index()这样的,被app.route装饰器注册为路由的函数,或者通过app.add_url_rule()添加路由映射关系的函数,被称为视图函数。
  • app.route(): 路由装饰器,可以带参数,参数可以指定数据类型:int/float/path。path类似于字符串,但不将反斜线/当做分隔符。

Flask上下文全局变量

  • current_app: 程序上下文,当前激活程序的程序实例,所有线程公用一个该实例。
  • g: 程序上下文,处理请求时用作临时存储的对象,每次请求都会重设这个变量
  • request: 请求上下文,请求对象,封装了客户端发出的 HTTP 请求中的内容,不同线程之间互不干扰
  • session: 请求上下问,用户会话,用于存储请求之间需要“记住”的值的词典。

Flask支持的4种钩子函数

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

Jinja2模板使用

渲染模板: render_template(“user.html”, name=name)
控制结构:

1
2
3
4
5
6
7
8
9
10
11
{% if user %} 
Hello, {{ user }}!
{% else %}
Hello, Stranger!
{% endif %}

<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% endfor %}
</ul>

宏-类似于函数:

1
2
3
4
5
6
7
8
9
 {% macro render_comment(comment) %} 
<li>{{ comment }}</li>
{% endmacro %}

<ul>
{% for comment in comments %}
{{ render_comment(comment) }}
{% endfor %}
</ul>

Jinja2变量过滤器

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

WTForms支持的字段

注意添加app.config[‘SECRET_KEY’] = ‘hard to guess string’

  • StringField 文本字段
  • TextAreaField 多行文本字段
  • PasswordField 密码文本字段
  • HiddenField 隐藏文本字段
  • DateField 值为datatime.data格式的文本字段
  • DateTimeField 值为datatime.datatime格式的文本字段
  • DecimalField 值为decimal.Decimal格式的文本字段
  • IntegerField 值为整数的文本字段
  • FloatField 值为浮点数的文本字段
  • BooleanField 值为True或False的复选框
  • RadioField 一组单选框
  • SelectField 值唯一的下拉列表
  • SelectMultipleField 可选多个值得下拉列表
  • FileField 文件上传字段
  • SubmitField 表单提交按钮
  • FormField 把表单作为字段嵌入另一个表单
  • FieldList 一组指定类型的字段

常见返回码

200 OK - [GET]:服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功
202 Accepted - []:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401 Unauthorized - [
]:表示用户没有权限(令牌、用户名、密码错误)
403 Forbidden - [] 表示用户得到授权(与401错误相对),但是访问是被禁止的
404 NOT FOUND - [
]:用户发出的请求针对的是不存在的记录,服务器没有进行操作
406 Not Acceptable - [GET]:用户请求的格式不可得
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功