Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
Query strings let us send arguments to our views, but they're often really long and kind of ugly. Your URLs shouldn't be ugly! Let's make them nicer by taking advantage of a Flask route shortcut.
Anything captured in a route argument will be a string unless you specify another type, so be careful with how you use the values. You can have multiple route arguments, too.
Vanity often gets a bad rap.
0:00
But I think it's fairly important.
0:02
Teachers want their lessons to be clear.
0:04
Designers want their products to be
attractive.
0:06
And as developers, we want our code to be
easy to read and work with.
0:07
We also want our URLs to be neat and tidy.
0:11
No more question mark [UNKNOWN].
0:14
So, how do we go about getting rid of that
darn question mark?
0:16
Well, let's stop using the query string.
0:20
But, I mean, that's the obvious one,
right?
0:23
We get rid of the question mark, we get
rid of the query string.
0:25
But we don't want to lose our ability to
say hello to different people.
0:27
So, first of all, let's add another route
to our view.
0:31
It's actually pretty cool that views can
have more than one route, we can,
0:35
we can add more stuff in.
0:39
So we're going to do the forward slash
because the routes are going to
0:40
start with a forward slash.
0:43
And then we're gonna put in this, less
than name greater than.
0:44
This name tag looking thing.
0:48
So, what does that do?
0:51
Well, that means that capture, it's, it's
telling Flash to capture whatever comes
0:52
after the forward slash as this value,
this argument name.
0:57
So, yeah, that's pretty cool, and having
those
1:03
multiple routes means that our function
will respond on multiple end points,
1:06
which is pretty cool if you're building
something more complex, some sort of API.
1:11
We're making something that just prints
names, so it's not necessarily as wow,
1:15
we have to have this, but it's still
pretty cool and we still need it.
1:20
Okay, so we still have our default value
for name.
1:24
Cuz we've got one that comes in.
1:28
Right, we take this off and we still get
hello from Treehouse.
1:30
But what we don't need is we don't need
this anymore.
1:34
We don't need to do the name equals
request.args.get.
1:37
Because the name's gonna come in through
the route.
1:40
So let's take that off and since we're not
using a request anymore,
1:43
let's take that off.
1:47
There's no reason to have unnecessary,
crefty code.
1:48
Let's refresh and make sure it still
works.
1:50
It does.
1:53
And now let's add Kenneth to the end here.
1:54
Hello from Kenneth.
1:59
Let's let's try Craig.
1:59
Hello from Craig, that's pretty cool.
2:02
But what if we want to take multiple
arguments or we, I mean, we took this
2:05
name right, so, I took a name, but what if
I just want to say hello from 1000?
2:10
That shows up, even though it doesn't
really make sense,
2:15
1000 is not likely to be a name.
2:19
So what if we want to be able to convert
these arguments to a certain type?
2:22
Well okay, saying hello is great but what
I really need is a droid that
2:27
understands the binary language of wait
no.
2:31
What I really need is a view that will add
two numbers together for me.
2:34
Because I'm just, I'm just horrible at
doing math.
2:39
I don't like doing math at all.
2:41
So, what are we going to do?
2:43
Let's add a route.
2:45
And we're going to say add, and
2:48
then we're going to say num1 and we're
going to say num2.
2:49
Okay, so we got two numbers here.
2:53
And we're going to call this add and we're
going to take num1 and
2:55
num2 and we're going to return this plus
this equals this.
3:01
We're gonna format that with num1, num2
and num1 plus num2.
3:07
All right, let's try this, let's see if
this works.
3:15
So we're gonna go to add.
3:19
And let's do two and five.
3:21
2 plus 5 equals 25.
3:25
I'm pretty sure that it's seven.
3:29
But we're using strings.
3:33
Because this came in as a string, these
are, these are strings by default.
3:35
So what we need to do is we need to make
these not be strings, right, so
3:39
what I can do is I can do, you know, int
here, and
3:43
int here, but then I've got this really
long line and
3:48
I'm having to convert the numbers that's
kind of, kind of messy, so
3:51
what if instead I can just turn them into
numbers, right in the URL.
3:57
Well, we can.
4:04
So this is pretty cool.
4:05
We can actually come up here and we can do
int colon on both of those.
4:06
And what that says is, okay,
4:12
Flash, take this thing that comes in, turn
it into an int for me.
4:13
And what's really cool is when you get
something that can't be
4:17
turned into an int.
4:19
Well I tell you what, let's just let's
just try that out.
4:20
And see what it does.
4:24
All right.
So first of all, we refresh with our.
4:26
There we go.
We got seven.
4:29
All right.
When we did two and five.
4:30
What if I do a plus five?
4:31
I got a 404 because that's the string.
4:34
It can't be turned into anything else.
4:37
Right?
4:40
So the other thing to keep in mind is that
what we're sending back here is a string.
4:42
Flask has to have a string that comes back
out.
4:48
So if we wanted to send back just the
number.
4:51
So we just wanted to send back num1 plus
num2, right.
4:56
sorry, here we go.
5:02
And let's put the two back in here.
5:05
Then, see, that doesn't work,
5:07
because it gets this int object, which
isn't callable.
5:09
So, what I have to do is I'd have to do,
like, string of those.
5:12
And then I'd get back to seven.
5:19
But I like having the equation on hand.
5:21
I think that's, I think that's handier.
5:24
All right, now that you've seen how to
create views with multiple routes and
5:26
routes that convert numbers, see if you
can change our add view so
5:30
that it takes integers and floats at the
same time
5:33
You need to sign up for Treehouse in order to download course files.
Sign up