.. _key_concepts_intermediate_tutorial: ********************* Intermediate Concepts ********************* **Last Updated:** October 2019 This tutorial introduces intermediate concepts for Tethys developers. The topics covered include: * HTML Forms and User Input * Handling Form Submissions in Controllers * Form Validation Pattern * Introduction to the Model * File IO and Workspaces * Intermediate Template Gizmos * Review of Model View Controller * Spatial Inputs in Forms * Rendering Spatial Data on the Map View Gizmo 0. Start From Beginner Solution (Optional) ========================================== If you wish to use the beginner solution of the last tutorial as a starting point: .. parsed-literal:: git clone https://github.com/tethysplatform/tethysapp-dam_inventory.git cd tethysapp-dam_inventory git checkout -b beginner-solution beginner-|version| 1. Forms and User Input ======================= HTML forms are the primary mechanism for obtaining input from users of your app. In the next few sections, you'll learn how to create forms in the template and process the data submitted through the form in the controller. For this example, we'll create a form for adding new dams to the inventory. a. Add a form to the Add Dam page by modifying the ``/templates/dam_inventory/add_dam.html`` template as follows: :: {% extends "dam_inventory/base.html" %} {% load tethys_gizmos %} {% block app_content %}