I have updated the online book, the content, not the app, with my most recent edits. Not everything is documented yet but lot more stuff is. The book is about 10% bigger already. When done should be 20-30% bigger than the 3rd edition.
Here is a list of new features that are documented in 3.1 but not in 3.0 [x] and features that are not yet documented [ ]: [x] LICENSE CHANGE FROM GPLv2 to LGPLv3 [x] new URL syntax [x] URL(...,scheme=,host=,port=) [x] URL(...,user_signature=True), LOAD(...,user_signature=True) [x] new T behavior [x] db(db.table) equivalent to db(db.table.id>0) [x] IS_DECIMAL_IN_RANGE and IS_FLOAT_IN_RANGE support dot="," (dot="." is default) [x] on_failed_authorization can be a function [x] SQLFORM.process() [x] SQLFORM.accepts(detect_record_change).record_changed [x] session.connect(separate=True) to handle many session files [x] support for count(distinct=...) [x] IS_MATCH(...,strict=True) [x] No more Auth(globals(),db), just Auth(db). Same for Crud and Service. [x] efficient db(...).isempty() [x] "from gluon import *" [x] from mymodule import * [x] request.is_local [x] request.is_https [x] login_methods/loginza.py [x] DAL(...,migrate_enabled=False) to disable all migrations [x] DAL(...,fake_migrate_all=True) to rebuild all corrupted metadata [x] messages in validators have default internationalization [x] web2py.py -J for running cron [x] bpython shell support, thanks Arun [x] response.toolbar() [x] db._timings contains database query timing info [x] new represent syntax [x] COL and COLGROUP helpers [x] auth.settings.login_after_registration=True [x] SQLFORM(...,separator=': ') now customizable [x] combined expressions print db.data.body.len().sum() [x] request.utcnow [x] web2py_ajax.html is more modular, thanks Anthony [x] current [x] dal expression.coalesce(*options) [x] response.include_meta() and response.include_files() [x] dal auto-reconnect on time-out connections [x] DAL(...,adapter_arg={}) allows support for alternate drivers [x] new simpler API gluon.contrib.AuthorizeNet.procss(...) [x] upgraded to anytime [x] new alterante syntax for inner joins: db(...).select(join=...) [x] new syntax rows[i]('tablename.fieldname') [x] new DAL (complete rewrite of the web2py DAL is more modular) [x] new query syntax field.contains(list,all=True or False) [x] validate_and_update, thanks Bruno [x] web2py HTTP responses now set: "X-Powered-By: web2py", thanks Bruno [x] auth.settings.extra_fields['auth_user'].append(Field('country')) [x] A(...,callback=URL(...),larget='id') does Ajax [x] support for A(name,callback=url,target='id',delete='tr') [x] DAL 'request_tenant' fields are special, the altomatically filer all records based on their default value. [x] db._common_fields.append(Field('owner')) allows to add fields to ALL tables [x] CAS with v2 support [x] all applications can delegate to login to external provider Auth(...,cas_provider='http://.../other_app/default/user/cas') [x] isapiwsgihandler.py [x] setup-web2py-nginx-uwsgi-ubuntu.sh [x] DAL(..,auto_import=True) automatically imports tables from metadata without need to db.define_table(...)s. [x] field.represent = lambda value,record: .... (record is optional) [x] gluon/contrib/redis_cache.py [x] gluon/contrib/simplejsonrpc.py [x] expire_sessions.py respects expiration time, thanks iceberg [x] auth.settings.cas_actions [~] auth.signature (experimental) -> needs more in auth [~] generic views -> may need more info ## admin [ ] admin allow ``DEMO_MODE=True`` and ``FILTER_APPS=['welcome']`` [ ] new admin layout (thanks Branko Vukelic) [ ] new admin wizard [ ] wizard can download plugins [ ] better mercual admin allows list of files, versions and retrieve [ ] admin has MULTI_USER_MODE (admin/models/0.py) ## welcome and examples [ ] new Welcome app (thanks Martin Mulone) [ ] new layout for examples, thanks Bruno and Martin [ ] cleaner/simpler welcome/models/db.py and welcome layout.html [ ] moderniz 1.17 [ ] experimental REST API ## table and grids [ ] SQLTABLE? [ ] SQLTABLE(...,headers='labels') thanks Bruno [ ] new SQLFORM.grid and SQLFORM.smartgrid [ ] support for natural language queries (english only) [ ] support for computed columns and additional links in SQLFORM.grid ## other [ ] new pip installer (Chris Steel) [ ] new app level logging with logging.conf (Jonathan) [ ] Polymmodel support on GAE [ ] pyfpdf (Mariano) [ ] auth.impersonate [ ] conditional models [ ] DAL now allows circular table definitions [ ] scripts/access.wsgi and apache+mod_wsgi [ ] scripts/make_min_web2py.py [ ] new cpdb.py, thanks Mart [ ] request.user_agent(), thanks Ross [ ] x509 support (needs rocket upgrade, thanks Michele) [ ] detection of mobile devices and @mobilize helper ## experimental features [ ] experimental gluon/scheduler.py (experimental) [ ] db.table.field=Field.Lazy(...) (experimental) [ ] web2py comet via gluon/contrib/comet_messaging.py (html5 websockets) [ ] experimental cubrid database support