· 7 years ago · Oct 26, 2018, 05:30 PM
1import sys
2from flask_appbuilder import AppBuilder, ModelView
3from flask_appbuilder.models.mongoengine.interface import MongoEngineInterface
4from flask_appbuilder.security.mongoengine.manager import SecurityManager
5from flask import Flask
6from flask_appbuilder.actions import action
7from flask_mongoengine import MongoEngine
8from mongoengine import Document
9from mongoengine import StringField, ReferenceField, ListField
10
11config = {
12 'CSRF_ENABLED': True,
13 'SECRET_KEY': '\2\1thisismyscretkey\1\2\e\y\y\h',
14 'APP_NAME': 'Mongo Skeleton',
15 'MONGODB_SETTINGS': {
16 'db': 'fab_mongo_skeleton',
17 'host': '127.0.0.1'
18 }
19}
20
21app = Flask('mongodb_skeleton')
22app.config.update(config)
23db = MongoEngine(app)
24appbuilder = AppBuilder(app, security_manager_class=SecurityManager)
25
26
27class Teacher(Document):
28 name = StringField(required=True, unique=True)
29
30 def __repr__(self):
31 return self.name
32
33 def __str__(self):
34 return repr(self)
35
36 def __unicode__(self):
37 return repr(self)
38
39
40class Program(Document):
41 name = StringField(required=True, unique=True)
42
43 def __repr__(self):
44 return self.name
45
46 def __unicode__(self):
47 return repr(self)
48
49 def __str__(self):
50 return repr(self)
51
52
53class Course(Document):
54 title = StringField(required=True, unique=True)
55 teacher = ReferenceField(Teacher)
56
57 def __repr__(self):
58 return self.title
59
60 def __unicode__(self):
61 return repr(self)
62
63 def __str__(self):
64 return repr(self)
65
66
67class Student(Document):
68 name = StringField(required=True, unique=True)
69 programs = ListField(ReferenceField(Program))
70 courses = ListField(ReferenceField(Course))
71
72 def __repr__(self):
73 return self.name
74
75 def __unicode__(self):
76 return repr(self)
77
78 def __str__(self):
79 return repr(self)
80
81
82class TeacherView(ModelView):
83 datamodel = MongoEngineInterface(Teacher)
84
85 list_columns = ['name']
86
87 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
88 single=False)
89 def muldelete(self, items):
90 self.datamodel.delete_all(items)
91 self.update_redirect()
92 return redirect(self.get_redirect())
93
94
95class CourseView(ModelView):
96 datamodel = MongoEngineInterface(Course)
97
98 list_columns = ['title', 'teacher']
99 show_columns = ['title', 'teacher']
100
101 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
102 single=False)
103 def muldelete(self, items):
104 self.datamodel.delete_all(items)
105 self.update_redirect()
106 return redirect(self.get_redirect())
107
108
109class ProgramView(ModelView):
110 datamodel = MongoEngineInterface(Program)
111 list_columns = ['name']
112
113 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
114 single=False)
115 def muldelete(self, items):
116 self.datamodel.delete_all(items)
117 self.update_redirect()
118 return redirect(self.get_redirect())
119
120
121class StudentView(ModelView):
122 datamodel = MongoEngineInterface(Student)
123
124 list_columns = ['name']
125
126 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
127 single=False)
128 def muldelete(self, items):
129 self.datamodel.delete_all(items)
130 self.update_redirect()
131 return redirect(self.get_redirect())
132
133
134appbuilder.add_view(TeacherView, 'Teachers')
135appbuilder.add_view(CourseView, 'Courses')
136appbuilder.add_view(StudentView, 'Students')
137appbuilder.add_view(ProgramView, 'Programs')
138
139def add_data():
140
141 Program(name="Bachelor of Science IT").save()
142 Program(name="Bachelor of Science Computer Science").save()
143 dolf = Teacher(name='Dolf Andringa').save()
144 Course(title="Introduction to Programming using Pyhon",
145 teacher=dolf).save()
146 Course(title="Mathematics I", teacher=dolf).save()
147
148
149if __name__ == '__main__':
150 if len(sys.argv) > 1 and sys.argv[1] == '--add_data':
151 add_data()
152 else:
153 app.run()