# _*_ coding: utf-8 _*_
# Flaskä¸çä¸äºå®ä¹
# =============================================================================================================================
# 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) åé: {{ name | capitalize }}
# (2) æ§å¶ç»æ:
# {% if user %}
# Hello, {{ user }}!
# {% else %}
# Hello, Stranger!
# {% endif %}
#
#
# {% for comment in comments %}
# - {{ comment }}
{% endfor %}
#
# (3) å®-类似äºå½æ°:
# {% macro render_comment(comment) %}
# {{ comment }}
# {% endmacro %}
#
#
# {% for comment in comments %}
# {{ render_comment(comment) }}
# {% endfor %}
#
# =============================================================================================================================
# Jinja2åéè¿æ»¤å¨
# =============================================================================================================================
# safe: 渲æå¼æ¶ä¸è½¬ä¹
# capitalize: æå¼çé¦åæ¯è½¬æ¢æå¤§åï¼å
¶ä»åæ¯è½¬æ¢æå°å
# lower: æå¼è½¬æ¢æå°åå½¢å¼
# upper: æå¼è½¬æ¢æå¤§åå½¢å¼
# title: æå¼ä¸æ¯ä¸ªåè¯çé¦åæ¯é½è½¬æ¢æå¤§å
# trim: æå¼çé¦å°¾ç©ºæ ¼å»æ
# striptags: 渲æä¹åæå¼ä¸ææç HTML æ ç¾é½å æ
# =============================================================================================================================
# Flask-Bootstrapåºæ¨¡æ¿ä¸å®ä¹çå
# =============================================================================================================================
# doc: æ´ä¸ª HTML ææ¡£
# html_attribs: æ ç¾ç屿§
# html: æ ç¾ä¸çå
容
# head: æ ç¾ä¸çå
容
# title: æ ç¾ä¸çå
容
# metas: ä¸ç» æ ç¾
# styles: å±å æ ·å¼è¡¨å®ä¹
# body_attribs: æ ç¾ç屿§
# body: æ ç¾ä¸çå
容
# navbar: ç¨æ·å®ä¹çå¯¼èªæ¡
# content: ç¨æ·å®ä¹ç页é¢å
容
# scripts: ææ¡£åºé¨ç JavaScript 声æ
# =============================================================================================================================
# WTFormsæ¯æçHTMLæ ååæ®µï¼æ³¨ææ·»å 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 ä¸ç»æå®ç±»åçåæ®µ
# =============================================================================================================================
# WTFormséªè¯å½æ°
# =============================================================================================================================
# Email éªè¯çµåé®ä»¶å°å
# EqualTo æ¯è¾ä¸¤ä¸ªå段çå¼;常ç¨äºè¦æ±è¾å
¥ä¸¤æ¬¡å¯ç è¿è¡ç¡®è®¤çæ
åµ
# IPAddress éªè¯ IPv4 ç½ç»å°å
# Length éªè¯è¾å
¥å符串çé¿åº¦
# NumberRange éªè¯è¾å
¥çå¼å¨æ°åèå´å
# Optional æ è¾å
¥å¼æ¶è·³è¿å
¶ä»éªè¯å½æ°
# Required / DataRequired ç¡®ä¿åæ®µä¸ææ°æ®
# Regexp ä½¿ç¨æ£å表达å¼éªè¯è¾å
¥å¼
# URL éªè¯ URL
# AnyOf ç¡®ä¿è¾å
¥å¼å¨å¯éå¼å表ä¸
# NoneOf ç¡®ä¿è¾å
¥å¼ä¸å¨å¯éå¼å表ä¸
# =============================================================================================================================
# uWSGIé
ç½®ånginxé
ç½®
# =============================================================================================================================
# uwsgi -s /tmp/uwsgi.sock -w MyShow:app --chmod-socket=666
# server {
# listen 80;
# server_name wangluopachong.com;
#
# charset utf-8;
#
# location / {
# include uwsgi_params;
# uwsgi_pass unix:/tmp/uwsgi.sock;
# }
# =============================================================================================================================