I love coding in Python and have been exploring the excellent web.py framework lately. From what I’ve seen, web.py is a very simple yet powerful python based web framework. It’d take me a lot of time to learn django (if I ever manage to make up my mind into it) and it already took around a couple of hours to understand the Google App Engine’s default webapp framework.
web.py includes a built in web server to develop an application locally. But I am a Google fan and was thinking of deploying web.py on Google App Engine. I believed GAE and web.py together can help me put up a web app in minutes. And so did they… 😀
The first question came to my mind was “How am I going to install web.py on my GAE account ?”. Well, it was pretty easy in the end. Just extract the web.py package and put the “web” directory inside your application directory. That is the “web” directory would be in the same directory where the app.yaml file resides. Now, in app.yaml file, map all URLs to a single python file. In my case, it was “main.py”.
Now develop the application in the normal web.py way. “It’s easy as pie!” — I thought. But it was not that easy in fact. I had to make a couple of changes.
The app I wrote didn’t do what I expected it to. Rather it raised an “import error” 🙁 Later, I found out that I have to use “web.application.cgirun()” method instead of the normal “run()” method.
Then I reloaded the app. But this time I got an “internal server error”. After visiting the web.py cookbook, I found out that, to use web.py templates on GAE, I have to compile all templates using the “web/template.py –compile templates” command. I did so. All my templates were compiled into python source code. Cool !
Now my app was running smooth and working fine ! So, at last I made it… Yahoo ! I am loving python, web.py and Google App Engine together 😉
PS: I am using web.py 0.3 where I have the cgirun() method. In older versions of web.py, you have to be tricky. In that case, please consult this thread:
Here’s the source code (Without the template):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/usr/bin/env python import web urls = ("/(.*)","site") class site: def GET(self,path): render = web.template.render('templates') return render.masnun(path) app = web.application(urls,globals()) def main(): app.cgirun() if __name__ == '__main__': main() |
Here’s the “templates/masnun.htm”:
1 2 3 |
$def with (name) <html><head><title>web.py demo</title></head><body> You requested: <b> $name</b></body></html> |
3 replies on “Using web.py with Google App Engine”
There’s an error in your template compilation command. I found the correct syntax on the web.py cookbook: python web/template.py –compile templates
This calls the template.py program in the web subdirectory and asks it to compile the templates in the templates subdirectory.
-Kevin
oops, after posting my comment above I see what the problem was. The font on this website shows 2 dashes as a single dash. So, the original syntax is correct but I read it as one dash instead of 2 dashes before the compile. It should be “- -compile”
Thanks, really helpful!