├── CHANGELOG.rst ├── README.rst ├── bottle ├── README.rst ├── bottle_app.py ├── hello.db ├── templates │ ├── db.tpl │ ├── hello.tpl │ └── master.tpl └── wsgi.wsgi ├── cakephp ├── README.rst └── app │ ├── config │ ├── core.php │ └── database.php │ ├── controllers │ └── hellos_controller.php │ ├── hello.db │ ├── models │ ├── datasources │ │ └── dbo │ │ │ └── dbo_sqlite3.php │ └── hello.php │ └── views │ ├── hellos │ ├── hellodb.ctp │ └── hellos.ctp │ └── layouts │ └── default.ctp ├── codeigniter ├── README.rst └── application │ ├── config │ ├── config.php │ ├── database.php │ └── routes.php │ ├── controllers │ ├── hello.php │ └── index.html │ ├── hello.db │ ├── index.html │ ├── models │ └── index.html │ └── views │ ├── hellodb.php │ ├── hellos.php │ └── index.html ├── django ├── HelloWorld │ ├── __init__.py │ ├── hello.db │ ├── manage.py │ ├── models │ │ ├── __init__.py │ │ └── hello.py │ ├── settings.py │ ├── templates │ │ ├── base.html │ │ ├── hellodb.html │ │ ├── hellos.html │ │ └── index.html │ ├── urls.py │ └── views.py ├── README.rst └── wsgi.wsgi ├── flask ├── README.rst ├── flask_app.py ├── hello.db ├── templates │ ├── db.html │ ├── hello.html │ └── master.html └── wsgi.wsgi ├── kohana ├── README.rst └── application │ ├── bootstrap.php │ ├── classes │ ├── controller │ │ ├── hello.php │ │ ├── hellodb.php │ │ ├── helloorm.php │ │ └── hellos.php │ └── model │ │ └── hello.php │ ├── config │ └── database.php │ ├── hello.db │ └── views │ ├── hellodb.php │ ├── helloorm.php │ ├── hellos.php │ └── master.php ├── pyramid ├── HelloWorld │ ├── CHANGES.txt │ ├── README.txt │ ├── hello.db │ ├── helloworld │ │ ├── __init__.py │ │ ├── models.py │ │ ├── templates │ │ │ ├── db.jinja2 │ │ │ ├── hello.jinja2 │ │ │ └── master.jinja2 │ │ └── views.py │ ├── production.ini │ └── setup.py ├── README.rst └── wsgi.wsgi ├── rails ├── Gemfile ├── README.rst ├── app │ ├── controllers │ │ └── hello_controller.rb │ ├── models │ │ └── hello.rb │ └── views │ │ ├── hello │ │ ├── hellodb.html.erb │ │ └── hellos.html.erb │ │ └── layouts │ │ └── application.html.erb ├── config │ ├── database.yml │ └── routes.rb └── db │ ├── production.sqlite3 │ └── seeds.rb ├── sinatra ├── README.rst ├── config.ru ├── hello.db ├── sinatra_app.rb └── views │ ├── hellodb.erb │ ├── hellos.erb │ └── layout.erb ├── symfony ├── README.rst ├── app │ ├── Resources │ │ └── views │ │ │ └── base.html.twig │ ├── autoload.php │ └── config │ │ ├── config.yml │ │ ├── parameters.ini │ │ └── routing.yml ├── hello.db └── src │ └── Acme │ └── HelloBundle │ ├── AcmeHelloBundle.php │ ├── Controller │ ├── DefaultController.php │ ├── HelloController.php │ └── HellodbController.php │ ├── DependencyInjection │ ├── AcmeHelloExtension.php │ └── Configuration.php │ ├── Entity │ └── Hello.php │ ├── Resources │ ├── config │ │ ├── routing.yml │ │ └── services.yml │ ├── doc │ │ └── index.rst │ ├── translations │ │ └── messages.fr.xliff │ └── views │ │ └── Default │ │ ├── hello.html.twig │ │ ├── hellodb.html.twig │ │ └── index.html.twig │ └── Tests │ └── Controller │ └── DefaultControllerTest.php ├── turbogears ├── HelloWorld │ ├── HelloWorld.egg-info │ │ ├── PKG-INFO │ │ ├── SOURCES.txt │ │ ├── dependency_links.txt │ │ ├── entry_points.txt │ │ ├── paster_plugins.txt │ │ ├── requires.txt │ │ └── top_level.txt │ ├── MANIFEST.in │ ├── README.txt │ ├── development.ini │ ├── ez_setup │ │ ├── README.txt │ │ └── __init__.py │ ├── hello.db │ ├── helloworld │ │ ├── __init__.py │ │ ├── config │ │ │ ├── __init__.py │ │ │ ├── app_cfg.py │ │ │ ├── deployment.ini │ │ │ ├── environment.py │ │ │ └── middleware.py │ │ ├── controllers │ │ │ ├── __init__.py │ │ │ ├── controller.template │ │ │ ├── error.py │ │ │ ├── root.py │ │ │ ├── secure.py │ │ │ └── template.py │ │ ├── i18n │ │ │ └── ru │ │ │ │ └── LC_MESSAGES │ │ │ │ └── helloworld.po │ │ ├── lib │ │ │ ├── __init__.py │ │ │ ├── app_globals.py │ │ │ ├── base.py │ │ │ └── helpers.py │ │ ├── model │ │ │ ├── __init__.py │ │ │ ├── hello.py │ │ │ └── model.template │ │ ├── templates │ │ │ ├── __init__.py │ │ │ ├── db.html │ │ │ ├── db.jinja │ │ │ ├── db.mak │ │ │ ├── hello.html │ │ │ ├── hello.jinja │ │ │ ├── hello.mak │ │ │ ├── master.html │ │ │ ├── master.jinja │ │ │ └── master.mak │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── functional │ │ │ │ ├── __init__.py │ │ │ │ ├── test_authentication.py │ │ │ │ └── test_root.py │ │ │ └── models │ │ │ │ ├── __init__.py │ │ │ │ └── test_auth.py │ │ └── websetup │ │ │ ├── __init__.py │ │ │ ├── bootstrap.py │ │ │ └── schema.py │ ├── production.ini │ ├── setup.cfg │ ├── setup.py │ └── test.ini ├── README.rst └── wsgi.wsgi ├── webgo ├── README.rst ├── hello.db ├── hello.go └── tmpl │ ├── db.mustache │ ├── hellodb.mustache │ ├── hellos.mustache │ └── lipsum.mustache └── yii ├── README.rst └── protected ├── config └── main.php ├── controllers ├── HelloController.php ├── HellodbController.php └── HellosController.php ├── data ├── hello.db ├── schema.mysql.sql ├── schema.sqlite.sql └── testdrive.db ├── models └── Hello.php └── views ├── hellodb └── index.php ├── hellos └── index.php └── layouts └── main.php /CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | Changelog 3 | ================================================================================ 4 | 5 | 6 | 09/12/2011 7 | ================================================================================ 8 | 9 | * Updated Ubuntu LTS AMI (ami-fbbf7892 ubuntu-images-us/ubuntu-lucid-10.04- 10 | amd64-server-20110719.manifest.xml) 11 | * Rails 2.x and 3.0 were dropped in favor of Rails 3.1. 12 | * CakePHP 1.2 was dropped in favor of 1.3, but Symfony and Yii were added as 13 | they seem to have considerable market share. 14 | * Corrected faulty configuration of CakePHP's caching engine. 15 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | The Great Web Framework Shootout 3 | ================================================================================ 4 | 5 | | Copyright: (c) 2012 Seth Davis 6 | | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 7 | 8 | 9 | Synopsis 10 | ================================================================================ 11 | 12 | Welcome to the great web framework shootout. Here you will find test code and 13 | benchmark results comparing the performance of a few of the most popular F/OSS 14 | web frameworks in use today. 15 | 16 | Please see `The Great Web Framework Shootout's website`_ for important 17 | disclaimers and other detailed information about these benchmarks. If you have 18 | any questions or comments, feel free to contact me on `Google+`_. 19 | 20 | .. _The Great Web Framework Shootout's website: 21 | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 22 | .. _Google+: http://profiles.google.com/seedifferently 23 | 24 | 25 | "Do these results have any real world value?" 26 | ================================================================================ 27 | 28 | Probably not. When it comes to code, the slightest adjustments have the 29 | potential to change things drastically. While I have tried to perform each test 30 | as fairly and accurately as possible, it would be foolish to consider these 31 | results as scientific in any way. It should also be noted that my goal here was 32 | not necessarily to figure out how fast each framework could perform at its *most 33 | optimized* configuration (although built-in caching and other performance tweaks 34 | were usually enabled if the default configuration permitted it), but rather to 35 | see what a *minimal "out-of-the-box" experience* would look like. 36 | 37 | Additionally, nothing here is intended to make one web technology appear 38 | "better" than another. When it comes to using the right tool for the job, 39 | "faster" does not necessarily mean "better" (very few real world projects are 40 | going to depend solely on page request speeds). 41 | 42 | 43 | "Will you please add XYZ to the results?" 44 | ================================================================================ 45 | 46 | Maybe, if you can convince me that enough people would be interested in having 47 | it displayed next to heavyweights like Rails and Django. Fork the repository 48 | and submit a pull request under the `dev` branch with a test app in the same 49 | format as the other tests, and make sure you include your best sales pitch. 50 | Otherwise, I'd suggest you boot up the EC2 AMI and do your own benchmarking. 51 | 52 | 53 | Benchmark Results 54 | ================================================================================ 55 | 56 | Three basic tests were set up for each framework to run. Below are the results 57 | of each test in requests per second from highest (best performance) to lowest 58 | (worst performance). 59 | 60 | Remember: Comparing all of these framework tests side-by-side isn't really 61 | "fair" because they are all so different. Compiled languages (e.g. Go) are 62 | expected to be faster than scripted languages. Tests using an ORM (e.g. Rails, 63 | Django, Pyramid, etc.) are expected to be slower than tests using only a plain 64 | database library (e.g. Bottle, Flask, Sinatra, etc). 65 | 66 | Please see `the website`_ for more detailed information and a better breakdown 67 | of the tests (graphs included!). 68 | 69 | .. _the website: 70 | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 71 | 72 | 73 | The "Hello World" String Test 74 | -------------------------------------------------------------------------------- 75 | 76 | This test simply spits out a string response. There's no template or DB calls 77 | involved, so the level of processing should be minimal. 78 | 79 | ================= ======== 80 | Framework Reqs/sec 81 | ================= ======== 82 | web.go (Go r59) 3346 83 | Pyramid 1.2 3026 84 | Bottle 0.9.6 2825 85 | Django 1.3.1 2159 86 | Flask 0.7.2 2054 87 | Sinatra 1.2.6 1583 88 | CodeIgniter 2.0.3 929 89 | TG 2.1.2 839 90 | Yii 1.1.8 726 91 | Kohana 3.2.0 714 92 | Rails 3.1 711 93 | Symfony 2.0.1 273 94 | CakePHP 1.3.11 254 95 | ================= ======== 96 | 97 | 98 | The "Hello World" Template Test 99 | -------------------------------------------------------------------------------- 100 | 101 | This test prints out Lorem Ipsum via a template (thus engaging the framework's 102 | templating systems). 103 | 104 | ================= ======== 105 | Framework Reqs/sec 106 | ================= ======== 107 | Bottle 0.9.6 2417 108 | web.go (Go r59) 1959 109 | Flask 0.7.2 1918 110 | Pyramid 1.2 1650 111 | Sinatra 1.2.6 1329 112 | Django 1.3.1 1005 113 | CodeIgniter 2.0.3 884 114 | Kohana 3.2.0 675 115 | TG 2.1.2 663 116 | Rails 3.1 625 117 | Yii 1.1.8 548 118 | CakePHP 1.3.11 203 119 | Symfony 2.0.1 171 120 | ================= ======== 121 | 122 | 123 | The "Hello World" Template Test With DB Query 124 | -------------------------------------------------------------------------------- 125 | 126 | This test loads 5 rows of Lorem Ipsum from a SQLite DB (via the default ORM or 127 | a sqlite3 driver) and then prints them out through a template (thus engaging 128 | both the framework’s ORM/DB driver and the templating system). 129 | 130 | ================= ======== 131 | Framework Reqs/sec 132 | ================= ======== 133 | Bottle 0.9.6 1562 134 | Flask 0.7.2 1191 135 | Sinatra 1.2.6 982 136 | web.go (Go r59) 741 137 | Pyramid 1.2 555 138 | CodeIgniter 2.0.3 542 139 | Django 1.3.1 465 140 | Rails 3.1 463 141 | Kohana 3.2.0 423 142 | TG 2.1.2 298 143 | Yii 1.1.8 201 144 | CakePHP 1.3.11 193 145 | Symfony 2.0.1 113 146 | ================= ======== 147 | 148 | 149 | Test Platform Setup 150 | ================================================================================ 151 | 152 | All tests were performed on Amazon's EC2 with the following configuration: 153 | 154 | * ami-fbbf7892 m1.large ubuntu-images-us/ubuntu-lucid-10.04-amd64-server- 155 | 20110719.manifest.xml 156 | * As a "Large" instance, Amazon describes the resources as: 7.5 GB of memory, 4 157 | EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850 GB of 158 | local instance storage, 64-bit platform. 159 | * Apache 2.2.14 was used. (Yes, I know there are other options, but with 160 | Apache's market share I figured it would be a good baseline.) 161 | * Python 2.6.5 and mod_wsgi 2.8 (embedded mode) were used for the Python based 162 | tests. 163 | * Ruby 1.9.2p290 and Phusion Passenger 3.0.9 were used for the Ruby based tests. 164 | * PHP 5.3.2 (with APC enabled) was used for the PHP based tests. 165 | * ApacheBench was run with -n 10000 and -c 10 about 5-10 times each, and the 166 | "best guess average" was chosen. 167 | 168 | 169 | Most Recent Changes 170 | ================================================================================ 171 | 172 | 09/12/2011 173 | -------------------------------------------------------------------------------- 174 | 175 | * Updated Ubuntu LTS AMI (ami-fbbf7892 ubuntu-images-us/ubuntu-lucid-10.04- 176 | amd64-server-20110719.manifest.xml) 177 | * Rails 2.x and 3.0 were dropped in favor of Rails 3.1. 178 | * CakePHP 1.2 was dropped in favor of 1.3, but Symfony and Yii were added as 179 | they seem to have considerable market share. 180 | * Corrected faulty configuration of CakePHP's caching engine. 181 | 182 | See `CHANGELOG.rst`_ for more. 183 | 184 | .. _CHANGELOG.rst: http://github.com/seedifferently/the-great-web-framework- 185 | shootout/blob/master/CHANGELOG.rst 186 | -------------------------------------------------------------------------------- /bottle/README.rst: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | Bottle test code for The Great Web Framework Shootout 3 | ================================================================================ 4 | 5 | | Copyright: (c) 2012 Seth Davis 6 | | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 7 | 8 | 9 | Synopsis 10 | ================================================================================ 11 | 12 | This code was last tested using Bottle **v0.9.6** and will likely perform 13 | differently when using a different version. 14 | 15 | Please see `The Great Web Framework Shootout`_ for more information. 16 | 17 | .. _The Great Web Framework Shootout: 18 | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 19 | -------------------------------------------------------------------------------- /bottle/bottle_app.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sqlite3 3 | #from bottle import run 4 | from bottle import route 5 | from bottle import jinja2_template as template 6 | 7 | 8 | @route('/') 9 | def index(): 10 | return 'Hello World!' 11 | 12 | @route('/jinja_hello') 13 | def hello(): 14 | return template('templates/hello') 15 | 16 | @route('/jinja_sql') 17 | def hellodb(): 18 | db = sqlite3.connect(os.path.join(os.path.dirname(os.path.realpath(__file__))) + '/hello.db') 19 | 20 | rows = db.execute('select id, data from hello order by id asc') 21 | lipsum = [dict(id=row[0], data=row[1]) for row in rows.fetchall()] 22 | 23 | return template('templates/db', hello=lipsum) 24 | 25 | 26 | #if __name__ == '__main__': 27 | # from bottle import debug 28 | # debug(True) 29 | # run(host='localhost', port=8080) 30 | -------------------------------------------------------------------------------- /bottle/hello.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedifferently/the-great-web-framework-shootout/0425e9e446e91fcc587faeaa824ffdde2134ffa6/bottle/hello.db -------------------------------------------------------------------------------- /bottle/templates/db.tpl: -------------------------------------------------------------------------------- 1 | {% extends "templates/master.tpl" %} 2 | {% block content %} 3 |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 |{{ row['id'] }} | {{ row['data'] }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 | {# 6 |{{ k | escape }} | {{ v | escape }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | 3 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | 3 | -------------------------------------------------------------------------------- /cakephp/app/views/layouts/default.ctp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |Directory access is forbidden.
8 | 9 | 10 | -------------------------------------------------------------------------------- /codeigniter/application/hello.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedifferently/the-great-web-framework-shootout/0425e9e446e91fcc587faeaa824ffdde2134ffa6/codeigniter/application/hello.db -------------------------------------------------------------------------------- /codeigniter/application/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |Directory access is forbidden.
8 | 9 | 10 | -------------------------------------------------------------------------------- /codeigniter/application/models/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |Directory access is forbidden.
8 | 9 | 10 | -------------------------------------------------------------------------------- /codeigniter/application/views/hellodb.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
10 | 11 |id; ?> | data; ?> |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /codeigniter/application/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |Directory access is forbidden.
8 | 9 | 10 | -------------------------------------------------------------------------------- /django/HelloWorld/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedifferently/the-great-web-framework-shootout/0425e9e446e91fcc587faeaa824ffdde2134ffa6/django/HelloWorld/__init__.py -------------------------------------------------------------------------------- /django/HelloWorld/hello.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedifferently/the-great-web-framework-shootout/0425e9e446e91fcc587faeaa824ffdde2134ffa6/django/HelloWorld/hello.db -------------------------------------------------------------------------------- /django/HelloWorld/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from django.core.management import execute_manager 3 | import imp 4 | try: 5 | imp.find_module('settings') # Assumed to be in the same directory. 6 | except ImportError: 7 | import sys 8 | sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__) 9 | sys.exit(1) 10 | 11 | import settings 12 | 13 | if __name__ == "__main__": 14 | execute_manager(settings) 15 | -------------------------------------------------------------------------------- /django/HelloWorld/models/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /django/HelloWorld/models/hello.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | class Hello(models.Model): 4 | id = models.AutoField(primary_key=True) 5 | data = models.CharField('data', max_length=255) 6 | 7 | def __str__(self): 8 | return '%s, %s' % (self.id, self.data) 9 | 10 | class Meta: 11 | db_table = 'hello' 12 | -------------------------------------------------------------------------------- /django/HelloWorld/settings.py: -------------------------------------------------------------------------------- 1 | # Django settings for HelloWorld project. 2 | 3 | DEBUG = True 4 | TEMPLATE_DEBUG = DEBUG 5 | 6 | import os 7 | SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) 8 | 9 | ADMINS = ( 10 | # ('Your Name', 'your_email@example.com'), 11 | ) 12 | 13 | MANAGERS = ADMINS 14 | 15 | DATABASES = { 16 | 'default': { 17 | 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 18 | 'NAME': os.path.join(SITE_ROOT) + '/hello.db', # Or path to database file if using sqlite3. 19 | 'USER': '', # Not used with sqlite3. 20 | 'PASSWORD': '', # Not used with sqlite3. 21 | 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 22 | 'PORT': '', # Set to empty string for default. Not used with sqlite3. 23 | } 24 | } 25 | 26 | # Local time zone for this installation. Choices can be found here: 27 | # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 28 | # although not all choices may be available on all operating systems. 29 | # On Unix systems, a value of None will cause Django to use the same 30 | # timezone as the operating system. 31 | # If running in a Windows environment this must be set to the same as your 32 | # system time zone. 33 | TIME_ZONE = 'America/Chicago' 34 | 35 | # Language code for this installation. All choices can be found here: 36 | # http://www.i18nguy.com/unicode/language-identifiers.html 37 | LANGUAGE_CODE = 'en-us' 38 | 39 | SITE_ID = 1 40 | 41 | # If you set this to False, Django will make some optimizations so as not 42 | # to load the internationalization machinery. 43 | USE_I18N = False 44 | 45 | # If you set this to False, Django will not format dates, numbers and 46 | # calendars according to the current locale 47 | USE_L10N = False 48 | 49 | # Absolute filesystem path to the directory that will hold user-uploaded files. 50 | # Example: "/home/media/media.lawrence.com/media/" 51 | MEDIA_ROOT = '' 52 | 53 | # URL that handles the media served from MEDIA_ROOT. Make sure to use a 54 | # trailing slash. 55 | # Examples: "http://media.lawrence.com/media/", "http://example.com/media/" 56 | MEDIA_URL = '' 57 | 58 | # Absolute path to the directory static files should be collected to. 59 | # Don't put anything in this directory yourself; store your static files 60 | # in apps' "static/" subdirectories and in STATICFILES_DIRS. 61 | # Example: "/home/media/media.lawrence.com/static/" 62 | STATIC_ROOT = '' 63 | 64 | # URL prefix for static files. 65 | # Example: "http://media.lawrence.com/static/" 66 | STATIC_URL = '/static/' 67 | 68 | # URL prefix for admin static files -- CSS, JavaScript and images. 69 | # Make sure to use a trailing slash. 70 | # Examples: "http://foo.com/static/admin/", "/static/admin/". 71 | ADMIN_MEDIA_PREFIX = '/static/admin/' 72 | 73 | # Additional locations of static files 74 | STATICFILES_DIRS = ( 75 | # Put strings here, like "/home/html/static" or "C:/www/django/static". 76 | # Always use forward slashes, even on Windows. 77 | # Don't forget to use absolute paths, not relative paths. 78 | ) 79 | 80 | # List of finder classes that know how to find static files in 81 | # various locations. 82 | STATICFILES_FINDERS = ( 83 | 'django.contrib.staticfiles.finders.FileSystemFinder', 84 | 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 85 | # 'django.contrib.staticfiles.finders.DefaultStorageFinder', 86 | ) 87 | 88 | # Make this unique, and don't share it with anybody. 89 | SECRET_KEY = 'chisbsgu3b@stsmjbrpdxv-tzt&vpa*10ld4wq*oyx53qv#ry)' 90 | 91 | # List of callables that know how to import templates from various sources. 92 | TEMPLATE_LOADERS = ( 93 | 'django.template.loaders.filesystem.Loader', 94 | 'django.template.loaders.app_directories.Loader', 95 | # 'django.template.loaders.eggs.Loader', 96 | ) 97 | 98 | MIDDLEWARE_CLASSES = ( 99 | # 'django.middleware.common.CommonMiddleware', 100 | # 'django.contrib.sessions.middleware.SessionMiddleware', 101 | # 'django.middleware.csrf.CsrfViewMiddleware', 102 | # 'django.contrib.auth.middleware.AuthenticationMiddleware', 103 | # 'django.contrib.messages.middleware.MessageMiddleware', 104 | ) 105 | 106 | ROOT_URLCONF = 'urls' 107 | 108 | TEMPLATE_DIRS = ( 109 | # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 110 | # Always use forward slashes, even on Windows. 111 | # Don't forget to use absolute paths, not relative paths. 112 | os.path.join(SITE_ROOT) + '/templates' 113 | ) 114 | 115 | INSTALLED_APPS = ( 116 | # 'django.contrib.auth', 117 | # 'django.contrib.contenttypes', 118 | # 'django.contrib.sessions', 119 | # 'django.contrib.sites', 120 | # 'django.contrib.messages', 121 | # 'django.contrib.staticfiles', 122 | # Uncomment the next line to enable the admin: 123 | # 'django.contrib.admin', 124 | # Uncomment the next line to enable admin documentation: 125 | # 'django.contrib.admindocs', 126 | ) 127 | 128 | # A sample logging configuration. The only tangible logging 129 | # performed by this configuration is to send an email to 130 | # the site admins on every HTTP 500 error. 131 | # See http://docs.djangoproject.com/en/dev/topics/logging for 132 | # more details on how to customize your logging configuration. 133 | LOGGING = { 134 | 'version': 1, 135 | 'disable_existing_loggers': False, 136 | 'handlers': { 137 | 'mail_admins': { 138 | 'level': 'ERROR', 139 | 'class': 'django.utils.log.AdminEmailHandler' 140 | } 141 | }, 142 | 'loggers': { 143 | 'django.request': { 144 | 'handlers': ['mail_admins'], 145 | 'level': 'ERROR', 146 | 'propagate': True, 147 | }, 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /django/HelloWorld/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 |{{ row.id }} | {{ row.data }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /django/HelloWorld/templates/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedifferently/the-great-web-framework-shootout/0425e9e446e91fcc587faeaa824ffdde2134ffa6/django/HelloWorld/templates/index.html -------------------------------------------------------------------------------- /django/HelloWorld/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls.defaults import patterns, include, url 2 | 3 | # Uncomment the next two lines to enable the admin: 4 | # from django.contrib import admin 5 | # admin.autodiscover() 6 | 7 | urlpatterns = patterns('', 8 | # Examples: 9 | # url(r'^$', 'HelloWorld.views.home', name='home'), 10 | # url(r'^HelloWorld/', include('HelloWorld.foo.urls')), 11 | 12 | # Uncomment the admin/doc line below to enable admin documentation: 13 | # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 14 | 15 | # Uncomment the next line to enable the admin: 16 | # url(r'^admin/', include(admin.site.urls)), 17 | 18 | (r'^hello$', 'views.index'), 19 | (r'^dtl_hello$', 'views.dtl_hello'), 20 | (r'^dtl_sql$', 'views.dtl_sql'), 21 | ) 22 | -------------------------------------------------------------------------------- /django/HelloWorld/views.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponse 2 | from django.shortcuts import render_to_response, get_object_or_404 3 | from models.hello import Hello 4 | 5 | def index(request): 6 | return HttpResponse("Hello World!") 7 | 8 | def dtl_hello(request): 9 | return render_to_response('hellos.html') 10 | 11 | def dtl_sql(request): 12 | data = Hello.objects.all() 13 | return render_to_response('hellodb.html', {'data': data}) 14 | -------------------------------------------------------------------------------- /django/README.rst: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | Django test code for The Great Web Framework Shootout 3 | ================================================================================ 4 | 5 | | Copyright: (c) 2012 Seth Davis 6 | | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 7 | 8 | 9 | Synopsis 10 | ================================================================================ 11 | 12 | This code was last tested using Django **v1.3.1** and will likely perform 13 | differently when using a different version. 14 | 15 | Please see `The Great Web Framework Shootout`_ for more information. 16 | 17 | .. _The Great Web Framework Shootout: 18 | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 19 | -------------------------------------------------------------------------------- /django/wsgi.wsgi: -------------------------------------------------------------------------------- 1 | import os, sys 2 | 3 | # override stdout 4 | sys.stdout = sys.stderr 5 | 6 | # import site directives for virtualenv 7 | import site 8 | 9 | ALLDIRS = ['/var/www/venv_django/lib/python2.6/site-packages'] 10 | 11 | # Remember original sys.path. 12 | prev_sys_path = list(sys.path) 13 | 14 | # Add each new site-packages directory. 15 | for directory in ALLDIRS: 16 | site.addsitedir(directory) 17 | 18 | # Reorder sys.path so new directories at the front. 19 | new_sys_path = [] 20 | for item in list(sys.path): 21 | if item not in prev_sys_path: 22 | new_sys_path.append(item) 23 | sys.path.remove(item) 24 | sys.path[:0] = new_sys_path 25 | 26 | # append project root directory path 27 | path = '/var/www/django_13/HelloWorld' 28 | if path not in sys.path: 29 | sys.path.append(path) 30 | 31 | os.environ['PYTHON_EGG_CACHE'] = '/var/www/.python-eggs' 32 | os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 33 | 34 | # loadapp 35 | import django.core.handlers.wsgi 36 | application = django.core.handlers.wsgi.WSGIHandler() 37 | -------------------------------------------------------------------------------- /flask/README.rst: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | Flask test code for The Great Web Framework Shootout 3 | ================================================================================ 4 | 5 | | Copyright: (c) 2012 Seth Davis 6 | | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 7 | 8 | 9 | Synopsis 10 | ================================================================================ 11 | 12 | This code was last tested using Flask **v0.7.2** and will likely perform 13 | differently when using a different version. 14 | 15 | Please see `The Great Web Framework Shootout`_ for more information. 16 | 17 | .. _The Great Web Framework Shootout: 18 | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 19 | -------------------------------------------------------------------------------- /flask/flask_app.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sqlite3 3 | from flask import Flask, render_template 4 | app = Flask(__name__) 5 | 6 | 7 | @app.route('/') 8 | def index(): 9 | return 'Hello World!' 10 | 11 | @app.route('/jinja_hello') 12 | def hello(): 13 | return render_template('hello.html') 14 | 15 | @app.route('/jinja_sql') 16 | def hellodb(): 17 | db = sqlite3.connect(os.path.join(os.path.dirname(os.path.realpath(__file__))) + '/hello.db') 18 | 19 | rows = db.execute('select id, data from hello order by id asc') 20 | lipsum = [dict(id=row[0], data=row[1]) for row in rows.fetchall()] 21 | 22 | return render_template('db.html', hello=lipsum) 23 | 24 | 25 | if __name__ == '__main__': 26 | app.run(debug=True) 27 | -------------------------------------------------------------------------------- /flask/hello.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedifferently/the-great-web-framework-shootout/0425e9e446e91fcc587faeaa824ffdde2134ffa6/flask/hello.db -------------------------------------------------------------------------------- /flask/templates/db.html: -------------------------------------------------------------------------------- 1 | {% extends "master.html" %} 2 | {% block content %} 3 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 |{{ row['id'] }} | {{ row['data'] }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 | {# 6 |{{ k | escape }} | {{ v | escape }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | 3 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | 3 |id; ?> | data;?> |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | -------------------------------------------------------------------------------- /kohana/application/views/master.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 |{{ row.id }} | {{ row.data }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 | {# 6 |{{ k | escape }} | {{ v | escape }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | 3 |<%=h row.id %> | <%=h row.data %> |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | -------------------------------------------------------------------------------- /rails/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | 3 |<%= row[0] %> | <%= row[1] %> |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | -------------------------------------------------------------------------------- /sinatra/views/layout.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /symfony/src/Acme/HelloBundle/Resources/views/Default/hellodb.html.twig: -------------------------------------------------------------------------------- 1 | {% extends '::base.html.twig' %} 2 | 3 | {% block body %} 4 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
5 |{{ row.id }} | {{ row.data }} |
We're sorry but we weren't able to process " 26 | " this request.
") 27 | values = dict(prefix=request.environ.get('SCRIPT_NAME', ''), 28 | code=request.params.get('code', resp.status_int), 29 | message=request.params.get('message', default_message)) 30 | return values 31 | -------------------------------------------------------------------------------- /turbogears/HelloWorld/helloworld/controllers/root.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Main Controller""" 3 | 4 | from tg import expose 5 | 6 | from helloworld.lib.base import BaseController 7 | from helloworld.model import DBSession, metadata 8 | from helloworld.controllers.error import ErrorController 9 | from helloworld import model 10 | 11 | __all__ = ['RootController'] 12 | 13 | 14 | class RootController(BaseController): 15 | 16 | # RAW STRING TEST 17 | @expose() 18 | def index(self): 19 | """Handle the front-page.""" 20 | return 'Hello World!' 21 | 22 | 23 | # TEMPLATE TESTS 24 | # @expose('genshi:helloworld.templates.hello') 25 | # def genshi_hello(self): 26 | # return dict() 27 | 28 | # @expose('mako:hello.mak') 29 | # def mako_hello(self): 30 | # return dict() 31 | 32 | @expose('jinja:hello.jinja') 33 | def jinja_hello(self): 34 | return dict() 35 | 36 | 37 | # DATABASE TESTS 38 | @expose() 39 | def raw_sql(self): 40 | output = [] 41 | hello = DBSession.query(model.Hello).all() 42 | for row in hello: 43 | output.append('%s - %s' % (row.id, row.data)) 44 | return '\n'.join(output) 45 | 46 | # @expose('genshi:helloworld.templates.db') 47 | # def genshi_sql(self): 48 | # hello = DBSession.query(model.Hello).all() 49 | # return dict(hello=hello) 50 | 51 | # @expose('mako:db.mak') 52 | # def mako_sql(self): 53 | # hello = DBSession.query(model.Hello).all() 54 | # return dict(hello=hello) 55 | 56 | @expose('jinja:db.jinja') 57 | def jinja_sql(self): 58 | hello = DBSession.query(model.Hello).all() 59 | return dict(hello=hello) 60 | 61 | 62 | -------------------------------------------------------------------------------- /turbogears/HelloWorld/helloworld/controllers/secure.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Sample controller with all its actions protected.""" 3 | 4 | # This controller is only used when you activate auth. You can safely remove 5 | # this file from your project. 6 | -------------------------------------------------------------------------------- /turbogears/HelloWorld/helloworld/controllers/template.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Fallback controller.""" 3 | 4 | from helloworld.lib.base import BaseController 5 | 6 | __all__ = ['TemplateController'] 7 | 8 | 9 | class TemplateController(BaseController): 10 | """ 11 | The fallback controller for HelloWorld. 12 | 13 | By default, the final controller tried to fulfill the request 14 | when no other routes match. It may be used to display a template 15 | when all else fails, e.g.:: 16 | 17 | def view(self, url): 18 | return render('/%s' % url) 19 | 20 | Or if you're using Mako and want to explicitly send a 404 (Not 21 | Found) response code when the requested template doesn't exist:: 22 | 23 | import mako.exceptions 24 | 25 | def view(self, url): 26 | try: 27 | return render('/%s' % url) 28 | except mako.exceptions.TopLevelLookupException: 29 | abort(404) 30 | 31 | """ 32 | 33 | def view(self, url): 34 | """Abort the request with a 404 HTTP status code.""" 35 | abort(404) 36 | -------------------------------------------------------------------------------- /turbogears/HelloWorld/helloworld/i18n/ru/LC_MESSAGES/helloworld.po: -------------------------------------------------------------------------------- 1 | # Russian translations for ${package}. 2 | # Copyright (C) 2008 ORGANIZATION 3 | # This file is distributed under the same license as the ${package} project. 4 | # FIRST AUTHORLorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
8 | 9 |${row.id} | ${row.data} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 |{{ row.id }} | {{ row.data }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 |${ row.id } | ${ row.data } |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
8 | 9 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /turbogears/HelloWorld/helloworld/templates/hello.jinja: -------------------------------------------------------------------------------- 1 | {% extends "master.jinja" %} 2 | {% block content %} 3 |Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 | {# 6 |{{ k | escape }} | {{ v | escape }} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
4 | 5 | ##${ k | h } | ${ v | h } |
a | 44 |1 | 45 |
b | 48 |2 | 49 |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | 3 |1 | {{1}} |
2 | {{2}} |
3 | {{3}} |
4 | {{4}} |
5 | {{5}} |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
2 | -------------------------------------------------------------------------------- /yii/README.rst: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | Yii test code for The Great Web Framework Shootout 3 | ================================================================================ 4 | 5 | | Copyright: (c) 2012 Seth Davis 6 | | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 7 | 8 | 9 | Synopsis 10 | ================================================================================ 11 | 12 | This code was last tested using Yii **v1.1.8** and will likely perform 13 | differently when using a different version. 14 | 15 | Please see `The Great Web Framework Shootout`_ for more information. 16 | 17 | .. _The Great Web Framework Shootout: 18 | http://blog.curiasolutions.com/the-great-web-framework-shootout/ 19 | -------------------------------------------------------------------------------- /yii/protected/config/main.php: -------------------------------------------------------------------------------- 1 | dirname(__FILE__).DIRECTORY_SEPARATOR.'..', 10 | 'name'=>'My Web Application', 11 | 12 | // preloading 'log' component 13 | 'preload'=>array('log'), 14 | 15 | // autoloading model and component classes 16 | 'import'=>array( 17 | 'application.models.*', 18 | 'application.components.*', 19 | ), 20 | 21 | 'modules'=>array( 22 | // uncomment the following to enable the Gii tool 23 | /* 24 | 'gii'=>array( 25 | 'class'=>'system.gii.GiiModule', 26 | 'password'=>'Enter Your Password Here', 27 | // If removed, Gii defaults to localhost only. Edit carefully to taste. 28 | 'ipFilters'=>array('127.0.0.1','::1'), 29 | ), 30 | */ 31 | ), 32 | 33 | // application components 34 | 'components'=>array( 35 | 'user'=>array( 36 | // enable cookie-based authentication 37 | 'allowAutoLogin'=>true, 38 | ), 39 | // uncomment the following to enable URLs in path-format 40 | /* 41 | 'urlManager'=>array( 42 | 'urlFormat'=>'path', 43 | 'rules'=>array( 44 | 'Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
3 | 4 |id; ?> | data;?> |
Lorem ipsum dolor sit amet, consecteteur adipiscing elit nisi ultricies. Condimentum vel, at augue nibh sed. Diam praesent metus ut eros, sem penatibus. Pellentesque. Fusce odio posuere litora non integer habitant proin. Metus accumsan nibh facilisis nostra lobortis cum diam tellus. Malesuada nostra a volutpat pede primis congue nisl feugiat in fermentum. Orci in hymenaeos. Eni tempus mi mollis lacinia orci interdum lacus. Sollicitudin aliquet, etiam. Ac. Mi, nullam ligula, tristique penatibus nisi eros nisl pede pharetra congue, aptent nulla, rhoncus tellus morbi, ornare. Magna condimentum erat turpis. Fusce arcu ve suscipit nisi phasellus rutrum a dictumst leo, laoreet dui, ultricies platea. Porta venenatis fringilla vestibulum arcu etiam condimentum non.
3 | endContent(); ?> 4 | -------------------------------------------------------------------------------- /yii/protected/views/layouts/main.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |