Building data-driven web apps with Flask and SQLAlchemy Transcripts
Chapter: Routing and URLs
Lecture: Routing visualized
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
In this chapter, we're going to talk about mapping URLs
0:02
to our action or view methods.
0:04
And this is super important to think about
0:07
how we structure the URLs and exchange data
0:10
throughout our application.
0:13
When you think of the URLs
0:14
they're often not just things that are behind the scenes
0:19
in a hypertext and you click on them and whatnot in HTML
0:22
but often users perceive the URLs
0:25
as almost like a command line interface to your application.
0:28
They look up, they see the URL
0:30
they try to maybe play with it
0:32
if they can't find their way around, stuff like that, right?
0:34
So you want to have a super clean set of URLs
0:37
both for you 'cause it helps you organize your code
0:40
and group it, and so on, but also so that users
0:43
have the cleanest possible interaction.
0:46
You might also think about SEO
0:47
or search engine optimization.
0:49
One of the big triggers or cues to Google
0:52
on what this page is about is what is in that URL.
0:56
URLs are super important
0:58
and luckily, Flask makes working with them pretty easy.
1:01
Now, let's visualize how this routing
1:04
or routing if you prefer your British English, works.
1:07
So the idea is we have our web browser on the left
1:10
that some client that wants to get to our website.
1:12
We have this kind of funky visualization of our server
1:15
and our views and their various methods
1:17
that we're going to map URLs over to.
1:20
So we have our package views and our home views.
1:22
We've broken those into two distinct areas
1:24
to do with PyPI packages and views.
1:27
We're going to get to that real soon.
1:29
And then each of those have a couple of methods
1:31
that could be called here.
1:33
So request can come in
1:35
and HTTP GET request is going to go to project/sqlalchemy
1:40
and with a query string,?mode=edit.
1:45
So it's up to the routing to figure out
1:47
do I have any of these view methods on the right that match
1:50
and which one should it be?
1:53
So we've registered some routes with the app.route decorator.
1:56
So for /, we said that goes
1:58
to home_views.index, that function.
2:01
So Flask is going to ask is this a match?
2:04
And in this case, it has to be an exact string match
2:07
up to, but not including, the query string.
2:09
So it's /project/sqlalchemy, no
2:13
so I'm going to skip over that.
2:14
Next, I'm going to have is /about.
2:16
Also, because there's no variable component here
2:18
this has to match the root part of the request.
2:23
Nope. /project is not /about.
2:26
The next one we're going to define is /project/package
2:29
and notice the angle brackets there.
2:31
The angle brackets mean this part
2:33
is some variable component.
2:36
So in our case above, we have /project/sqlalchemy
2:39
and here we have /project/ something.
2:41
And we're giving it a name
2:43
so that we can actually work with that value.
2:45
This one turns out is a match
2:48
so it's going to go and prepare the request
2:50
and then call package_views.details.
2:52
And Flask is really nice because what Flask will do
2:55
it will take all of the arguments or values
2:57
that are in the route, in the URL here, so package for now
3:01
and it will pass that as a parameter into our function.
3:04
And we can even define some of them as strings
3:06
and some of them as integers, and things like that.
3:08
So really, really nice.
3:09
It will take those variables that are in the URL
3:12
and pass them through.
3:13
It will also gather up the query string
3:16
and put that onto request.args.
3:18
Remember, request is like a ambient global thing.
3:21
It doesn't get passed in the method.
3:23
You say flask.request
3:24
and it has whatever request is running.
3:26
So mode is edit. So that's it.
3:30
That's the general idea of routing.
3:32
We're going to define a set of URLs.
3:33
Sometimes they're static like the first two.
3:35
Sometimes they have variable components in them
3:38
like this last one.
3:39
And then we're going to associate those
3:41
with various view methods
3:42
and Flask will look at each request
3:44
figuring out which one to router to, and then call that one.
3:47
Or if there's none that match
3:48
it will just return a 404, Page Not Found.