app.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import os
  2. import os.path as op
  3. from flask import Flask
  4. from flask_sqlalchemy import SQLAlchemy
  5. import flask_admin as admin
  6. from flask_admin.contrib.sqla import ModelView
  7. # Create application
  8. app = Flask(__name__)
  9. # Create dummy secrey key so we can use sessions
  10. app.config['SECRET_KEY'] = '123456790'
  11. # Create in-memory database
  12. app.config['DATABASE_FILE'] = 'sample_db.sqlite'
  13. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + app.config['DATABASE_FILE']
  14. app.config['SQLALCHEMY_ECHO'] = True
  15. db = SQLAlchemy(app)
  16. # Models
  17. class User(db.Model):
  18. id = db.Column(db.Integer, primary_key=True)
  19. name = db.Column(db.Unicode(64))
  20. email = db.Column(db.Unicode(64))
  21. def __unicode__(self):
  22. return self.name
  23. class Page(db.Model):
  24. id = db.Column(db.Integer, primary_key=True)
  25. title = db.Column(db.Unicode(64))
  26. content = db.Column(db.UnicodeText)
  27. def __unicode__(self):
  28. return self.name
  29. # Customized admin interface
  30. class CustomView(ModelView):
  31. list_template = 'list.html'
  32. create_template = 'create.html'
  33. edit_template = 'edit.html'
  34. class UserAdmin(CustomView):
  35. column_searchable_list = ('name',)
  36. column_filters = ('name', 'email')
  37. # Flask views
  38. @app.route('/')
  39. def index():
  40. return '<a href="/admin/">Click me to get to Admin!</a>'
  41. # Create admin with custom base template
  42. admin = admin.Admin(app, 'Example: Layout', base_template='layout.html')
  43. # Add views
  44. admin.add_view(UserAdmin(User, db.session))
  45. admin.add_view(CustomView(Page, db.session))
  46. def build_sample_db():
  47. """
  48. Populate a small db with some example entries.
  49. """
  50. db.drop_all()
  51. db.create_all()
  52. first_names = [
  53. 'Harry', 'Amelia', 'Oliver', 'Jack', 'Isabella', 'Charlie','Sophie', 'Mia',
  54. 'Jacob', 'Thomas', 'Emily', 'Lily', 'Ava', 'Isla', 'Alfie', 'Olivia', 'Jessica',
  55. 'Riley', 'William', 'James', 'Geoffrey', 'Lisa', 'Benjamin', 'Stacey', 'Lucy'
  56. ]
  57. last_names = [
  58. 'Brown', 'Smith', 'Patel', 'Jones', 'Williams', 'Johnson', 'Taylor', 'Thomas',
  59. 'Roberts', 'Khan', 'Lewis', 'Jackson', 'Clarke', 'James', 'Phillips', 'Wilson',
  60. 'Ali', 'Mason', 'Mitchell', 'Rose', 'Davis', 'Davies', 'Rodriguez', 'Cox', 'Alexander'
  61. ]
  62. for i in range(len(first_names)):
  63. user = User()
  64. user.name = first_names[i] + " " + last_names[i]
  65. user.email = first_names[i].lower() + "@example.com"
  66. db.session.add(user)
  67. sample_text = [
  68. {
  69. 'title': "de Finibus Bonorum et Malorum - Part I",
  70. 'content': "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor \
  71. incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud \
  72. exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure \
  73. dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. \
  74. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt \
  75. mollit anim id est laborum."
  76. },
  77. {
  78. 'title': "de Finibus Bonorum et Malorum - Part II",
  79. 'content': "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque \
  80. laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto \
  81. beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur \
  82. aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi \
  83. nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, \
  84. adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam \
  85. aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam \
  86. corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum \
  87. iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum \
  88. qui dolorem eum fugiat quo voluptas nulla pariatur?"
  89. },
  90. {
  91. 'title': "de Finibus Bonorum et Malorum - Part III",
  92. 'content': "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium \
  93. voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati \
  94. cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id \
  95. est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam \
  96. libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod \
  97. maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. \
  98. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet \
  99. ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur \
  100. a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis \
  101. doloribus asperiores repellat."
  102. }
  103. ]
  104. for entry in sample_text:
  105. page = Page()
  106. page.title = entry['title']
  107. page.content = entry['content']
  108. db.session.add(page)
  109. db.session.commit()
  110. return
  111. if __name__ == '__main__':
  112. # Build a sample db on the fly, if one does not exist yet.
  113. app_dir = op.realpath(os.path.dirname(__file__))
  114. database_path = op.join(app_dir, app.config['DATABASE_FILE'])
  115. if not os.path.exists(database_path):
  116. build_sample_db()
  117. # Start app
  118. app.run(debug=True)