Skip to content

Instantly share code, notes, and snippets.

@aodag
Last active December 26, 2015 23:58
Show Gist options
  • Save aodag/7233871 to your computer and use it in GitHub Desktop.
Save aodag/7233871 to your computer and use it in GitHub Desktop.
TurboGears2で作ったやつです
import os
from datetime import datetime
from babel.dates import format_datetime
from markupsafe import escape, Markup
from tg import expose, TGController, AppConfig, redirect
import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy.ext.declarative import declarative_base
from zope.sqlalchemy import ZopeTransactionExtension
here = os.path.abspath(os.path.dirname(__file__))
Base = declarative_base()
Session = orm.scoped_session(
orm.sessionmaker(extension=ZopeTransactionExtension()))
class Greeting(Base):
__tablename__ = 'greetings'
query = Session.query_property()
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.Unicode(255))
comment = sa.Column(sa.UnicodeText)
create_at = sa.Column(sa.DateTime, default=datetime.now)
class RootController(TGController):
@expose('index.html')
def index(self):
return dict(
greeting_list=Greeting.query.all()
)
@expose()
def post(self, name, comment):
greeting = Greeting(name=name, comment=comment)
Session.add(greeting)
return redirect('/')
def nl2br(s):
return Markup(str(escape(s)).replace('\n', '<br />'))
def register_globals():
return dict(
format_datetime=format_datetime,
nl2br=nl2br,
)
def main():
from repoze.tm import TM
import waitress
sa_url = 'sqlite:///%s/guestbook.dat' % here
engine = sa.create_engine(sa_url)
print(engine.url)
engine.echo = True
Session.remove()
Session.configure(bind=engine)
Base.metadata.create_all(bind=engine)
config = AppConfig(minimal=True, root_controller=RootController())
config.default_renderer = 'genshi'
config.renderers = ['genshi']
config.use_dotted_templatenames = False
config.variable_provider = register_globals
app = config.make_wsgi_app()
app = TM(app)
print("Serving on port 8080...")
waitress.serve(app, host='', port=8080, )
if __name__ == '__main__':
main()
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://genshi.edgewall.org/"
lang="ja">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>
<title>ゲストブック</title>
</head>
<body>
<div id="main" class="container">
<h1>ゲストブック</h1>
<div id="form-area">
<p>書き込みをどうぞ。</p>
<form action="post" method="post">
<table>
<tr>
<th>名前</th>
<td>
<input type="text" size="20" name="name" />
</td>
</tr>
<tr>
<th>コメント</th>
<td>
<textarea rows="5" cols="40" name="comment"></textarea>
</td>
</tr>
</table>
<p><button type="submit">送信</button></p>
</form>
</div>
<div id="entries-area">
<h2>これまでの書き込み</h2>
<div class="entry" py:for="greeting in greeting_list">
<h3> ${greeting.name} さんの書き込み( ${format_datetime(greeting.create_at, format='full', locale='ja')} ):</h3>
<p> ${nl2br(greeting.comment)} </p>
</div>
</div>
</div>
</body>
</html>
Babel==1.3
Beaker==1.6.4
Genshi==0.7
MarkupSafe==0.18
PasteDeploy==1.5.0
SQLAlchemy==0.8.3
Tempita==0.5.1
TurboGears2==2.3.0
WebOb==1.2.3
cliff==1.4.5
cmd2==0.6.7
crank==0.6.4
decorator==3.4.0
gearbox==0.0.2
prettytable==0.7.2
pyparsing==2.0.1
pytz==2013.7
repoze.lru==0.6
repoze.tm2==2.0
transaction==1.4.1
waitress==0.8.7
zope.interface==4.0.5
zope.sqlalchemy==0.7.3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment