#100DaysOfCode in Python Transcripts
Chapter: Days 97-99: Building JSON APIs
Lecture: Ensuring starter data
0:00 When you saw me get started with Flask here, and I created a main method, and the main method we call run. And then down here where if the,
0:08 the main convention where I call main, you might have thought, "Well, why don't you just run down there? Come on. Like, what are you doing?"
0:14 It turns out that in real web applications, there's tons of startup and configuration code. Configuring the logger, configuring the
0:19 database connections, etc., etc. So I did this with that fact in mind. So one of the things that we're going to need to do is
0:27 we actually need to make sure that the starter data that they application is going to use exists. All the rules have have been created in the database.
0:36 There's always going to need to be a computer, sort of opponent user, like a built-in user. We are going to create that as just a standard user
0:44 in the database with a special lookup and things like that. So let's go over here, and maybe we can make this more obvious. We can say...
0:56 "Run web app," and we can take this and put that down there. And up here, we'll say, "Run web app" as the last thing,
1:05 but let's call another one, let's say, "Build starter data." And we'll define Builder Starter Data. Well, what goes in here?
1:12 Well, we can go to our game decider. Go up here and say, "from game_logic import game_decider" We're also going to need GameService later
1:29 in just a second. So we'll come down here and say, game_decider.all_rollnames." We can just print out roll names, just to see what's
1:45 coming along really quick here. And let's just throw a quick return so the app doesn't actually start.
1:53 Here you can see we are getting all the roll names. That's really cool. So it looks like that's working. And then the GameService,
2:01 this is the thing that talks to the database. It has an init rolls, and if you give it the roll names,
2:05 it will make sure that all these are created in the database, have ID's and things like that. If they're already existing,
2:12 this is just going to bail out of that. The other thing has to do with that computer users. So let's come over here and say, Computer = GameService()
2:23 Find player by computer." And if the computer already exists, that's great. But if it doesn't, we're going to create this one.
2:36 We'll create the player called computer. Okay, so we want to make sure this happens every single time. Now, it's kind of silly because, really,
2:44 it only has to happen once, and then the database is initialized. But have this here to make any changes,
2:48 make any additions to, will be really, really nice. So, before we run our web app, we're going to make sure that the starter date, or like the rolls,
2:55 and the computer player, and so on, are all there. Let's go ahead and run this and see how it works. Run it and nothing happens. Well, not nothing.
3:03 It built the starter data and then I, sure, sure I could do this right here, right? So if we run it now, it should be running the web app.
3:09 But let's look in here. Woo, look what we got over here. We have our Rock Paper Scissors SQLite database. Let's put over into here and see what we got.
3:30 There are all the rolls. Created that time: rock, gun, lightning, devil, and so on. If we run it again and again, we're never going to have
3:37 more than 15 rolls. The other thing that we might want to look at is from players. And now we just have our computer that we created, as well.
3:45 So we have our starter data. Now our system is just going to check. Like this init_rolls, if we go to there, you'll see.
3:56 It says, "Look, if we have some here, let's just get out." Right? Similarly, we check to see if the player already exists,
4:02 and if they do, we're just not going to do anything. But if they don't exist, we're going to create them the one time.
4:08 All right, so now we have our models imported. And remember, this is effectively just what we did in the previous demo. There's nothing changed here.
4:17 We just dropped it in here and called a couple of functions in the beginning of our web app before we let it run every
4:22 time it starts up, to make sure out database is all set up.