Python for Entrepreneurs Transcripts
Chapter: Build web apps with Pyramid: Applied web development
Lecture: Leveraging a base controller demo
Login or purchase this course to watch this video and the rest of the course contents.
0:02 There are few things over here that were not so smooth. For one you saw me forget to do this because in my web apps
0:09 I don't ever have these initializers on the top level controllers, but also this build_cache_id stuff, this is not so great,
0:17 so let's see how we can use a base controller to make all these shared pieces, you can see everyone is going to need to have the request,
0:24 it's going to have this initializer, we are going to want to use this build_cache_id all over the place
0:29 and as this complexity in features of our app grow, that requirement to share all these things is going to absolutely grow as well.
0:36 So what we are going to do is we are going to add a base controller. Like so, and all it's going to do is have the various common pieces
0:49 so we are going to start up by moving this down here, like so and then inheriting from BaseController
1:01 PyCharm imported it, you can see it's added the import line up here and, this built cache id thing, let's move this around,
1:08 so we can go down here and say "self_.'build_cache_id', so we are going to set basically field here that is this implementation,
1:18 like so, and we need to import this like we did above, here is our static cache utility method that we are going to put here,
1:26 we could actually take and move the implementation down here but I am not a big fan of doing that.
1:31 So now we can come up here and delete this, make this much simpler and do it similarly for these others, now when I run this,
1:42 it's not going to work quite as well as you would think, it's going to be missing the build_cache_id,
1:47 because of the way we are expressing it in the templates. See this "NameError: build_cache_id", it turns out before we were passing in the model
1:55 and now we have associated it with the underlined view, but that's no problem, we just need to make a small tweak.
2:02 Let's go over here, we can do a replace, we'll replace "this" with "view.this", so because we are storing it on the controller
2:13 it's now considered to be part of the view, remember the way the nomenclature pyramid is, controller is a view basically.
2:19 So if I do this and I say "replace all". There, I have replaced in all of them let's just look at this one, so now anytime we want to use our cache id
2:27 we'll just come here and say view.build_cache_id now let's try this again, perfect, everything is back the way we wanted it,
2:35 but we have a much simpler normal controllers, here you can see we just have the action decorator to set the template,
2:43 and then we just return a basic model, whatever is special about this method and the base controller handles the initialization,
2:51 it's going to handle common layout, it's handling these other utility features that we need, like this static cache id utility and so on,
2:59 So, like I said, as your app grows, this base controller is going to be the place where your common shared functionality lives,
3:06 and it's going to keep your normal methods you write much simpler and make the maintenance of your app across various action methods
3:14 and controllers much simpler.