/README.rst

https://github.com/pixlie/tornado-generic-handlers · ReStructuredText · 95 lines · 69 code · 26 blank · 0 comment · 0 complexity · 532ce33b0dbcf8da24146335fddafe18 MD5 · raw file

  1. ======
  2. torgen
  3. ======
  4. Django's CBVs adapted to be used with Tornado along with SQLAlchemy and WTForms.
  5. It's highly recomended to read the docs here first: https://github.com/BeardyBear/tornado-generic-handlers
  6. 0.2: new handler - DeleteHandler
  7. Configuration
  8. =============
  9. The only requirement is SQLAlchemy's session stored in application's db attribute.
  10. ::
  11. from sqlalchemy.orm import scoped_session, sessionmaker
  12. class Application(tornado.web.Application):
  13. def __init__(self):
  14. self.db = scoped_session(sessionmaker(bind=engine))
  15. Basic usage
  16. ===========
  17. ::
  18. from torgen.base import TemplateHandler
  19. from torgen.list import ListHandler
  20. from torgen.detail import DetailHandler
  21. from torgen.edit import FormHandler, DeleteHandler
  22. from my_alchemy_models import Post
  23. from my_wtforms import LoginForm
  24. class HomeHandler(TemplateHandler):
  25. template_name = 'home.html'
  26. class BlogHandler(ListHandler):
  27. template_name = 'blog.html'
  28. paginate_by = 10
  29. context_object_name = 'post_list'
  30. model = Post
  31. class PostHandler(DetailHandler):
  32. template_name = 'post.html'
  33. model = Post
  34. context_object_name = 'post'
  35. class LoginHandler(FormHandler):
  36. template_name = 'login.html'
  37. form_class = LoginForm
  38. success_url = '/'
  39. def form_valid(self, form):
  40. self.set_secure_cookie('user', form.data['username'])
  41. return super(LoginHandler, self).form_valid(form)
  42. class DeletePostHandler(DeleteHandler):
  43. template_name = 'confirm_delete.html'
  44. model = Post
  45. success_url = '/blog/'
  46. Pagination
  47. ==========
  48. Pagination can be used separately from generic handlers.
  49. ::
  50. from torgen.pagination import Paginator, EmptyPage, PageNotAnInteger
  51. class BlogHandler(tornado.web.RequestHandler):
  52. @property
  53. def db(self):
  54. return self.application.db
  55. def get(self, page):
  56. post_list = self.db.query(Post).all()
  57. paginator = Paginator(posts, 15)
  58. try:
  59. posts = paginator.page(page)
  60. except PageNotAnInteger:
  61. posts = paginator.page(1)
  62. except EmptyPage:
  63. posts = paginator.page(paginator.num_pages)
  64. self.render('blog.html', posts=posts)
  65. You can find advanced docs here: https://github.com/BeardyBear/tornado-generic-handlers
  66. Installation
  67. ============
  68. Using pip:
  69. $ pip install torgen