Table of Contents
Preface
Chapter 1: Choosing Your Tools
Chapter 2: Creating a Simple Spreadsheet
Chapter 3: Tasklist I: Persistence
Chapter 4: Tasklist II: Databases and AJAX
Chapter 5: Entities and Relations
Chapter 6: Building a Wiki
Chapter 7: Refactoring Code for Reuse
Chapter 8: Managing Customer Relations
Chapter 9: Creating Full-Fledged Webapps: Implementing Instances
Chapter 10: Customizing the CRM Application
Appendix A: References to Resources
Appendix B: Pop Quiz Answers
Index
- Chapter 1: Choosing Your Tools
- Identifying the components of a web application
- Time for action – getting an overview of a web application
- Choosing suitable tools
- Time for action – choosing a delivery framework, also known as web server
- Time for action – choosing a server-side scripting language
- Time for action – choosing a database engine
- Time for action – deciding on object relational mappers
- Time for action – choosing a presentation framework
- Designing for maintainability and usability
- Testing
- Time for action – choosing a test framework
- Version management
- Usability
- Good looking – adhering to common GUI paradigms
- Themable
- Cross-browser compatible
- Cross-platform compatible
- Maintainability
- Standards compliant
- Security
- Reliable
- Robust
- Access control and authentication
- Confidentiality
- Integrity
- A final word on security
- Help, I am confused!
- Time for action – maintaining overview
- Summary
- Chapter 2: Creating a Simple Spreadsheet
- Python 3
- Time for action – installing Python 3 CherryPy
- Time for action – installing CherryPy
- Installing jQuery and jQuery UI
- Serving an application
- Time for action – serving a dummy application
- Time for action – serving HTML as dynamic content
- Who serves what: an overview
- HTML: separating form and content
- Time for action – a unit convertor
- HTML: form-based interaction
- JavaScript: using jQuery UI widgets
- Time for action – conversion using unitconverter.js
- jQuery selectors
- CSS: applying a jQuery UI theme to other elements
- Time for action – converting a unit convertor into a plugin
- JavaScript: creating a jQuery UI plugin
- Designing a spreadsheet application
- Time for action – serving a spreadsheet application
- HTML: keeping it simple
- JavaScript: creating a spreadsheet plugin
- The missing parts
- Summary
- Chapter 3: Tasklist I: Persistence
- Designing a tasklist application
- Time for action – creating a logon screen
- Serving a logon screen
- Setting up a session
- Expiring a session
- Designing a task list
- Time for action – running tasklist.py
- Python: the task module
- Time for action – implementing the task module
- Adding new tasks
- Deleting a task
- JavaScript: tasklist.js
- Time for action – styling the buttons
- JavaScript: tooltip.js
- Time for action – implementing inline labels
- CSS: tasklist.css
- Summary
- Chapter 4: Tasklist II: Databases and AJAX
- The advantages of a database compared to a filesystem
- Choosing a database engine
- Database-driven authentication
- Time for action – authentication using a database
- Tasklist II – storing tasks in a database
- Improving interactivity with AJAX
- Time for action – getting the time with AJAX
- Redesigning the Tasklist application
- Database design
- Time for action – creating the task database
- Time for action – retrieving information with select statements
- TaskDB – interfacing with the database
- Time for action – connecting to the database
- Time for action – storing and retrieving information
- Time for action – updating and deleting information
- Testing
- Time for action – testing factorial.py
- Now what have we gained?
- Time for action – writing unit tests for tasklistdb.py
- Designing for AJAX
- Click handlers
- The application
- Time for action – putting it all together
- Have a go hero – refreshing the itemlist on a regular basis
- Summary
- Chapter 5: Entities and Relations
- Designing a book database
- The Entity class
- Time for action – using the Entity class
- Time for action – creating instances
- The Relation class
- Time for action – using the Relation class
- Relation instances
- Time for action – defining the Books database
- The delivery layer
- Time for action – designing the delivery layer
- Time for action – adding a new book
- Auto completion
- Time for action – using input fields with auto completion
- The presentation layer
- Time for action – using an enhanced presentation layer
- Summary
- Chapter 6: Building a Wiki
- The data layer
- Time for action – designing the wiki data model
- The delivery layer
- Time for action – implementing the opening screen
- The structural components
- The application methods
- Time for action – implementing a wiki topic screen
- Time for action – editing wiki topics
- Additional functionality
- Time for action – selecting an image
- Time for action – implementing a tag cloud
- Time for action – searching for words
- The importance of input validation
- Time for action – scrubbing your content
- Time for action – rendering content
- Summary
- Chapter 7: Refactoring Code for Reuse
- Time for action – taking a critical look
- Refactoring
- Time for action – defining new entities: how it should look
- Metaclasses
- Time for action – using metaclasses
- MetaEntity and AbstractEntity classes
- Time for action – implementing the MetaEntity and AbstractEntity classes
- Relations
- Time for action – defining new relations: how it should look
- Implementing the MetaRelation and AbstractRelation classes
- Adding new methods to existing classes
- Browsing lists of entities
- Time for action – using a table-based Entity browser
- Time for action – examining the HTML markup
- Caching
- The books application revisited
- Time for action – creating a books application, take two
- Summary
- Chapter 8: Managing Customer Relations
- A critical review
- Designing a Customer Relationship Management application
- Time for action – implementing a basic CRM
- Adding and editing values
- Time for action – adding an instance
- Time for action – editing an instance
- Adding relations
- Picklists
- Time for action – implementing picklists
- Summary
- Chapter 9: Creating Full-Fledged Webapps: Implementing Instances
- Even more relations
- Time for action – showing one-to-many relationships
- Time for action – adapting MetaRelation
- Time for action – enhancing Display
- Time for action – enhancing Browse
- Access control
- Time for action – implementing access control
- Role-based access control
- Time for action – implementing role-based access control
- Summary
- Chapter 10: Customizing the CRM Application
- Time for action – sorting
- Time for action – filtering
- Customization
- Time for action – customizing entity displays
- Time for action – customizing entity lists
- Time for action – adding a delete button
- Summary
- Appendix A: References to Resources
- Good old offline reference books
- Additional websites, wikis, and blogs
- Appendix B: Pop Quiz Answers
- Chapter 2, Creating a Simple Spreadsheet
- Chapter 3, Tasklist I: Persistence
- Chapter 4, Tasklist II: Databases and AJAX
- Chapter 5, Entities and Relations
- Chapter 6, Building a Wiki