MCS 275 Spring 2023
                    Emily Dumas
                
Reminders and announcements:
Interactive elements in an HTML document (text entry, checkbox, dropdown list, etc.)
 
                
        
    jsfiddle is a nice way to test out form designs (for code that can be public).
Each form input should have both a name and id attribute. Usually they are
                    equal, but they have separate roles:
name is what this value is called when submitted to the server.id is used to match an input with its <label>.<input type="text"> is typically for single-line answers.
Longer text entry (multi-line) should be handled with a <textarea> tag.
GET - load a resource, the only action we've considered so far.
GET requests are supposed to be idempotent, meaning repeating the same request
                    multiple times has the same effect as doing it once.
POST - submit data and/or request an action.
POST requests are not expected to be idempotent. Browsers typically prevent reloading a
                    POST request, for example.
                
By default, forms use a GET request and put form data in the URL.
This is usually a bad idea, and a POST request is more appropriate.
Easy change: Add method="post" attribute to the <form> tag.
Form values become query parameters, e.g.
        https://example.com/formsub/?full=Emily%20Dumas&nick=emmy
    Many ascii characters appear verbatim but others* become % escape
                        sequences with two hex digits. Flask decodes these and makes the parameters available as
                        flask.request.values.get(name).
                    
* The precise encoding scheme is specified in RFC3986. Python's built-in
                        urllib.parse module has functions that perform this type of encoding/decoding:
                        urllib.parse.quote and urllib.parse.unquote. When using Flask, you
                        usually won't call these directly.
                    
Form values are made available to the function handling submission through
                    flask.request.values.get(name).
                
Note that a Flask route must explicitly declare that it accepts POST requests:
        from flask import Flask, request
        # ... app setup ...
        @app.route('/registernick',methods = ['POST', 'GET'])
        def record_fullname_and_nickname():
            print("Received nickname {}".format(
                request.values.get("nick")
            ))
    All are in the flask module:
redirect(url) - Returning this object from a route will
                        cause the HTTP server to issue a 302 response code, telling client to load url
                        instead.abort(http_error_code) - Immediately stop and return a HTTP error
                        code (usually 400 bad request, 401 not authorized, 403 forbidden, or 404 not found)./worker/<name>/ - (GET) worker's view of orders/new/ - (GET) form for new order/new/submit - (POST) form submission destination/wo/<int:woid>/ - (GET) work order status/wo/<int:woid>/assign_to/<str:name>/ -
                        (GET*)
                        assign work order to user/wo/<int:woid>/unassign/ - (GET*) unassign work
                        order/wo/<int:woid>/complete/ - (GET*) mark work order
                        complete* These should really be POST but we would need to use javascript or a different
                    button markup to do it because <a> tags generate a GET request.