Full Web Apps with FastAPI Transcripts
Chapter: Users and HTML forms
Lecture: Redirecting after registering
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
Well, we've got our form taking the data and validating it, but it just stays right here.
0:06
So there's a couple of things we still need to do to make this work. One is we need to go over here and say TODO:,
0:12
Create the account, and let's go and write some code to do it and then we'll make this actually happen when we get to the database.
0:19
This is gonna be the user_service, and we'll say create_account() and we need to pass all that information over. So view model is going
0:29
to have the name, the email and the password. That's going to create an account and we probably also want to say TODO: Login user,
0:43
which we still got to get to in a moment, do that. And then we want to do the redirect, right? We're still kind of focused on this
0:51
GET > POST > Redirect and this the last step in that. Let's go ahead and write that function real quick so it doesn't crash,
0:57
it's just gonna be strings and it's gonna return one of those users, one of these classes, and we'll just have it return
1:11
the user like this for a minute name, email, "abc". We've gotta hash the password, not for the moment, but we'll get back to that.
1:20
OK, So we're gonna log in our user and then we want to redirect. Now, remember we talked briefly about FastAPI responses, responses there.
1:29
There's a bunch of great stuff, we started out by saying, oh, there's this regular response and the JSON response,
1:34
and let's use an HTML response for a minute. You can see these actually come out of Starlette, not FastAPI directly.
1:42
So we've got a perfect candidate for our redirect. We're gonna return a RedirectResponse, and what could we put in there?
1:49
the url, the url is going to be equal to /account. Let's give this a shot and see what happens. All right, come over here.
1:58
We're going to submit this form, it's gonna fake out creating that account, and then it's gonna redirect to /account.
2:04
But it's not gonna work the way you're expecting. You probably think we'll just see the account page shown here.
2:08
But let's see what happens. Method not allowed. Wait a minute, what just happened? what just happened? Look at this,
2:16
it did an HTTP POST when we did the redirect from /register it redirected as
2:23
a POST. Most frameworks automatically convert redirects to GET, FastAPI and Starlette do not. So no problem,
2:33
what we can do is, we can go over here and we can actually import status. We can set the status_code equal to status, and this is going to come
2:41
out of Starlette. And here we have all the HTTP statuses and the one we want is 302 Found, and that means redirect with a GET. Right, one more time.
2:53
Go back here, try to submit my form. Should see it, redirect, and off it goes.
2:59
Tada! there we go. And we've got the correct redirect instead of one of those 307 or whatever it was there. 302 Found when I did the
3:06
POST to register and then it did the GET to the account. So GET > POST > Redirect. Perfect, so now we've got this working and you can imagine something
3:16
very, very similar for login, right? We're gonna create a GET version, a POST version. The view model is gonna load the data out of the form,
3:25
validate it, do some stuff like log in the user, make sure their account exists, log them in and then do a redirect, probably over to the same place as
3:33
well. So this pattern will serve us for most of the HTML forms that we wanna work with.