google(二)python使用和发布到google
google(二)python使用和发布到google我在google申请了帐号,呵呵,想试试在那里发布我新写的简单python应用。
首先学习google的python入门文档:
http://code.google.com/intl/zh-CN/appengine/docs/python/gettingstarted/
5 使用数据存储区
按照文档上的,修改了helloworld.py,保存问候信息和用户信息到数据存储区域:
import cgi
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write('<html><body>')
#greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10")
#两种写法都可以,下面一种是简写
greetings = Greeting.gql("ORDER BY date DESC LIMIT 10")
for greeting in greetings:
if greeting.author:
self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname())
else:
self.response.out.write('An anonymous person wrote:')
self.response.out.write('<blockquote>%s</blockquote>' %
cgi.escape(greeting.content))
# Write the submission form and the footer of the page
self.response.out.write("""
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
</body>
</html>""")
class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()
if users.get_current_user():
greeting.author = users.get_current_user()
greeting.content = self.request.get('content')
greeting.put()
self.redirect('/')
application = webapp.WSGIApplication(
[('/', MainPage),
('/sign', Guestbook)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
启动服务google_appengine/dev_appserver.py /home/sillycat/work/easyappenginepython/
访问http://localhost:8080就可以看到效果了。录入了几个信息后,后被记录并列表出来了。
清除数据并启动服务:
google_appengine/dev_appserver.py --clear_datastore /home/sillycat/work/easyappenginepython/
数据存储区详细文档:
http://code.google.com/intl/zh-CN/appengine/docs/python/datastore/
另外文档上介绍了几个写GQL过滤的方法:
使用位置参数:
if users.get_current_user():
greetings = Greeting.gql("WHERE author = :1 ORDER BY date DESC",
users.get_current_user())
使用命名参数:
greetings = Greeting.gql("WHERE author = :author ORDER BY date DESC",
author=users.get_current_user())
用API filter来查询:
greetings = Greeting.all()
greetings.filter("author =", users.get_current_user())
greetings.order("-date")
6.使用模板
嘿嘿,google使用了类似于django的模板,修改helloworld.py文件如下:
import cgi
import os
from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
greetings_query = Greeting.all().order('-date')
greetings = greetings_query.fetch(10)
if users.get_current_user():
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
else:
url = users.create_login_url(self.request.uri)
url_linktext = 'Login'
template_values = {
'greetings': greetings,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()
if users.get_current_user():
greeting.author = users.get_current_user()
greeting.content = self.request.get('content')
greeting.put()
self.redirect('/')
application = webapp.WSGIApplication(
[('/', MainPage),
('/sign', Guestbook)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
在helloworld目录增加文件/helloworld/index.html如下:
<html>
<body>
{% for greeting in greetings %}
{% if greeting.author %}
<b>{{ greeting.author.nickname }}</b> wrote:
{% else %}
An anonymous person wrote:
{% endif %}
<blockquote>{{ greeting.content|escape }}</blockquote>
{% endfor %}
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
<a href="{{ url }}">{{ url_linktext }}</a>
</body>
</html>
django模板引擎详细文档:
http://www.djangoproject.com/documentation/0.96/templates/
7.使用静态文件
修改配置文件app.yaml:
handlers:
- url: /stylesheets
static_dir: stylesheets
- url: /.*
script: helloworld/helloworld.py
在工程中新建目录stylesheets
新建文件/stylesheets/main.css,内容如下:
body {
font-family: Verdana, Helvetica, sans-serif;
background-color: #DDDDDD;
}
再在文件/helloworld/index.html加上这个CSS的应用:
<head>
<link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
</head>
ok,访问http://localhost:8080就能看到加了背景色的效果了。
app.yaml文件配置参考:
http://code.google.com/intl/zh-CN/appengine/docs/python/config/appconfig.html
8.上传应用
访问主页:
https://appengine.google.com/
我在上面注册了帐号,新增了一个app
sillycatkiko
我的sillycat,luohuazju貌似都有了,所以就只能用这个了。
修改项目的app.yaml文件如下:
application: sillycatkiko
version: 1
runtime: python
api_version: 1
handlers:
- url: /stylesheets
static_dir: stylesheets
- url: /.*
script: helloworld/helloworld.py
使用命令行发布:
sillycat@sillycat-desktop:~/tools$ google_appengine/appcfg.py update /home/sillycat/work/easyappenginepython/
中途让我输入了用户名和密码。
访问地址:
http://sillycatkiko.appspot.com/
就能看到我刚才上传的应用了。简单的文档实验完毕。继续可以看看GOOGLE的其他文档和别人的应用。
页:
[1]