· 7 years ago · Oct 26, 2018, 04:26 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 CourseView(ModelView):
83 datamodel = MongoEngineInterface(Course)
84
85 list_columns = ['title', 'teacher']
86 show_columns = ['title', 'teacher']
87
88 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
89 single=False)
90 def muldelete(self, items):
91 self.datamodel.delete_all(items)
92 self.update_redirect()
93 return redirect(self.get_redirect())
94
95
96class ProgramView(ModelView):
97 datamodel = MongoEngineInterface(Program)
98 list_columns = ['name']
99
100 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
101 single=False)
102 def muldelete(self, items):
103 self.datamodel.delete_all(items)
104 self.update_redirect()
105 return redirect(self.get_redirect())
106
107
108class StudentView(ModelView):
109 datamodel = MongoEngineInterface(Student)
110 related_views = [CourseView, ProgramView]
111
112 list_columns = ['name']
113
114 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
115 single=False)
116 def muldelete(self, items):
117 self.datamodel.delete_all(items)
118 self.update_redirect()
119 return redirect(self.get_redirect())
120
121
122class TeacherView(ModelView):
123 datamodel = MongoEngineInterface(Teacher)
124
125 list_columns = ['name']
126
127 @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
128 single=False)
129 def muldelete(self, items):
130 self.datamodel.delete_all(items)
131 self.update_redirect()
132 return redirect(self.get_redirect())
133
134
135appbuilder.add_view(TeacherView, 'Teachers')
136appbuilder.add_view(CourseView, 'Courses')
137appbuilder.add_view(StudentView, 'Students')
138appbuilder.add_view(ProgramView, 'Programs')
139
140def add_data():
141
142 Program(name="Bachelor of Science IT").save()
143 Program(name="Bachelor of Science Computer Science").save()
144 dolf = Teacher(name='Dolf Andringa').save()
145 Course(title="Introduction to Programming using Pyhon",
146 teacher=dolf).save()
147 Course(title="Mathematics I", teacher=dolf).save()
148
149
150if __name__ == '__main__':
151 if len(sys.argv) > 1 and sys.argv[1] == '--add_data':
152 add_data()
153 else:
154 app.run()