|  | 
| 17 | 17 | # ============================================================================================================================= | 
| 18 | 18 | 
 | 
| 19 | 19 | # Flask支持的4种钩子函数 | 
| 20 |  | -# ================================================================================================= | 
|  | 20 | +# ============================================================================================================================= | 
| 21 | 21 | # before_first_request: 注册一个函数,在处理第一个请求之前运行。 | 
| 22 | 22 | # before_request: 注册一个函数,在每次请求之前运行。 | 
| 23 | 23 | # after_request: 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。 | 
| 24 | 24 | # teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。 | 
| 25 |  | -# ================================================================================================= | 
|  | 25 | +# ============================================================================================================================= | 
|  | 26 | + | 
|  | 27 | +# Jinja2模板使用 | 
|  | 28 | +# ============================================================================================================================= | 
|  | 29 | +# 渲染模板: render_template("user.html", name=name) | 
|  | 30 | +# (1) 变量: {{ name | capitalize }} | 
|  | 31 | +# (2) 控制结构: | 
|  | 32 | +# {% if user %} | 
|  | 33 | +# Hello, {{ user }}! | 
|  | 34 | +# {% else %} | 
|  | 35 | +# Hello, Stranger! | 
|  | 36 | +# {% endif %} | 
|  | 37 | +# | 
|  | 38 | +# <ul> | 
|  | 39 | +# {% for comment in comments %} | 
|  | 40 | +# <li>{{ comment }}</li> {% endfor %} | 
|  | 41 | +# </ul> | 
|  | 42 | +# (3) 宏-类似于函数: | 
|  | 43 | +# {% macro render_comment(comment) %} | 
|  | 44 | +# <li>{{ comment }}</li> | 
|  | 45 | +# {% endmacro %} | 
|  | 46 | +# | 
|  | 47 | +# <ul> | 
|  | 48 | +# {% for comment in comments %} | 
|  | 49 | +# {{ render_comment(comment) }} | 
|  | 50 | +# {% endfor %} | 
|  | 51 | +# </ul> | 
|  | 52 | +# ============================================================================================================================= | 
| 26 | 53 | 
 | 
| 27 | 54 | # Jinja2变量过滤器 | 
| 28 |  | -# ================================================================================================= | 
|  | 55 | +# ============================================================================================================================= | 
| 29 | 56 | # safe: 渲染值时不转义 | 
| 30 | 57 | # capitalize: 把值的首字母转换成大写,其他字母转换成小写 | 
| 31 | 58 | # lower: 把值转换成小写形式 | 
| 32 | 59 | # upper: 把值转换成大写形式 | 
| 33 | 60 | # title: 把值中每个单词的首字母都转换成大写 | 
| 34 | 61 | # trim: 把值的首尾空格去掉 | 
| 35 | 62 | # striptags: 渲染之前把值中所有的 HTML 标签都删掉 | 
| 36 |  | -# ================================================================================================= | 
|  | 63 | +# ============================================================================================================================= | 
| 37 | 64 | 
 | 
| 38 | 65 | # Flask-Bootstrap基模板中定义的块 | 
| 39 |  | -# ================================================================================================= | 
|  | 66 | +# ============================================================================================================================= | 
| 40 | 67 | # doc: 整个 HTML 文档 | 
| 41 | 68 | # html_attribs: <html> 标签的属性 | 
| 42 | 69 | # html: <html> 标签中的内容 | 
|  | 
| 49 | 76 | # navbar: 用户定义的导航条 | 
| 50 | 77 | # content: 用户定义的页面内容 | 
| 51 | 78 | # scripts: 文档底部的 JavaScript 声明 | 
| 52 |  | -# ================================================================================================= | 
|  | 79 | +# ============================================================================================================================= | 
| 53 | 80 | 
 | 
| 54 |  | -# WTForms支持的HTML标准字段 | 
| 55 |  | -# ================================================================================================= | 
|  | 81 | +# WTForms支持的HTML标准字段,注意添加app.config['SECRET_KEY'] = 'hard to guess string' | 
|  | 82 | +# ============================================================================================================================= | 
| 56 | 83 | # StringField 文本字段 | 
| 57 | 84 | # TextAreaField 多行文本字段 | 
| 58 | 85 | # PasswordField 密码文本字段 | 
|  | 
| 70 | 97 | # SubmitField 表单提交按钮 | 
| 71 | 98 | # FormField 把表单作为字段嵌入另一个表单 | 
| 72 | 99 | # FieldList 一组指定类型的字段 | 
| 73 |  | -# ================================================================================================= | 
|  | 100 | +# ============================================================================================================================= | 
| 74 | 101 | 
 | 
| 75 | 102 | # WTForms验证函数 | 
| 76 |  | -# ================================================================================================= | 
|  | 103 | +# ============================================================================================================================= | 
| 77 | 104 | # Email 验证电子邮件地址 | 
| 78 | 105 | # EqualTo 比较两个字段的值;常用于要求输入两次密码进行确认的情况 | 
| 79 | 106 | # IPAddress 验证 IPv4 网络地址 | 
|  | 
| 85 | 112 | # URL 验证 URL | 
| 86 | 113 | # AnyOf 确保输入值在可选值列表中 | 
| 87 | 114 | # NoneOf 确保输入值不在可选值列表中 | 
| 88 |  | -# ================================================================================================= | 
|  | 115 | +# ============================================================================================================================= | 
| 89 | 116 | 
 | 
| 90 | 117 | # uWSGI配置和nginx配置 | 
|  | 118 | +# ============================================================================================================================= | 
| 91 | 119 | # uwsgi -s /tmp/uwsgi.sock -w MyShow:app --chmod-socket=666 | 
| 92 | 120 | # server { | 
| 93 | 121 | # listen 80; | 
|  | 
| 99 | 127 | # include uwsgi_params; | 
| 100 | 128 | # uwsgi_pass unix:/tmp/uwsgi.sock; | 
| 101 | 129 | # } | 
|  | 130 | +# ============================================================================================================================= | 
0 commit comments