Incomplete webapp to aggregate achievements/badges from various sources
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

helloworld.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import cgi
  2. from google.appengine.ext import webapp
  3. from google.appengine.api import users
  4. from google.appengine.ext.webapp.util import run_wsgi_app
  5. from google.appengine.ext import db
  6. class User(db.Model):
  7. user = db.UserProperty()
  8. joindate = db.DateTimeProperty(auto_now_add=True)
  9. class AchievementSource(db.Model):
  10. name = db.StringProperty()
  11. url = db.LinkProperty()
  12. class UserAccount(db.Model):
  13. user = db.ReferenceProperty(reference_class=User)
  14. source = db.ReferenceProperty(reference_class=AchievementSource)
  15. credentials = db.StringProperty()
  16. added = db.DateTimeProperty(auto_now_add=True)
  17. updated = db.DateTimeProperty()
  18. class Achievement(db.Model):
  19. name = db.StringProperty()
  20. image = db.LinkProperty()
  21. description = db.StringProperty()
  22. source = db.ReferenceProperty(reference_class=AchievementSource)
  23. class AwardedAchievement(db.Model):
  24. achievement = db.ReferenceProperty(reference_class=Achievement)
  25. user = db.ReferenceProperty(reference_class=User)
  26. awarded = db.DateTimeProperty()
  27. discovered = db.DateTimeProperty(auto_now_add=True)
  28. class MainPage(webapp.RequestHandler):
  29. def get(self):
  30. user = users.get_current_user()
  31. if not user:
  32. self.redirect(users.create_login_url(self.request.uri))
  33. return
  34. self.show_header()
  35. if users.is_current_user_admin():
  36. self.show_admin_form()
  37. self.show_footer()
  38. def show_header(self):
  39. self.response.out.write("""
  40. <html>
  41. <head>
  42. <title>Achievements Aggregator</title>
  43. </head>
  44. <body>""")
  45. def show_footer(self):
  46. self.response.out.write("""
  47. </body>
  48. </html>""")
  49. def show_admin_form(self):
  50. self.response.out.write("""
  51. <h1>Sources</h1>
  52. <h2>Add</h2>
  53. <form action="/admin/addsource" method="post">
  54. <label>Name: <input type="text" name="name"/></label>
  55. <label>URL: <input type="text" name="url"/></label>
  56. <input type="submit" value="Add"/>
  57. </form>
  58. <h2>View</h2>
  59. <table>
  60. <tr><th>Source</th><th>URL</th></tr>
  61. """)
  62. for source in AchievementSource.all():
  63. self.response.out.write("<tr><td>");
  64. self.response.out.write(cgi.escape(source.name))
  65. self.response.out.write("</td><td>");
  66. self.response.out.write(cgi.escape(source.url))
  67. self.response.out.write("</td></tr>");
  68. class AddSourcePage(webapp.RequestHandler):
  69. def post(self):
  70. if not users.is_current_user_admin():
  71. self.error(403)
  72. return
  73. source = AchievementSource(name=self.request.get('name'),
  74. url=self.request.get('url'))
  75. source.put()
  76. self.redirect('/')
  77. class Guestbook(webapp.RequestHandler):
  78. def post(self):
  79. self.response.out.write('<html><body>You wrote:<pre>')
  80. self.response.out.write(cgi.escape(self.request.get('content')))
  81. self.response.out.write('</pre></body></html>')
  82. application = webapp.WSGIApplication([('/', MainPage),
  83. ('/sign', Guestbook),
  84. ('/admin/addsource', AddSourcePage)],
  85. debug=True)
  86. def main():
  87. run_wsgi_app(application)
  88. if __name__ == "__main__":
  89. main()