Full Web Apps with FastAPI Transcripts
Chapter: View models and services
Lecture: Adding HTML for package details
0:00 Now I'm going to start again from existing HTML because, like I said, this is not a web design course, this is how do I do websites in FastAPI.
0:11 So we're gonna just look at some Chameleon and then go from there. This is what it's gonna look like, we've got our content details. Again
0:19 we're using our shared layout, as we will with basically everything. Here's our little hero section pip install such and such.
0:25 And if it's not the latest version, we're gonna do an equal equal the release version that's selected. Stuff like that.
0:31 Here's the summaries, the stuff along the side, and when you download etcetera, etcetera. So there's a lot of things that we're going to need.
0:38 For example, we need a package, which has a license, a package which has a description. We're gonna need whether or not it's the latest release.
0:47 Let's see over here. So what we're gonna do is we're just gonna go through and try to get this to run. We're gonna miss a few things
0:53 I'm sure. We'll then go back and update that as well. I'll just copy this for a second, that will give us the simplest path to do that.
1:03 Got a couple of things to import Starlette's Request, fastapi_chameleon's template.
1:10 And here let's just call this details, DetailsViewModel and let's call this details. Remember, the URL is going to be slash project,
1:21 wish it was packages and then it's some value that goes here. It was a package name. So the way we do that in FastAPI
1:28 is like this, we put it in here and we give it a type. This one is just a simple string. OK, so that means this is a required element in the URL.
1:38 There's no defaults and it's going to be a string. And because of the somewhat unusual naming structure here,
1:45 we need to set the template file explicitly. We can't just go with the standard convention. So what is it? It's packages/details.pt
1:55 Here we go. Now we don't have this DetailsViewModel. Again it's gonna have the same structure. So in the viewmodels like before,
2:02 the easiest thing to do is probably make a copy, make a new directory called packages,
2:09 and in there we're gonna make a new Python file called details_viewmodel. Go do it yourself, copy this one over. So this is gonna be
2:20 DetailsViewModel, and it's not gonna have any of this. A little placeholder. OK, so this is going to be our basic structure and
2:32 import that. We also need to pass over the package_name, right. So this is part of the URL. In order to get it, we're gonna pass it on,
2:42 so I'll copy this and put it right there. Perfect. We want to make sure they passed over a valid package name,
2:55 and that is not empty. The routing will probably do that for us. But what we can do is we actually want to make sure that not only is
3:01 this a valid name, but if we do a query against the database, we get an actual package back. What we're gonna do is gonna say
3:08 self.package is going to be package_service. And I'm gonna do a query, let's say get_package_by_id() And package_name is what we're using here.
3:22 Then, if we don't have any value for the package, we're gonna want to make sure that we return some kind of 404 and
3:29 so on. So we'll say, somewhere we'll say something like this, not that, return. OK, so we've got to write this function,
3:41 and right now this is gonna be a string.