この記事では、そのクラスを使って geopoint データを datastore に保存するサンプルコードをお見せします。始めるまえに、こちらのdjangoforms に関する記事を読んでおくとコードがすぐ理解できるでしょう。
まずはこの記事用のディレクトリを作ります。そして拙作の my_geopt.py をその中にコピーし、さらに新しく3つのファイルを作ります。app.yaml, main.py と index.html です。
ファイルを作成したら、開発用サーバーを機動して localhost にアクセスします。すると Google Map をクリックするだけで特定の GeoPt が指定できる事がわかります。
また ライブデモもあります(少し複雑になってますが、基本は同じです)。
Happy coding :-)
app.yaml
application: geotest version: 1 runtime: python api_version: 1 handlers: - url: /.* script: main.py
main.py
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import os
import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext.webapp import template
from google.appengine.ext.db import djangoforms
import my_geopt
class Place(db.Model):
name = db.StringProperty()
description = db.StringProperty()
geopoint = db.GeoPtProperty()
date = db.DateTimeProperty(auto_now=True)
class PlaceForm(djangoforms.ModelForm):
class Meta:
model = Place
class MainPage(webapp.RequestHandler):
def post(self):
data = PlaceForm(data=self.request.POST)
if data.is_valid():
# Save the data, and redirect to the view page
entity = data.save(commit=False)
entity.put()
self.redirect('/')
else:
# Reprint the form
contents = {'form': data}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, contents))
def get(self):
contents = {'form': PlaceForm()}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, contents))
application = webapp.WSGIApplication(
[('/', MainPage),],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
index.html (Please replace 2 YOURAPIKEYs with your Maps API Key)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GeoPtWidgets Example</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=YOURAPIKEY"
type="text/javascript"></script>
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=YOURAPIKEY"
type="text/javascript"></script>
<script src="http://www.google.com/uds/solutions/localsearch/gmlocalsearch.js"
type="text/javascript"></script>
<style type="text/css">
@import url("http://www.google.com/uds/css/gsearch.css");
@import url("http://www.google.com/uds/solutions/localsearch/gmlocalsearch.css");
</style>
</head>
<body onunload="GUnload()">
<h1>GeoPtWidgets Example</h1>
<form method="post" action="/">
{{ form.as_p }}
<input type="submit" value="register"/>
</form>
</body> </html>