Web-Applications: TurboGears II BCHB524 2014 Lecture 26 12/03/2014BCHB524 - 2014 - Edwards

Preview:

Citation preview

Web-Applications:TurboGears II

BCHB5242014

Lecture 26

12/03/2014 BCHB524 - 2014 - Edwards

12/03/2014 BCHB524 - 2014 - Edwards 2

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

12/03/2014 BCHB524 - 2014 - Edwards 3

Start web-app and check

Check that the web-application is working... In the class Command-Line shell:

[student@localhost ~]$ cd HoyaTaxa [student@localhost HoyaTaxa]$ start-hoyataxa.py

Start a web-browser and access by urls:http://localhost:8080/http://localhost:8080/taxa/9606http://localhost:8080/taxa?taxid=9606

12/03/2014 BCHB524 - 2014 - Edwards 4

Empty landing page

12/03/2014 BCHB524 - 2014 - Edwards 5

Taxonomy page

12/03/2014 BCHB524 - 2014 - Edwards 6

Tour the primary filesThe 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/03/2014 BCHB524 - 2014 - Edwards 7

List all names

12/03/2014 BCHB524 - 2014 - Edwards 8

List all names

12/03/2014 BCHB524 - 2014 - Edwards 9

Remove the scientific name

12/03/2014 BCHB524 - 2014 - Edwards 10

Remove scientific name

12/03/2014 BCHB524 - 2014 - Edwards 11

Let's add the lineage

12/03/2014 BCHB524 - 2014 - Edwards 12

Let’s add the lineage

12/03/2014 BCHB524 - 2014 - Edwards 13

Let’s add the lineage

12/03/2014 BCHB524 - 2014 - Edwards 14

Empty landing page

12/03/2014 BCHB524 - 2014 - Edwards 15

Set up search form

In controllers.py, define a class for the formfrom turbogears import validate, validatorsfrom 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 Root(controllers.RootController):    @expose(template="hoyataxa.templates.welcome")    def index(self):        return dict(form=search_form,                    title="All your taxa are belong to us")

12/03/2014 BCHB524 - 2014 - Edwards 16

Set up search form

Place the form in welcome.html

12/03/2014 BCHB524 - 2014 - Edwards 17

Set up search form

12/03/2014 BCHB524 - 2014 - Edwards 18

Handle the search request

In controllers.py, we add the search method

12/03/2014 BCHB524 - 2014 - Edwards 19

Handle the search request

Save taxa.html as search.html and modify

12/03/2014 BCHB524 - 2014 - Edwards 20

Handle the search request

Save taxa.html as search.html and modify

Search for name: gorilla

12/03/2014 BCHB524 - 2014 - Edwards 21

12/03/2014 BCHB524 - 2014 - Edwards 22

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/03/2014 BCHB524 - 2014 - Edwards 23

Validation “Schema”

12/03/2014 BCHB524 - 2014 - Edwards 24

Handle errors in search parameters

12/03/2014 BCHB524 - 2014 - Edwards 25

Problem is communicated to user

12/03/2014 BCHB524 - 2014 - Edwards 26

Problem is communicated to user

12/03/2014 BCHB524 - 2014 - Edwards 27

Validators can be quite complicated

12/03/2014 BCHB524 - 2014 - Edwards 28

Problem is communicated to user

12/03/2014 BCHB524 - 2014 - Edwards 29

Setup for use by web-services

Our web-site can now be accessed programatically… …as we did with urllib.urlopen in python

Access:http://localhost:8080/taxa?taxid=9606

http://localhost:8080/search?query=hum&mode=Contains

However, we usually don’t want to parse HTML. Programs want to parse “easy” no-frills formats.

12/03/2014 BCHB524 - 2014 - Edwards 30

Let’s provide XML output format

We need a new output template for search: searchxml.html

12/03/2014 BCHB524 - 2014 - Edwards 31

XML output format

Next we need to tell the search method when to use it…

12/03/2014 BCHB524 - 2014 - Edwards 32

XML Output Format

To get XML format output, add “&tg_format=xml” to end of URL.

Try it:

http://localhost:8080/search?query=hum&mode=Contains

http://localhost:8080/search?query=hum&mode=Contains&tg_format=xml

12/03/2014 BCHB524 - 2014 - Edwards 33

Similarly for the taxa page

12/03/2014 BCHB524 - 2014 - Edwards 34

Similarly for the taxa page

12/03/2014 BCHB524 - 2014 - Edwards 35

XML Output Format

To get XML format output, add “tg_format=xml” to end of URL.

Try it:

http://localhost:8080/taxa?taxid=9606http://localhost:8080/taxa?taxid=9606&tg_format=xml

http://localhost:8080/taxa/9606http://localhost:8080/taxa/9606?tg_format=xml

12/03/2014 BCHB524 - 2014 - Edwards 36

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/03/2014 BCHB524 - 2014 - Edwards 37

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

Recommended