GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — fullstackpython.github.com/web-frameworks.html at reStructuredText · ershadul/fullstackpython.github.com Expand file tree/ Copy pathweb-frameworks.htmlMore file actions 276 lines (269 loc) · 18.4 KB / Copy pathweb-frameworks.htmlFile metadata and controls276 lines (269 loc) · 18.4 KB 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 <!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="description" content="Full Stack Python shows how an entire Python web application is built and deployed. Each section of the guide explains a different key concept, from the server through the Python WSGI web framework to the front end JavaScript."> <meta name="author" content="Matt Makai"> <link rel="shortcut icon" href="theme/img/full-stack-python-logo-bw.png"> <title>Full Stack Python</title> <!-- Bootstrap core CSS --> <link href="theme/css/fsp.css" rel="stylesheet"> <!--[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]--> <style> html, body { font-size: 18px; color: #222; background: #fefefe; } body { padding-top: 30px; } .footer { padding: 20px 0 30px 0; } a, a:hover {border-bottom: 1px dotted; color: #444;} a:hover {text-decoration: none; color: #000;} .logo-title {font-size: 56px; color: #403072; padding-top: 80px; font-family: "News Cycle", "Arial Narrow Bold", sans-serif; font-weight: bold; line-height: 30px; margin-left: 5px;} .logo-title a, .logo-title a:hover {color: #000; text-decoration: none; border-bottom: none;} .logo-title a:hover {color: gray;} .logo-image {vertical-align: top; border: none;} a.list-group-item.active {background: #444; border: 1px solid #222;} a.list-group-item.active:hover {background: #444; border: 1px solid #222;} #sidebar {margin-top: 30px;} @media (max-width: 600px) { .logo-header-section { margin: 20px 32px 0 0; } } </style> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-19910497-7']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </head> <body> <a href="https://github.com/makaimc/fullstackpython.github.com" class="github"> <img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /> </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/full-stack-python-logo-bw.png" height="42" width="42" class="logo-image" /></a> <span class="logo-title"><a href="/">Full Stack Python</a></span> </div> </div> </div> <div class="row"> <div class="col-md-8"> <h1>Web Frameworks</h1> <p>A web application framework is a collection of libraries that provide functionality to accomplish common operations for the web. These common operations include:</p> <ol class="arabic simple"> <li>URL routing</li> <li>HTML, XML, JSON, and other output format templating</li> <li>Database manipulation</li> <li>Security against Cross-site request forgery (CSRF) and other attacks</li> </ol> <p>Not all web frameworks include functionality for all of the above functionality. Frameworks fall somewhere between simply executing a single use case and attempting to be everything to every developer with increased complexity.</p> <p>For example, the Django web application framework includes an Object-Relational Mapping (ORM) layer that abstracts relational database read, write, query, and delete operations. However, Django's ORM cannot work without significant modification on non-relational databases such <a class="reference external" href="http://www.mongodb.org/">MongoDB</a> and <a class="reference external" href="http://docs.basho.com/">Riak</a>. Other web frameworks such as Flask and Pyramid are generally easier to use with non-relational databases by incorporating external Python libraries. There is a spectrum between minimal functionality with easy extensibility and including everything in the framework with tight integration.</p> <div class="section" id="django"> <h2>Django</h2> <p><a class="reference external" href="http://www.djangoproject.com/">Django</a> is a widely used Python web application framework with a "batteries-included" philosophy. The principle behind batteries-included is that the common functionality for building web applications should come with the framework instead of as a separate library. For example, <a class="reference external" href="https://docs.djangoproject.com/en/dev/topics/http/urls/">URL routing</a>, a <a class="reference external" href="https://docs.djangoproject.com/en/dev/topics/templates/">templating system</a>, <a class="reference external" href="https://docs.djangoproject.com/en/dev/topics/db/">object-relational mapper</a>, and a <a class="reference external" href="https://docs.djangoproject.com/en/dev/topics/migrations/">database schema migrations</a> (as of version 1.7) are all included with the <a class="reference external" href="https://pypi.python.org/pypi/Django/1.6.2">Django library</a>.</p> <div class="section" id="django-resources"> <h3>Django resources</h3> <p><a class="reference external" href="http://twoscoopspress.com/products/two-scoops-of-django-1-6">2 Scoops of Django</a> by Daniel Greenfield and Audrey Roy is well worth the price of admission if you're serious about learning how to correctly develop Django websites.</p> <p><a class="reference external" href="http://effectivedjango.com/">Effective Django</a> and <a class="reference external" href="http://www.tangowithdjango.com/book/">Tango with Django</a> are a great free introductions to using the most popular Python web framework.</p> <p>DjangoCon US videos from <a class="reference external" href="http://www.youtube.com/user/TheOpenBastion/videos">2013</a>, <a class="reference external" href="http://pyvideo.org/category/23/djangocon-2012">2012</a>, <a class="reference external" href="http://pyvideo.org/category/3/djangocon-2011">2011</a>, as well as <a class="reference external" href="http://pyvideo.org/category">earlier US and DjangoCon EU conferences</a> are all available free of charge.</p> <p>The <a class="reference external" href="http://www.reddit.com/r/django">Django subreddit</a> often has links to the latest resources for learning Django.</p> <p>Lincoln Loop wrote a <a class="reference external" href="http://lincolnloop.com/django-best-practices/">Django Best Practices guide</a> for the community.</p> <p>Steve Losh wrote an incredibly detailed <a class="reference external" href="http://stevelosh.com/blog/2011/06/django-advice/">Django Advice guide</a>.</p> </div> </div> <div class="section" id="flask"> <h2>Flask</h2> <p><a class="reference external" href="http://flask.pocoo.org/">Flask</a> is a Python microframework deliberately built with a <a class="reference external" href="http://flask.pocoo.org/docs/design/">small core and easy extensibility philosophy</a>. Flask is generally considered more "<a class="reference external" href="http://stackoverflow.com/questions/58968/what-defines-pythonian-or-pythonic">Pythonic</a>" than Django because Flask web application code is often more explicit. 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 class="reference external" href="http://jokull.calepin.co/my-flask-to-django-experience.html">experience switching between Flask and Django</a>.</p> <div class="section" id="flask-resources"> <h3>Flask resources</h3> <p>The 18 post series Flask mega tutorial is an absolutely amazing starting resource:</p> <ul class="simple"> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world">Part 1: Hello World</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates">Part 2: Templates</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-forms">Part 3: Web Forms</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database">Part 4: Database</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins">Part 5: User Logins</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vi-profile-page-and-avatars">Part 6: Profile Page and Avatars</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vii-unit-testing">Part 7: Unit Testing</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-viii-followers-contacts-and-friends">Part 8: Followers, Contacts, and Friends</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ix-pagination">Part 9: Pagination</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-x-full-text-search">Part 10: Full Text Search</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xi-email-support">Part 11: Email Support</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xii-facelift">Part 12: Facelift</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiii-dates-and-times">Part 13: Dates and Times</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiv-i18n-and-l10n">Part 14: I18n and L10n</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xv-ajax">Part 15: Ajax</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvi-debugging-testing-and-profiling">Part 16: Debugging, Testing and Profiling</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvii-deployment-on-linux-even-on-the-raspberry-pi">Part 17: Deployment on Linux</a></li> <li><a class="reference external" href="http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xviii-deployment-on-the-heroku-cloud">Part 18: Deployment on the Heroku Cloud</a></li> </ul> <p>Yes, there are many parts to the series. However, each post is focused on a single topic to contain the complexity. The whole series is well worth an in-depth read-through. The <a class="reference external" href="https://twitter.com/miguelgrinberg">author</a> is also writing the <a class="reference external" href="http://shop.oreilly.com/product/0636920031116.do">O'Reilly Flask Web Development</a> book so consider picking that up as well.</p> <p>The <a class="reference external" href="http://flask.pocoo.org/extensions/">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> <p>Great post by Jeff Knupp on <a class="reference external" href="http://www.jeffknupp.com/blog/2014/01/29/productionizing-a-flask-application/">Productionizing a Flask App</a></p> <p>The Plank & Whittle blog has two posts, one on <a class="reference external" href="http://www.plankandwhittle.com/packaging-a-flask-web-app/">Packaging a Flask web app</a> and another on <a class="reference external" 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> <p>The tuts+ <a class="reference external" 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> </div> </div> <div class="section" id="bottle"> <h2>Bottle</h2> <p><a class="reference external" href="http://bottlepy.org/docs/dev/index.html">Bottle</a> is a WSGI-compliant <a class="reference external" href="https://github.com/defnull/bottle/blob/master/bottle.py">single source file</a> web framework with no external dependencies except for the standard library included with Python.</p> <div class="section" id="bottle-resources"> <h3>Bottle resources</h3> <p>Digital Ocean provides an extensive <a class="reference external" href="https://www.digitalocean.com/community/articles/how-to-use-the-bottle-micro-framework-to-develop-python-web-apps">introductory post on Bottle</a>.</p> <p>This post provides a short <a class="reference external" href="http://www.giantflyingsaucer.com/blog/?p=3598">tutorial on getting started with Bottle</a>.</p> <p>Here's a short code snippet for <a class="reference external" href="http://myadventuresincoding.wordpress.com/2011/01/02/creating-a-rest-api-in-python-using-bottle-and-mongodb/">creating a REST API with Bottle and MongoDB</a>.</p> </div> </div> <div class="section" id="web-framework-logging"> <h2>Web Framework Logging</h2> <p>Logging is a common mechanism for monitoring web applications written with a web framework. Runtime exceptions that prevent code from running are important to log to investigate and fix the source of the problems. Informational and debugging logging also helps to understand how the application is performing even if code is working as intended.</p> <p>Logging is often grouped into several categories:</p> <ol class="arabic simple"> <li>Information</li> <li>Debug</li> <li>Warning</li> <li>Error</li> </ol> <p>Logging errors that occur while a web framework is running is crucial to understanding how your application is performing. <a class="reference external" href="http://raven.readthedocs.org/en/latest/">Raven</a> is a Python client for the <a class="reference external" href="https://github.com/getsentry/sentry">Sentry</a> exception logging and aggregation application. Raven provides the way to send exceptions to Sentry, which should be deployed on a separate server from your production infrastructure. Raven can also be used by Python scripts to send other log data to Sentry for aggregation. Sentry provides a clean web application interface for viewing the exceptions. Sentry can also be configured with a mail plugin to send emails when exceptions occur.</p> <div class="section" id="web-framework-resources"> <h3>Web Framework Resources</h3> <p><a class="reference external" href="http://www.pylonsproject.org/">Pyramid</a>, <a class="reference external" href="http://falconframework.org/">Falcon</a>, <a class="reference external" href="http://webpy.org/">web.py</a> are the most common Python web frameworks other than Django, Flask and Bottle.</p> <p>This <a class="reference external" href="http://codecondo.com/14-minimal-web-frameworks-for-python/">roundup of 14 minimal Python frameworks</a> contains both familiar and less known Python libraries.</p> </div> </div> <br/> Next read the <a href="/task-queues.html">task queues</a> section. </div> <div class="col-md-offset-1 col-md-3" id="sidebar"> <div class="list-group"> <a href="/introduction.html" class="list-group-item ">Introduction</a> <a href="/servers.html" class="list-group-item ">Servers</a> <a href="/operating-systems.html" class="list-group-item ">Operating Systems</a> <a href="/web-servers.html" class="list-group-item ">Web Servers</a> <a href="/platform-as-a-service.html" class="list-group-item ">Platform-as-a-service</a> <a href="/databases.html" class="list-group-item ">Databases</a> <a href="/wsgi-servers.html" class="list-group-item ">WSGI Servers</a> <a href="/web-frameworks.html" class="list-group-item active">Web Frameworks</a> <a href="/task-queues.html" class="list-group-item ">Task Queues</a> <a href="/static-content.html" class="list-group-item ">Static Content</a> <a href="/caching.html" class="list-group-item ">Caching</a> <a href="/web-browsers.html" class="list-group-item ">Web Browsers</a> <a href="/web-application-security.html" class="list-group-item ">Web Application Security</a> <a href="/monitoring.html" class="list-group-item ">Monitoring</a> <a href="/web-analytics.html" class="list-group-item ">Web Analytics</a> <a href="/api-integration.html" class="list-group-item ">API Integration</a> <a href="/source-control.html" class="list-group-item ">Source Control</a> <a href="/configuration-management.html" class="list-group-item ">Configuration Management</a> <a href="/dependency-management.html" class="list-group-item ">Application Dependencies</a> <a href="/no-sql-datastore.html" class="list-group-item ">NoSQL Data Stores</a> <a href="/about-author.html" class="list-group-item ">About</a> <a href="/change-log.html" class="list-group-item ">Change Log</a> </div> </div></div> <hr/> <div class="footer pull-right"> <a href="http://www.mattmakai.com/" class="underline">Matt Makai</a> 2014 </div> </div> <script src="http://code.jquery.com/jquery-2.1.0.min.js"></script> <script src="theme/js/bootstrap.min.js"></script> </body> </html> |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |