├── Chengdu_v2 ├── css │ └── style.css ├── images │ ├── app.png │ ├── enough.png │ ├── flask.jpg │ ├── four.jpg │ ├── timetravel0.png │ ├── timetravel1.png │ ├── timetravel2.png │ ├── vs-raw.png │ ├── vs.png │ └── wechat.png ├── index.html └── js │ └── remark.min.js ├── README.md └── Shanghai_v1 ├── audios ├── django.mp3 ├── jinja.mp3 ├── werkzeug-backup.mp3 └── werkzeug.mp3 ├── css └── style.css ├── images ├── big-hole.jpg ├── big-hole2.jpg ├── black-hole.jpg ├── enough.png ├── flask.png ├── four.jpg ├── hole.jpg ├── push.jpg ├── real-flask.png ├── small-hole.jpg └── wechat.png ├── index.html └── js └── remark.min.js /Chengdu_v2/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, Calibri, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; 3 | } 4 | 5 | h1, h2, h3 { 6 | font-weight: bold; 7 | margin-bottom: 0; 8 | } 9 | 10 | li { 11 | margin-block-start: 0.5em; 12 | margin-block-end: 0.5em; 13 | margin-inline-start: 0px; 14 | margin-inline-end: 0px; 15 | } 16 | 17 | .inverse { 18 | background: #272822; 19 | color: #777872; 20 | text-shadow: 0 0 20px #333; 21 | } 22 | .inverse h1, .inverse h2 { 23 | color: #f3f3f3; 24 | } 25 | 26 | .inverse-lite { 27 | background: #999; 28 | color: #777872; 29 | } 30 | .inverse-lite h1, .inverse-lite h2 { 31 | color: #f3f3f3; 32 | } 33 | 34 | .footnote { 35 | position: absolute; 36 | bottom: 1em; 37 | font-size: small; 38 | } 39 | 40 | .remark-code, .remark-inline-code { font-family: Consolas, 'Courier New', monospace; } 41 | .remark-slide-content {font-size: 22px;} 42 | 43 | .corner-ribbon{ 44 | width: 200px; 45 | background: #e43; 46 | position: absolute; 47 | top: 25px; 48 | left: -50px; 49 | text-align: center; 50 | line-height: 50px; 51 | letter-spacing: 1px; 52 | color: #ffffff; 53 | transform: rotate(-45deg); 54 | -webkit-transform: rotate(-45deg); 55 | } 56 | 57 | /* Custom styles */ 58 | 59 | .corner-ribbon.sticky{ 60 | position: fixed; 61 | } 62 | 63 | .corner-ribbon.shadow{ 64 | box-shadow: 0 0 3px rgba(0,0,0,.3); 65 | } 66 | 67 | /* Different positions */ 68 | 69 | .corner-ribbon.top-left{ 70 | top: 25px; 71 | left: -50px; 72 | transform: rotate(-45deg); 73 | -webkit-transform: rotate(-45deg); 74 | } 75 | 76 | .corner-ribbon.top-right{ 77 | top: 25px; 78 | right: -50px; 79 | left: auto; 80 | transform: rotate(45deg); 81 | -webkit-transform: rotate(45deg); 82 | } 83 | 84 | .corner-ribbon.bottom-left{ 85 | top: auto; 86 | bottom: 25px; 87 | left: -50px; 88 | transform: rotate(45deg); 89 | -webkit-transform: rotate(45deg); 90 | } 91 | 92 | .corner-ribbon.bottom-right{ 93 | top: auto; 94 | right: -50px; 95 | bottom: 25px; 96 | left: auto; 97 | transform: rotate(-45deg); 98 | -webkit-transform: rotate(-45deg); 99 | } 100 | 101 | /* Colors */ 102 | 103 | .white{background: #f0f0f0; color: #555;} 104 | .black{background: #333;} 105 | .grey{background: #999;} 106 | .blue{background: #39d;} 107 | .green{background: #2c7;} 108 | .turquoise{background: #1b9;} 109 | .purple{background: #95b;} 110 | .red{background: #e43;} 111 | .orange{background: #e82;} 112 | .yellow{background: #ec0;} 113 | 114 | 115 | .framed { 116 | border: 3px solid black; 117 | padding: 10px; 118 | margin-top: 15px; 119 | } 120 | 121 | .blur { 122 | color: transparent; 123 | text-shadow: 0 0 5px rgba(0,0,0,0.5); 124 | } -------------------------------------------------------------------------------- /Chengdu_v2/images/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/app.png -------------------------------------------------------------------------------- /Chengdu_v2/images/enough.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/enough.png -------------------------------------------------------------------------------- /Chengdu_v2/images/flask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/flask.jpg -------------------------------------------------------------------------------- /Chengdu_v2/images/four.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/four.jpg -------------------------------------------------------------------------------- /Chengdu_v2/images/timetravel0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/timetravel0.png -------------------------------------------------------------------------------- /Chengdu_v2/images/timetravel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/timetravel1.png -------------------------------------------------------------------------------- /Chengdu_v2/images/timetravel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/timetravel2.png -------------------------------------------------------------------------------- /Chengdu_v2/images/vs-raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/vs-raw.png -------------------------------------------------------------------------------- /Chengdu_v2/images/vs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/vs.png -------------------------------------------------------------------------------- /Chengdu_v2/images/wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Chengdu_v2/images/wechat.png -------------------------------------------------------------------------------- /Chengdu_v2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 基于 Flask 的 Web API 开发指南 v2.0 - PyCon China 2019 成都 5 | 6 | 7 | 8 | 9 | 19 | 20 | 21 | 22 | 1224 | 1226 | 1234 | 1235 | 1236 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 基于 Flask 的 Web API 开发指南 2 | PyCon China 2019 成都分会场,10 月 26 日,西南交大犀浦校区。 3 | 4 | - 幻灯片:http://greyli.com/slides/pyconchina2019-api 5 | - 录像:[bilibili](https://www.bilibili.com/video/av75168852/) | [YouTube](https://youtu.be/Fz5Zq4WM_c0) 6 | - 幻灯片源码:https://github.com/greyli/pyconchina2019-api 7 | - 示例程序源码(NoteAPI):https://github.com/greyli/noteapi 8 | 9 | -------------------------------------------------------------------------------- /Shanghai_v1/audios/django.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/audios/django.mp3 -------------------------------------------------------------------------------- /Shanghai_v1/audios/jinja.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/audios/jinja.mp3 -------------------------------------------------------------------------------- /Shanghai_v1/audios/werkzeug-backup.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/audios/werkzeug-backup.mp3 -------------------------------------------------------------------------------- /Shanghai_v1/audios/werkzeug.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/audios/werkzeug.mp3 -------------------------------------------------------------------------------- /Shanghai_v1/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, Calibri, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; 3 | } 4 | 5 | h1, h2, h3 { 6 | font-weight: bold; 7 | margin-bottom: 0; 8 | } 9 | 10 | li { 11 | margin-block-start: 0.5em; 12 | margin-block-end: 0.5em; 13 | margin-inline-start: 0px; 14 | margin-inline-end: 0px; 15 | } 16 | 17 | .inverse { 18 | background: #272822; 19 | color: #777872; 20 | text-shadow: 0 0 20px #333; 21 | } 22 | .inverse h1, .inverse h2 { 23 | color: #f3f3f3; 24 | } 25 | 26 | .footnote { 27 | position: absolute; 28 | bottom: 3em; 29 | } 30 | 31 | .remark-code, .remark-inline-code { font-family: Consolas, 'Courier New', monospace; } 32 | .remark-slide-content {font-size: 22px;} 33 | -------------------------------------------------------------------------------- /Shanghai_v1/images/big-hole.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/big-hole.jpg -------------------------------------------------------------------------------- /Shanghai_v1/images/big-hole2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/big-hole2.jpg -------------------------------------------------------------------------------- /Shanghai_v1/images/black-hole.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/black-hole.jpg -------------------------------------------------------------------------------- /Shanghai_v1/images/enough.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/enough.png -------------------------------------------------------------------------------- /Shanghai_v1/images/flask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/flask.png -------------------------------------------------------------------------------- /Shanghai_v1/images/four.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/four.jpg -------------------------------------------------------------------------------- /Shanghai_v1/images/hole.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/hole.jpg -------------------------------------------------------------------------------- /Shanghai_v1/images/push.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/push.jpg -------------------------------------------------------------------------------- /Shanghai_v1/images/real-flask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/real-flask.png -------------------------------------------------------------------------------- /Shanghai_v1/images/small-hole.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/small-hole.jpg -------------------------------------------------------------------------------- /Shanghai_v1/images/wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greyli/pyconchina2019-api/41d45bea6fd6ce162309ce4fe84df95908b66654/Shanghai_v1/images/wechat.png -------------------------------------------------------------------------------- /Shanghai_v1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 基于 Flask 的 Web API 开发指南 - PyCon China 2019 5 | 6 | 7 | 8 | 19 | 20 | 21 | 22 | 904 | 906 | 913 | 914 | --------------------------------------------------------------------------------