Appier maps request URLs to methods using a route decorator on handler methods:
import appier
class HelloApp(appier.App):
@appier.route("/", "GET")
def hello(self):
return "hello from /"
HelloApp().serve()The previous code will handle the base URL. If you go to http://localhost:8080, you should get a hello message as the response.
You can handle a longer URL path:
@appier.route("/cats/garfield", "GET")
def hello(self):
return "hello from garfield"Handling POST requests instead of GET is just as easy:
@appier.route("/cats/garfield", "POST")
def hello(self):
return "hello from /cats/garfield"The same handler can also handle both request types:
@appier.route("/cats/garfield", ("GET", "POST"))
def hello(self):
return "hello from /cats/garfield"It can also handle multiple URLs:
@appier.route("/cats/garfield", "GET")
@appier.route("/cats/felix", "GET")
def hello(self):
return "hello from garfield or felix (not sure which)"You can easily capture parts of the URL:
@appier.route("/cats/<name>", "GET")
def hello(self, name):
return "hello from %s" % nameThose parts can be automatically casted for you by specifying their type:
@appier.route("/numbers/<int:number>", "GET")
def hello(self, number):
return "this is number %d" % numberIf you were to call http://localhost:8080/cats?name=garfield, here's how you would retrieve the name parameter (same goes for form data):
@appier.route("/cats", ("GET", "POST"))
def hello(self):
name = self.field("name")
return "hello from %s" % nameYou can also specify the default value used when the value is undefined, as well as how to cast the value being retrieved:
@appier.route("/numbers", ("GET", "POST"))
def hello(self):
number = self.field("number", 5, cast = int)
return "this is number %d" % numberIf you were posting a file using "multipart/form-data" encoding, you could access it like this:
@appier.route("/file", "POST")
def hello(self):
file = self.field("form_file_name")
return "you uploaded a file of type %s named %s" % (file.mime, file.name)You can return custom responses for specific error codes:
@appier.error_handler(404)
def not_found_code(self, error):
return "404 - The page you requested was not found"You can also return custom responses to unhandled exceptions (eg: an object you tried to retrieve was not found):
@appier.exception_handler(appier.NotFoundError)
def not_found(self, error):
return "The object you requested was not found"Routes can be protected so that they can be accessed only by certain authenticated users. To learn more, read the Access Control documentation.