I use it in production on Google Appengine for www.crowdgrader.org.
I store data as follows:
The core metadata, where I need ACID, is stored in Google Cloud SQL, which is working very well for me. For big text fields, I store in Google Cloud SQL the key, and in the Datastore the key-value.
The text typed by users is stored in the Google Datastore, see above, with the key stored in Cloud SQL.
File uploads go in the blobstore.
I am slowly migrating more storage to the Datastore, to get more write bandwidth for things that do not require complex queries and can deal with a bit of eventual consistency.
I am very happy about web2py + appengine + Google Cloud SQL + Datastore + Blobstore.
I am evaluating web frameworks for a long time now. I wrote my own (not open) frameworks in Perl and in PHP. Well, PHP has a builtin deadend and the whole infrastructure is still quite poor, but I did not want to go back to Perl, so I checked Python and the Python Web Frameworks like Django, Turbogears, Pylon and web2py. There are many things to think about, if you want to choose a codestack that is not your own and you will often scratch your head because there is still no "right way" to program things. However, web2py is my current favourite, because the author, despite beeing a "real programmer", keeps things easy! Just look at the comparison on web2py site - I was wondering why python frameworks like django or turbogears had to introduce such redundance and complicated syntax in their code - web2py shows, that it IS in fact possible to keep your syntax clean and easy!
@Armin: could you please specify you criticism? Where exactly do you see web2py "bypassing Python semantics"? I can not understand, what you mean. I must admit that I am not that deep into python right now, but I see no problem with the web2py code - in fact, I think it is brilliant and one of the best frameworks available today.
You are welcome to ask the same question on the google group. You will find more than 500 users there and some of them are development companies building projects for their clients.
My impression is that most of them use postgresql (that's what I do to) and some others use the Google App Engine. In fact web2py is the only framework that allows you to write code once and the same code will run on GAE, SQLite, MySQL, PostgreSQL, Oracle, MSSQL and FireBird (with the limitations imposed by GAE).
You can find the Reddish (reddit clone) appliance with source code for GAE here
Here you can find links to some productions app. Some are running on GAE.
@Armin:
Nothing is wrong with Django or Pylons. They are excellent frameworks. I have used them before developing web2py. There are a few things you can do with web2py that you cannot with them. For example:
web2py does distributed transactions with Postgresql, Armin requested this feature.
the Django ORM does not do migrations natively (see South), web2py does.
the Django ORM does not allow partial sums (count(field)) and group by, web2py does.
web2py can connect to multiple databases at once, Django and Pylons need to be hacked to do that, and
web2py has a configuration file at the app, not at the project level, like them.
webp2y logs all tracebacks server side for the administrator, Django and Pylons do not.
web2py programs often run on GAE unmodified.
web2py has built-in xmlrpc web services.
web2py comes with jQuery.
There are many things that web2py does better (using a more coherent API) and faster (processing templates and generating SQL for example). web2py is also very compact (all modules fit in 265K bytes) and therefore it is much easier to maintain than those competing projects.
You only have to learn Python and 81 new function/classes (50 of which have the same names and attributes as corresponding HTML tags, BR, DIV, SPAN, etc. and 19 are validators, IS_IN_SET, IS_INT_IN_RANGE, etc.).
Anyway, the most important issue is that web2py is easier than Django, Pylons, PHP and Rails.
You will also notice that web2py is hosted on both Google Code and Launchpad and there are not open tickets. All past issues have been resolved in less than 24 hours.
You can also check on the google mailing list that all threads (10056 messages today) ended up with an answer from me or one of the other developers within 24 hours.
You can find a book on web2py on Amazon.
Armin, I know you are the developer of Jinja. I like Jinja but have different design philosophies. Both Django and Jinja define their own template languages (and Jinja in particular has excellent documentation) but I do prefer to use pure Python in templates so that my users do no need to learn a template language at all. I am well aware of the pros and cons of each approach. Let's the users decide what they prefer. No need to criticize each other.
@Andre: db.table.field refers to the field object. 'table.field' is a field name. You can always pass a field object when a field name is required because str(db.table.field) is 'table.field'. The only case you are required to use a string instead of an object is when you need to reference by name a field that has not already been defined... perhaps we should move this discussion to the proper place. ;-)
I hope you will decide to give web2py a try and, whether you like it or not, I would love to hear your opinion.
I started using web2py about 6 month ago. I choose it, because I wanted to move from PHP to Python, to have a more object-oriented approch because of the language featrues of python.
The all-in-one approach of web2py is really amazing and makes the start very fast.
As a former symfony user I soon started to miss Components and Forms that aren't dependend on table structure.
Just with a simple registration form, I could not find a way to do the Form DRY. For me the real bugger was the form validation. I forgot the details, but I ended up with having form validation in the forms itself. Because some thing just didn't work else.
Also the naming concept of capitalised words with that lot of repeated chars is just not my thing.
Sometimes the names have to be in quotes, sometimes not ... and if I looked at the examples or sites already made with web2py, I really didn't see that big step forward from using php.
I recommend you: Look if web2py works for you. It would be nice, because the community and especially massimo (the creator) are very helpful and nice.
Also you have a much quicker start, than with django, easier deployment and less hassle if you change your database models.
I have been evaluating web frameworks for sometime now. I prefer web2py because it's easy to follow, compact yet powerful.
I use it in production on Google Appengine for www.crowdgrader.org. I store data as follows:
I am slowly migrating more storage to the Datastore, to get more write bandwidth for things that do not require complex queries and can deal with a bit of eventual consistency.
I am very happy about web2py + appengine + Google Cloud SQL + Datastore + Blobstore.
I am evaluating web frameworks for a long time now. I wrote my own (not open) frameworks in Perl and in PHP. Well, PHP has a builtin deadend and the whole infrastructure is still quite poor, but I did not want to go back to Perl, so I checked Python and the Python Web Frameworks like Django, Turbogears, Pylon and web2py. There are many things to think about, if you want to choose a codestack that is not your own and you will often scratch your head because there is still no "right way" to program things. However, web2py is my current favourite, because the author, despite beeing a "real programmer", keeps things easy! Just look at the comparison on web2py site - I was wondering why python frameworks like django or turbogears had to introduce such redundance and complicated syntax in their code - web2py shows, that it IS in fact possible to keep your syntax clean and easy!
@Armin: could you please specify you criticism? Where exactly do you see web2py "bypassing Python semantics"? I can not understand, what you mean. I must admit that I am not that deep into python right now, but I see no problem with the web2py code - in fact, I think it is brilliant and one of the best frameworks available today.
You are welcome to ask the same question on the google group. You will find more than 500 users there and some of them are development companies building projects for their clients.
My impression is that most of them use postgresql (that's what I do to) and some others use the Google App Engine. In fact web2py is the only framework that allows you to write code once and the same code will run on GAE, SQLite, MySQL, PostgreSQL, Oracle, MSSQL and FireBird (with the limitations imposed by GAE).
You can find the Reddish (reddit clone) appliance with source code for GAE here
Here you can find links to some productions app. Some are running on GAE.
@Armin:
Nothing is wrong with Django or Pylons. They are excellent frameworks. I have used them before developing web2py. There are a few things you can do with web2py that you cannot with them. For example:
Django andPylons need to be hacked to do that, andThere are many things that web2py does better (using a more coherent API) and faster (processing templates and generating SQL for example). web2py is also very compact (all modules fit in 265K bytes) and therefore it is much easier to maintain than those competing projects.
You only have to learn Python and 81 new function/classes (50 of which have the same names and attributes as corresponding HTML tags,
BR
,DIV
,SPAN
, etc. and 19 are validators,IS_IN_SET
,IS_INT_IN_RANGE
, etc.).Anyway, the most important issue is that web2py is easier than Django, Pylons, PHP and Rails.
You will also notice that web2py is hosted on both Google Code and Launchpad and there are not open tickets. All past issues have been resolved in less than 24 hours.
You can also check on the google mailing list that all threads (10056 messages today) ended up with an answer from me or one of the other developers within 24 hours.
You can find a book on web2py on Amazon.
Armin, I know you are the developer of Jinja. I like Jinja but have different design philosophies. Both Django and Jinja define their own template languages (and Jinja in particular has excellent documentation) but I do prefer to use pure Python in templates so that my users do no need to learn a template language at all. I am well aware of the pros and cons of each approach. Let's the users decide what they prefer. No need to criticize each other.
@Andre: db.table.field refers to the field object. 'table.field' is a field name. You can always pass a field object when a field name is required because str(db.table.field) is 'table.field'. The only case you are required to use a string instead of an object is when you need to reference by name a field that has not already been defined... perhaps we should move this discussion to the proper place. ;-)
I hope you will decide to give web2py a try and, whether you like it or not, I would love to hear your opinion.
I started using web2py about 6 month ago. I choose it, because I wanted to move from PHP to Python, to have a more object-oriented approch because of the language featrues of python.
The all-in-one approach of web2py is really amazing and makes the start very fast.
As a former symfony user I soon started to miss Components and Forms that aren't dependend on table structure.
Just with a simple registration form, I could not find a way to do the Form DRY. For me the real bugger was the form validation. I forgot the details, but I ended up with having form validation in the forms itself. Because some thing just didn't work else.
Also the naming concept of capitalised words with that lot of repeated chars is just not my thing.
Sometimes the names have to be in quotes, sometimes not ... and if I looked at the examples or sites already made with web2py, I really didn't see that big step forward from using php.
I recommend you: Look if web2py works for you. It would be nice, because the community and especially massimo (the creator) are very helpful and nice.
Also you have a much quicker start, than with django, easier deployment and less hassle if you change your database models.
There are some users listed here: http://mdp.cti.depaul.edu/who.