forked from mattmakai/fullstackpython.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflask.html
444 lines (429 loc) · 29.4 KB
/
flask.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
<!DOCTYPE html>
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Matt Makai">
<meta name="description" content="Flask is a Python web framework built with a small core and many extensions. Learn more about Flask on Full Stack Python.">
<link rel="shortcut icon" href="theme/img/fsp-fav.png">
<title>Flask - Full Stack Python</title>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<link href="theme/css/f.min.css" rel="stylesheet">
<link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.css" rel="stylesheet">
<style>
.toc-indent {padding-left: 25px;}
.toc-more-indent {padding-left: 37px;}
</style>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-19910497-7', 'auto');
ga('send', 'pageview');
</script> </head>
<body>
<a href="https://github.com/makaimc/fullstackpython.github.com"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/a6677b08c955af8400f44c6298f40e7d19cc5b2d/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677261795f3664366436642e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"></a>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="logo-header-section">
<a href="/" style="text-decoration: none; border: none;"><img src="theme/img/fsp-logo.png" height="52" width="52" class="logo-image" style="padding-top: 1px;" alt="Full Stack Python logo"></a>
<span class="logo-title"><a href="/">Full Stack Python</a></span>
</div>
</div>
</div><div class="row">
<div class="col-md-8">
<h1>Flask</h1>
<p><a href="http://flask.pocoo.org/">Flask</a> is a Python web framework built with a
<a href="http://flask.pocoo.org/docs/design/">small core and easy-to-extend philosophy</a>.
<a href="http://flask.pocoo.org/" style="border: none;"><img src="theme/img/flask.png" width="100%" alt="Official Flask logo. Flask Artwork License." class="technical-diagram" /></a></p>
<div class="well" style="margin-top: 20px;">
If you're learning about Flask you should also understand
<a href="/web-frameworks.html">web frameworks</a> and read
how to <a href="/deployment.html">deploy web applications</a>.
</div>
<h2>Why is Flask a good web framework choice?</h2>
<p>Flask is considered more
<a href="http://blog.startifact.com/posts/older/what-is-pythonic.html">Pythonic</a>
than Django because Flask web application code is in most cases more explicit.
Flask is easy to get started with as a beginner because there is little
boilerplate code for getting a simple app up and running. </p>
<p>For example, here's a valid "hello world" web application with Flask (the
equivalent in Django would be significantly more code):</p>
<div class="codehilite"><pre><span class="n">from</span> <span class="n">flask</span> <span class="n">import</span> <span class="n">Flask</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<span class="err">@</span><span class="n">app</span><span class="p">.</span><span class="n">route</span><span class="p">(</span><span class="sc">'/'</span><span class="p">)</span>
<span class="n">def</span> <span class="n">hello_world</span><span class="p">()</span><span class="o">:</span>
<span class="k">return</span> <span class="err">'</span><span class="n">Hello</span> <span class="n">World</span><span class="o">!</span><span class="err">'</span>
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="err">'</span><span class="n">__main__</span><span class="err">'</span><span class="o">:</span>
<span class="n">app</span><span class="p">.</span><span class="n">run</span><span class="p">()</span>
</pre></div>
<p>Flask was also written several years after Django and therefore
learned from the Python community's reactions as the framework evolved.
Jökull Sólberg wrote a great piece articulating to this effect in his
<a href="http://jokull.calepin.co/my-flask-to-django-experience.html">experience switching between Flask and Django</a>.</p>
<h2>Flask resources</h2>
<ul>
<li>
<p>The Flask mega tutorial by
<a href="https://twitter.com/miguelgrinberg">Miguel Grinberg</a> is a perfect
starting resource for using this web framework. Each post focuses on a
single topic and builds on previous posts. The series includes 18 parts:
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world">#1 Hello World</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates">#2 Templates</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-forms">#3 Web Forms</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database">#4 Database</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins">#5 User Logins</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vi-profile-page-and-avatars">#6 Profile Page and Avatars</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vii-unit-testing">#7 Unit Testing</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-viii-followers-contacts-and-friends">#8 Followers, Contacts, and Friends</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ix-pagination">#9 Pagination</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-x-full-text-search">#10 Full Text Search</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xi-email-support">#11 Email Support</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xii-facelift">#12 Facelift</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiii-dates-and-times">#13 Dates and Times</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiv-i18n-and-l10n">#14 I18n and L10n</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xv-ajax">#15 Ajax</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvi-debugging-testing-and-profiling">#16 Debugging, Testing and Profiling</a>,
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvii-deployment-on-linux-even-on-the-raspberry-pi">#17 Deployment on Linux</a>
and
<a href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xviii-deployment-on-the-heroku-cloud">#18 Deployment on the Heroku Cloud</a>.
Miguel also wrote the
<a href="http://shop.oreilly.com/product/0636920031116.do">O'Reilly Flask Web Development</a>
book which is also an excellent learning resource.</p>
</li>
<li>
<p>If you're looking for a fun introduction to Flask and WebSockets, check out
my blog post on creating
<a href="https://www.twilio.com/blog/2014/11/choose-your-own-adventure-presentations-with-reveal-js-python-and-websockets.html">Choose Your Own Adventure Presentations with Reveal.js, Python and WebSockets</a>.
That post is my favorite technical walkthrough I've written to date. There
is also a companion open source
<a href="https://github.com/makaimc/choose-your-own-adventure-presentations">GitHub repository</a>
for the app with tags for each step in the blog post.</p>
</li>
<li>
<p><a href="https://www.twilio.com/blog/2014/10/branded-mms-coupon-generation-with-python-and-twilio.html">Branded MMS Coupon Generation with Python and Twilio</a>
is a Flask tutorial I wrote for building a web application that can send
branded barcode coupons via MMS. The post goes through every step from
a blank directory until you have a working app that you can deploy to
Heroku.</p>
</li>
<li>
<p><a href="http://blog.john.mayonvolcanosoftware.com/building-a-blog-using-flask-and-angularjs-part-1/">Building a blog using Flask and AngularJS Part 1</a>
is the first of a multipart series on working with Flask and an AngularJS
front end.
<a href="http://blog.john.mayonvolcanosoftware.com/building-a-blog-using-flask-and-angularjs-part-2/">Part 2</a> is also available
<a href="https://github.com/basco-johnkevin/building-a-blog-using-flask-and-angularjs">along with the source code</a>.</p>
</li>
<li>
<p><a href="http://flask.pocoo.org/extensions/">The Flask Extensions Registry</a> is a
curated list of the best packages that extend Flask. It's the first location
to look through when you're wondering how to do something that's not in the
core framework.</p>
</li>
<li>
<p><a href="http://exploreflask.com/">Explore Flask</a> is a public domain book that
was previously backed on Kickstarter and cost money for about a year before
being open sourced. The book explains best practices and patterns for
building Flask apps.</p>
</li>
<li>
<p><a href="http://mattupstate.com/python/2013/06/26/how-i-structure-my-flask-applications.html">How I Structure My Flask Application</a>
walks through how this developer organizes the components and architecture
for his Flask applications.</p>
</li>
<li>
<p>Randall Degges wrote a detailed walkthrough for
<a href="https://stormpath.com/blog/build-a-flask-app-in-30-minutes/">building a Flask app in 30 minutes</a>.</p>
</li>
<li>
<p><a href="http://charlesleifer.com/blog/saturday-morning-hacks-building-an-analytics-app-with-flask/">Building an Analytics App with Flask</a>
is a detailed walkthrough for collecting and analyzing webpage
analytics with your own Flask app.</p>
</li>
<li>
<p>Nice post by Jeff Knupp on <a href="http://www.jeffknupp.com/blog/2014/01/29/productionizing-a-flask-application/">Productionizing a Flask App</a>.</p>
</li>
<li>
<p><a href="http://maximebf.com/blog/2012/10/building-websites-in-python-with-flask/#.U06EZ-ZdW4J">Building Websites in Python with Flask</a>
is another walkthrough tutorial from first steps through
<a href="http://maximebf.com/blog/2012/11/getting-bigger-with-flask/">getting bigger with Flask</a>.</p>
</li>
<li>
<p>The Plank & Whittle blog has two posts, one on
<a href="http://www.plankandwhittle.com/packaging-a-flask-web-app/">Packaging a Flask web app</a>
and another on
<a href="http://www.plankandwhittle.com/packaging-a-flask-app-in-a-debian-package/">Packaging a Flask app in a Debian package</a>
once you've built an app and want to deploy it.</p>
</li>
<li>
<p>The Tuts+ <a href="http://code.tutsplus.com/tutorials/an-introduction-to-pythons-flask-framework--net-28822">Flask tutorial</a>
is another great walkthrough for getting started with the framework.</p>
</li>
<li>
<p><a href="http://readwrite.com/2014/07/11/one-click-messaging-app">Create Your Own Obnoxiously Simple Messaging App Just Like Yo</a>
is a silly walkthrough of very basic Flask web application that uses
<a href="https://www.nitrous.io/">Nitrous.io</a> to get started and
<a href="https://www.twilio.com/">Twilio</a> for SMS.</p>
</li>
<li>
<p>The blog post series "Things which aren't magic" covers how Flask's
ubiquitous @app.route decorator works under the covers. There are two
parts in the series,
<a href="http://ains.co/blog/things-which-arent-magic-flask-part-1.html">part 1</a>
and
<a href="http://ains.co/blog/things-which-arent-magic-flask-part-2.html">part 2</a>.</p>
</li>
<li>
<p><a href="http://www.realpython.com/blog/python/flask-by-example-part-1-project-setup/">Flask by Example: Part 1</a>
shows the basic first steps for setting up a Flask project.
<a href="http://www.realpython.com/blog/flask-by-example-part-2-postgres-sqlalchemy-and-alembic/">Part 2</a>
explains how to use PostgreSQL, SQLAlchemy and Alembic.
<a href="https://realpython.com/blog/python/flask-by-example-part-3-text-processing-with-requests-beautifulsoup-nltk/">Part 3</a>
describes text processing with BeautifulSoup and NLTK.
<a href="https://realpython.com/blog/python/flask-by-example-implementing-a-redis-task-queue/">Part 4</a>
shows how to build a task queue with Flask and Redis.</p>
</li>
<li>
<p><a href="https://www.digitalocean.com/community/articles/how-to-structure-large-flask-applications">How to Structure Large Flask Applications</a>
covers a subject that comes up quickly once you begin adding significant
functionality to your Flask application.</p>
</li>
<li>
<p><a href="http://blog.miguelgrinberg.com/post/video-streaming-with-flask">Video streaming with Flask</a>
is another fantastic tutorial by Miguel Grinberg that covers video
streaming.</p>
</li>
<li>
<p>"<a href="https://medium.com/@5hreyans/the-one-weird-trick-that-cut-our-flask-page-load-time-by-70-87145335f679">One line of code cut our Flask page load times by 60%</a>
is an important note about optimizing Flask template cache size to
dramatically increase performance in some cases.</p>
</li>
<li>
<p><a href="https://www.twilio.com/blog/2014/03/unit-testing-your-twilio-app-using-pythons-flask-and-nose.html">Unit Testing Your Twilio App Using Python’s Flask and Nose</a>
covers integrating the Twilio API into a Flask application and how to test
that functionality with <a href="https://nose.readthedocs.org/en/latest/">nose</a>.</p>
</li>
<li>
<p>The Flask documentation has some quick examples for how to deploy Flask
with
<a href="http://flask.pocoo.org/docs/deploying/wsgi-standalone/">standalone WSGI containers</a>.</p>
</li>
<li>
<p><a href="https://realpython.com/blog/python/handling-email-confirmation-in-flask/">Handling Email Confirmation in Flask</a>
is a great walkthrough for a common use case of ensuring an email address
matches with the user's login information.</p>
</li>
<li>
<p>Most Flask developers use SQLAlchemy as an ORM to relational databases.
If you're unfamiliar with SQLAlchemy questions will often come up such as
<a href="http://stackoverflow.com/questions/4201455/sqlalchemy-whats-the-difference-between-flush-and-commit">what's the difference between flush and commit?</a>
that are important to understand as you build out your app.</p>
</li>
</ul>
<h2>Open source Flask example projects</h2>
<ul>
<li>
<p><a href="https://github.com/miguelgrinberg/microblog">Microblog</a> is the companion
open source project that goes along with Miguel Grinberg's O'Reilly Flask
book.</p>
</li>
<li>
<p><a href="https://github.com/JackStouffer/Flask-Foundation">Flask Foundation</a> is a
starting point for new Flask projects. There's also a
<a href="https://jackstouffer.github.io/Flask-Foundation/">companion website</a> for
the project that explains what extensions the base project includes.</p>
</li>
<li>
<p><a href="https://github.com/sloria/cookiecutter-flask">Cookiecutter Flask</a> is a project
template for use with <a href="https://github.com/audreyr/cookiecutter">Cookiecutter</a>.</p>
</li>
<li>
<p><a href="https://github.com/mjhea0/flaskr-tdd">Flaskr TDD</a> takes the official Flask
tutorial and adds test driven development and JQuery to the project. </p>
</li>
<li>
<p>Use the <a href="https://github.com/kamalgill/flask-appengine-template">Flask App Engine Template</a>
for getting set up on Google App Engine with Flask.</p>
</li>
<li>
<p>Here is a
<a href="http://charlesleifer.com/blog/saturday-morning-hack-a-little-note-taking-app-with-flask/">note-taking app</a>
along with the
<a href="https://gist.github.com/coleifer/632d3c9aa6b2ea519384">source code in Gists</a>.</p>
</li>
<li>
<p><a href="https://github.com/BouncyNudibranch/bean-counter">Bean Counter</a> is an
open source Flask app for tracking coffee.</p>
</li>
<li>
<p><a href="http://flaskbb.org/">FlaskBB</a> is a Flask app for a discussion forum.</p>
</li>
<li>
<p><a href="https://github.com/Jahaja/psdash">psdash</a> is an app built with Flask and
psutils to display information about the computer it is running on.</p>
</li>
</ul>
<h2>Flask framework learning checklist</h2>
<p><i class="fa fa-check-square-o"></i>
<a href="http://flask.pocoo.org/docs/installation/">Install Flask</a> on
your local development machine.</p>
<p><i class="fa fa-check-square-o"></i>
Work through the 18-part Flask tutorial listed first under "Flask resources"
below.</p>
<p><i class="fa fa-check-square-o"></i>
Read through <a href="http://flask.pocoo.org/extensions/">Flask Extensions Registry</a>
to find out what extensions you'll need to build your project.</p>
<p><i class="fa fa-check-square-o"></i>
Start coding your Flask app based on what you learned from the 18 part
Flask tutorial plus open source example applications found below. </p>
<p><i class="fa fa-check-square-o"></i>
Move on to the <a href="/deployment.html">deployment section</a> to get your initial
Flask project on the web.</p>
<h3>What do you need to learn about web frameworks next?</h3>
<div class="row">
<div class="col-md-3">
<div class="well select-next">
<a href="/deployment.html" class="btn btn-success btn-full"><i class="fa fa-share fa-inverse fa-2x"></i></a>
<p class="under-btn">
How do I deploy Flask web application?
</p>
</div>
</div>
<div class="col-md-3">
<div class="well select-next">
<a href="/web-frameworks.html" class="btn btn-success btn-full"><i class="fa fa-code fa-inverse fa-2x"></i></a>
</a>
<p class="under-btn">
I'd like to go back to reviewing other web frameworks.
</p>
</div>
</div>
<div class="col-md-3">
<div class="well select-next">
<a href="/cascading-style-sheets.html" class="btn btn-success btn-full"><i class="fa fa-css3 fa-inverse fa-2x"></i></a>
<p class="under-btn">
The user interface looks terrible. How do I style my web app?
</p>
</div>
</div>
<div class="col-md-3">
<div class="well select-next">
<a href="/source-control.html" class="btn btn-success btn-full"><i class="fa fa-code-fork fa-inverse fa-2x"></i></a>
<p class="under-btn">
How can I version and store my source code so I don't lose it?
</p>
</div>
</div>
</div> <div id="mc_embed_signup">
<form action="//mattmakai.us2.list-manage.com/subscribe/post?u=b7e774f0c4f05dcebbfee183d&id=b22335388d" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h4>Sign up here to receive an email with major updates to this site and Python tutorials delivered to your inbox once a month.</h4>
<div class="row">
<div class="col-md-9">
<input type="email" value="" name="EMAIL" class="email form-control" id="mce-EMAIL" placeholder="email address" required>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_b7e774f0c4f05dcebbfee183d_b22335388d" tabindex="-1" value=""></div>
</div>
<div class="col-md-3">
<div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="btn btn-success" style="font-family: 'Helvetica Neue';"></div>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="col-md-offset-1 col-md-3" id="sidebar">
<div class="panel panel-success">
<div class="panel-heading">
<h3 class="panel-head">Sponsored By</h3>
</div>
<div class="panel-body">
<a href="https://realpython.com/?utm_source=fsp&utm_medium=promo&utm_campaign=flask"><img src="theme/img/sponsored/realpython.png" alt="Real Python logo" width="100%"></a>
<p style="font-size: .8em;">If you're searching for step-by-step Flask
tutorials then I highly recommend
<a href="https://realpython.com/?utm_source=fsp&utm_medium=promo&utm_campaign=flask" onclick="trackOutboundLink('https://realpython.com/?utm_source=fsp&utm_medium=promo&utm_campaign=flask'); return false;">checking out Real Python</a>.
</p>
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading">
<h3 class="panel-head"><a href="/table-of-contents.html" style="color: #fff;">Table of Contents</a></h3>
</div>
<div class="list-group">
<a href="/introduction.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Introduction</a>
<a href="/why-use-python.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Why Use Python?</a>
<a href="/best-python-resources.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Best Python Resources</a>
<a href="/best-python-videos.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Best Python Videos</a>
<a href="/development-environments.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Development Environments</a>
<a href="/vim.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Vim</a>
<a href="/emacs.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Emacs</a>
<a href="/generators.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Generators</a>
<a href="/comprehensions.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Comprehensions</a>
<a href="/web-frameworks.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Web Frameworks</a>
<a href="/django.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Django</a>
<a href="/flask.html" class="list-group-item smaller-item active" style='font-family: "Helvetica Neue",sans-serif;'>Flask</a>
<a href="/bottle.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Bottle</a>
<a href="/pyramid.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Pyramid</a>
<a href="/morepath.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Morepath</a>
<a href="/other-web-frameworks.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Other Web Frameworks</a>
<a href="/web-design.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Web Design</a>
<a href="/cascading-style-sheets.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Cascading Style Sheets</a>
<a href="/javascript.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>JavaScript</a>
<a href="/websockets.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>WebSockets</a>
<a href="/web-application-security.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Web Application Security</a>
<a href="/databases.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Databases</a>
<a href="/no-sql-datastore.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>NoSQL Data Stores</a>
<a href="/application-programming-interfaces.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Application Programming Interfaces</a>
<a href="/api-integration.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>API Integration</a>
<a href="/api-creation.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>API Creation</a>
<a href="/deployment.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Deployment</a>
<a href="/servers.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Servers</a>
<a href="/platform-as-a-service.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Platform-as-a-service</a>
<a href="/operating-systems.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Operating Systems</a>
<a href="/web-servers.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Web Servers</a>
<a href="/wsgi-servers.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>WSGI Servers</a>
<a href="/source-control.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Source Control</a>
<a href="/application-dependencies.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Application Dependencies</a>
<a href="/static-content.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Static Content</a>
<a href="/task-queues.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Task Queues</a>
<a href="/configuration-management.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Configuration Management</a>
<a href="/continuous-integration.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Continuous Integration</a>
<a href="/logging.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Logging</a>
<a href="/monitoring.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Monitoring</a>
<a href="/web-analytics.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Web Analytics</a>
<a href="/docker.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Docker</a>
<a href="/caching.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Caching</a>
<a href="/code-metrics.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Code Metrics</a>
<a href="/what-full-stack-means.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>What "Full Stack" Means</a>
<a href="/change-log.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Change Log</a>
<a href="/future-directions.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>Future Directions</a>
<a href="/about-author.html" class="list-group-item smaller-item " style='font-family: "Helvetica Neue",sans-serif;'>About the Author</a>
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading"><h3 class="panel-head">Flask</h3></div>
<div class="panel-body">
Major updates are tweeted via
<a href="https://twitter.com/fullstackpython">@fullstackpython</a>.
<hr/>
Need more detailed tutorials than you see here?
<a href="/email.html">Sign up to receive an email when that content is created.</a>
</div>
</div>
</div></div>
<hr/>
<div class="footer pull-right">
<a href="http://www.mattmakai.com/" class="underline">Matt Makai</a>
2015
</div>
</div>
<div style="display: none;"><img src="https://www.linkedin.com/profile/view?authToken=zRgB&authType=name&id=3952407" /></div>
<script type='text/javascript'>
var trackOutboundLink = function(url) { ga('send', 'event', 'outbound', 'click', url, {'hitCallback': function () { document.location = url; } }); }
</script>
</body>
</html>