Web-Applications: TurboGears II BCHB Lecture 26 12/7/2015BCHB Edwards
12/7/2015BCHB Edwards2 Last time… We made the empty HoyaTaxa website and learned how to make minor changes, and send dynamic content to template. We added a “taxa” information page with: Clickable Parent link (Variable number of) clickable Children links (Variable number of) names (other than sci name) Taxonomic lineage
12/7/2015BCHB Edwards3 Start web-app and check Check that the web-application is working... In the class Command-Line shell: ~]$ cd HoyaTaxa HoyaTaxa]$ start-hoyataxa.py Start a web-browser and access by urls:
12/7/2015BCHB Edwards4 Empty landing page
12/7/2015BCHB Edwards5 Taxonomy page
12/7/2015BCHB Edwards6 Tour the primary files The files we modified in the HoyaTaxa folder: Controller: hoyataxa/controllers.py Change the index method Add the taxa method to lookup and return Taxonomy given taxid (Data) Model: hoyataxa/model.py SQLObject classes devdata.sqlite download (or populate) the data in the sqlite database View / Template: hoyataxa/templates/welcome.html Remove all but the dynamic title hoyataxa/templates/master.html Change header and footer, remove menus hoyataxa/templates/taxa.html Set-up the taxa page layout
12/7/2015BCHB Edwards7 Empty landing page
12/7/2015BCHB Edwards8 Set up search form In controllers.py, define a class for the form from turbogears import validate, validators from turbogears import widgets, error_handler class SearchFields(widgets.WidgetsList): query = widgets.TextField(label="Search Term") mode = widgets.SingleSelectField(label="Search Mode", options=["Starts with", "Ends with", "Contains"], default="Contains") search_form = widgets.TableForm( fields = SearchFields(), action = "search", submit_text = "Search" ) class def index(self): return dict(form=search_form, title="All your taxa are belong to us")
12/7/2015BCHB Edwards9 Set up search form Place the form in welcome.html
12/7/2015BCHB Edwards10 Set up search form
12/7/2015BCHB Edwards11 Handle the search request In controllers.py, we add the search method
12/7/2015BCHB Edwards12 Handle the search request Save taxa.html as search.html and modify
12/7/2015BCHB Edwards13 Handle the search request Save taxa.html as search.html and modify
Search for name: gorilla 12/7/2015BCHB Edwards14
12/7/2015BCHB Edwards15 But… There is a problem. What to do about bad input? Too short, spaces at beginning or end… TurboGears provides validators to check values in the fields to make sure they are OK Nice integration with form widgets Users get error messages so they can fix the error
12/7/2015BCHB Edwards16 Validation “Schema”
12/7/2015BCHB Edwards17 Handle errors in search parameters
12/7/2015BCHB Edwards18 Problem is communicated to user
12/7/2015BCHB Edwards19 Problem is communicated to user
12/7/2015BCHB Edwards20 Validators can be quite complicated
12/7/2015BCHB Edwards21 Problem is communicated to user
12/7/2015BCHB Edwards22 Setup for use by web-services Our web-site can now be accessed programatically… …as we did with urllib.urlopen in python Access: However, we usually don’t want to parse HTML. Programs want to parse “easy” no-frills formats.
12/7/2015BCHB Edwards23 Let’s provide XML output format We need a new output template for search: searchxml.html
12/7/2015BCHB Edwards24 XML output format Next we need to tell the search method when to use it…
12/7/2015BCHB Edwards25 XML Output Format To get XML format output, add “&tg_format=xml” to end of URL. Try it:
12/7/2015BCHB Edwards26 Similarly for the taxa page
12/7/2015BCHB Edwards27 Similarly for the taxa page
12/7/2015BCHB Edwards28 XML Output Format To get XML format output, add “tg_format=xml” to end of URL. Try it:
12/7/2015BCHB Edwards29 All done… We can now display a taxonomy record nicely if the user types a URL...and then navigate about its heirachy. Can search the names based on a user query. Search form, list of matching results, etc... XML output for web-services.
12/7/2015BCHB Edwards30 TODO… If only one matching search result – jump straight to taxa page… Even if only one taxa matches? Search/lookup by taxid too? Make pages and tables prettier Center and position tables on page Alternate row colors