#100DaysOfCode in Python Transcripts
Chapter: Days 97-99: Building JSON APIs
Lecture: Implementing the find-user method
0:00 Now let's turn our attention to finding a user.
0:03 This is pretty straightforward,
0:04 but it does introduce an entirely new concept.
0:08 I could ask for a user that doesn't exist, right?
0:11 Over here, we can go to our get_user,
0:14 and Mark, I don't think Mark exists in the database,
0:16 it just says, hey, we would find him.
0:19 I'm sure that Mark doesn't exist.
0:21 Eh, it still thinks it would find him.
0:23 And the status code is 200 OK.
0:25 So what we need to do is say,
0:27 yes, this user was found and here's their details,
0:30 or no, the user was not found, and here's what happened.
0:34 So it's really easy to do this with the code
0:36 we've already written and encapsulated in our service.
0:46 Alright, so, there's our user.
0:48 And if it wasn't null, we could return it.
0:51 Be super easy.
0:52 Let's go ahead and write that code really quick.
0:56 Now, to all these database entities
0:58 that need to be returned, if I just try to return Player,
1:01 let's try to make this work here.
1:04 We know Computer exists, let's try to get them.
1:06 What happens? Boom.
1:08 Player is not JSON serializable.
1:11 What we have to put here is not
1:13 a random object out of the database, but a dictionary.
1:20 I've added this to_json method for every one of these.
1:23 The one that's most interesting is this,
1:26 this move here, so you can see this to_json,
1:29 that is going to create this dictionary to be sent back,
1:33 right, and it's kind of encapsulated here with this class,
1:35 which I think is pretty cool.
1:37 So what we got to go over here and say to_json now,
1:40 we do that, boom, there's our computer, ID is 1.
1:47 What about Michael, does he exist?
1:49 None type has no attribute to JSON.
1:51 No, there is no Michael, so what we need to do
1:53 instead of let it crash, is we need to say,
1:55 sorry, that user wasn't found.
1:56 So we'll say if not player,
1:59 and we can just say this, abort, sorry flask.abort(404), Not Found
2:06 Alright, now let's try it for one that doesn't exist.
2:09 Okay, the page was not found, 404, that's fine.
2:12 Maybe we could give a better message about the user,
2:14 but notice this is a little bit off.
2:18 What we need to do is actually return a response
2:20 and set the status to be 404
2:22 in our little not found handler.
2:26 Alright, there we go, 404 not found.
2:28 That's what our client can use
2:29 to say no no no, that didn't work.
2:30 We could put a little JSON message in here if we want,
2:33 but it doesn't really matter for what we're doing.
2:35 Okay, go back to working one.
2:39 Here we go.
2:40 Okay, so our get user is implemented,
2:43 and the interesting thing that we learned here
2:45 is this response message, a flask.abort(404)
2:49 which really redirects over to this not found handler,
2:52 and does whatever it's going to do.
2:54 So this is really important when people are trying
2:56 to interact with things that don't exist.