class Account(db.Document): # 用户id account_id = db.IntField() # 手机号 username = db.StringField(unique=True, required=True) # 手机号 phone = db.StringField() # email email = db.StringField() # 区域 phone_area = db.StringField() # 密码, md5后的密码 password = db.StringField(max_length=50, min_length=8, required=True) # 用户名 nickname = db.StringField() # 登录类型 loginType = db.StringField() # 用户id user_id = db.StringField() # 会话 sessionid = db.StringField() # 创建时间 create_time = db.FloatField( default=time.mktime(datetime.now().timetuple())) # 更新时间 update_time = db.FloatField( default=time.mktime(datetime.now().timetuple())) # 账号列表,当前用户拥有的wky账号列表 devices = db.ListField(db.ReferenceField(Device)) income = db.EmbeddedDocumentField('Income') device_info = db.EmbeddedDocumentField('DeviceInfo') def __str__(self): pass
class Monitorados(db.Document): meta = {'collection': 'Monitorados'} cod_audio = db.StringField(required=True) cod_usu = db.StringField(required=True) datahora = db.DateTimeField() total_ptpositivo = db.IntField(required=True) total_ptnegativo = db.IntField(required=True) sentditas = db.ListField(db.EmbeddedDocumentField(sentDitas)) sentnditas = db.ListField(db.EmbeddedDocumentField(sentNDitas))
class StaticRow(db.Document): siteName = db.StringField() siteID = db.StringField() zoneID = db.StringField() rowID = db.StringField() firmwareVersion = db.StringField() boardSerialNo = db.StringField() stow = db.EmbeddedDocumentField(Stow) limits = db.EmbeddedDocumentField(Limits) position = db.EmbeddedDocumentField(Position) meta = {'collection': 'StaticRow'}
class User(db.Document): uid = db.StringField(required=True, unique=True, default=lambda: uid_generator()) email = db.EmailField(required=True, unique=True) password = db.StringField(required=True) authorization = db.EmbeddedDocumentField(UserAuthorization, default=UserAuthorization) profile = db.EmbeddedDocumentField(UserProfile, default=UserProfile) activity = db.EmbeddedDocumentField(UserActivity, default=UserActivity) meta = {'indexes': ['email', 'uid'], 'ordering': ['-activity.created']} def hash_token(self, token): return pwd_context.encrypt(token) def verify_token(self, token): for db_token in self.activity.valid_tokens: if (pwd_context.verify(token, db_token)): return True return False def remove_token(self, token): for db_token in self.activity.valid_tokens: if (pwd_context.verify(token, db_token)): self.activity.valid_tokens.remove(db_token) return True return False def hash_password(self, password): self.password = pwd_context.encrypt(password) def verify_password(self, password): return pwd_context.verify(password, self.password) def generate_auth_token(self, expiration=600): # s = Serializer(app.config['SECRET_KEY'], expires_in=expiration) s = Serializer(SECRET_KEY, expires_in=expiration) return s.dumps({'uid': str(self.uid)}) @staticmethod def verify_auth_token(token): s = Serializer(SECRET_KEY) try: data = s.loads(token) except SignatureExpired: return None # valid token, but expired except BadSignature: return None # invalid token user = User.objects.filter(uid=data['uid']).first() return user
class ControllerInfo(db.EmbeddedDocument): siteName = db.StringField() siteID = db.StringField() zoneID = db.StringField() rowID = db.StringField() firmwareVersion = db.StringField() boardSerialNo = db.IntField() threshold_wind_speed = db.FloatField() table_length = db.FloatField() table_width = db.FloatField() stow = db.EmbeddedDocumentField(Stow) limits = db.EmbeddedDocumentField(Limits) position = db.EmbeddedDocumentField(Position)
class Animals(db.Document): title = db.StringField(required=True, max_length=30, min_length=1) route = db.StringField(required=True, max_length=25, min_length=1) categories = db.ReferenceField(Categories) description = db.MapField(db.EmbeddedDocumentField(DescriptionItem)) descriptionExtended = db.MapField( db.EmbeddedDocumentField(DescriptionItem)) contact = db.DictField() address = db.DictField() conditions = db.DictField() pageText = db.StringField(required=True, max_length=500, min_length=1) adjective = db.StringField(required=True, max_length=50, min_length=1) images = db.ListField()
class GameRoom(db.Document): word = db.StringField(default="") waiting = db.BooleanField(default=True) currentQuestion = db.StringField(default="") gameFinished = db.BooleanField(default=False) winner = db.ListField(db.StringField()) bothAnswered = db.BooleanField(default=False) members = db.ListField(db.EmbeddedDocumentField(Player),default=list) answers = db.ListField(db.EmbeddedDocumentField(PlayerAnswer)) questions = db.ListField(db.StringField()) hasBot = db.BooleanField(default=False) botName = db.StringField(default="") created_at = db.DateTimeField(default=datetime.datetime.utcnow)
class UserActivity(db.EmbeddedDocument): created = db.DateTimeField(default=lambda: now()) email_verification = db.EmbeddedDocumentField(EmailVerification, default=EmailVerification) password_reset = db.EmbeddedDocumentField(PasswordReset, default=PasswordReset) user_restricted = db.BooleanField(default=False) failed_logins = db.IntField(default=0) user_banned = db.BooleanField(default=False) valid_tokens = db.ListField() payment_reference = db.StringField(min_length=UID_SIZE, max_length=UID_SIZE, unique=True) activity_audit = db.ListField(db.ReferenceField(ActivityAudit))
class Book(db.Document): isbn = db.StringField(required=True, unique=True, primary_key=True) title = db.StringField(required=True) origin_title = db.StringField() subtitle = db.StringField() author = db.ListField(db.StringField()) translator = db.ListField(db.StringField()) create_time = db.IntField(default=time_int, required=True) publish_time = db.StringField() image = db.EmbeddedDocumentField(CDNImage, required=True) page = db.IntField() catelog = db.StringField() price = db.DecimalField() publisher = db.StringField() description = db.StringField() author_description = db.StringField() tag = db.ListField(db.EmbeddedDocumentField(BookTag)) binding = db.StringField() rate = db.FloatField() reason = db.StringField(require=True) enabled = db.BooleanField(default=True) need_to_refund = db.IntField(default=0) need_to_replace = db.IntField(default=0) class NotBookInstance(Exception): pass def __unicode__(self): return u'《{}》'.format(self.title) def save(self): me = super(Book, self).save() if not me.image.is_cdn: image_url = save_image(me.image.url, str(me.pk)) me.image.url = image_url me.image.is_cdn = True me.save() return me def add_storehouse(self, number, add_type): if add_type == 'REFUND': self.need_to_refund += number self.save() elif add_type == 'REPLACE': self.need_to_replace += number self.save()
class Channel(db.Document): name = db.StringField(required=True, unique=True) messages = db.ListField(db.EmbeddedDocumentField(Message)) def __str__(self): return self.name
class Image(db.Document): meta = { 'collection': 'image', 'ordering': ['-img_id'], 'strict': False, } img_id = db.IntField() url = db.ListField(db.StringField()) word = db.StringField(max_length=512) author = db.StringField() board = db.StringField() w_list = db.ListField(db.StringField()) m_list = db.ListField(db.StringField()) w = db.IntField(default=0) m = db.IntField(default=0) comments = db.ListField(db.EmbeddedDocumentField(Comment)) visible = db.BooleanField() ct = db.DateTimeField(default=datetime.now) def api_data(self): return dict( img_id=self.img_id, url=self.url, word=self.word, author=self.author, w=self.w, m=self.m, ct=self.ct.__str__(), comments_num=len(self.comments), )
class Cart(db.Document): user_id = db.IntField(required=True) products = db.ListField(db.EmbeddedDocumentField(Product)) meta = {'collection': 'products_in_cart', 'indexes': ['user_id']} @classmethod def add_document(cls, user_id, product_id, count): cart = Cart.objects(user_id=user_id).first() if cart is None: cart = cls(user_id=user_id) product = Product(product_id=product_id, count=count) if product in cart.products: index = cart.products.index(product) existing_product = cart.products[index] existing_product.count += product.count return cart products = [product] if len(cart.products) == 0: cart.products = products else: cart.products.extend(products) return cart
class Person(db.Document): name = db.StringField(required=True, unique=True) quotes = db.ListField(db.EmbeddedDocumentField(Quote)) @staticmethod def make_person(name): return Person(name=name, quotes=[])
class Jobs(db.Document): customer_name = db.StringField() job_address = db.EmbeddedDocumentField(Address) billing_address = db.EmbeddedDocumentField(Address) email = db.EmailField() customer_phone = db.IntField() description = db.StringField() size = db.StringField() expectedStartDate = db.DateTimeField() expectedEndDate = db.DateTimeField() costPerWorker = db.FloatField() assignedWorkers = db.ListField(db.ReferenceField(Worker)) costPerVehicle = db.FloatField() assignedVehicles = db.ListField(db.ReferenceField(Vehicle)) cleaningEquipments = db.ListField(db.ReferenceField(Equipment)) status = db.BooleanField()
class Course(db.Document): """Modeling of a course object. course_id: integer title: string year: integer description: string prerequisites: list(integer), list of course ids instructor: integer, instructor's user id enrolled_students: list of students' user ids time_added: datetime, timestamp of the course added to the system start_date: datetime end_date: datetime recurring: boolean, is a recurring course (or not) announcements: list of announcements """ course_id = db.IntField(required=True) #code = db.StringField(max_length=20) title = db.StringField(max_length=60, required=True) year = db.IntField(required=True) description = db.StringField(required=True) prerequisites = db.ListField(db.IntField()) instructor = db.IntField(required=True) #school = db.StringField(max_length=60) enrolled_students = db.ListField(db.IntField()) time_added = db.DateTimeField(default=datetime.now()) start_date = db.DateTimeField(required=True) end_date = db.DateTimeField(required=True) recurring = db.BooleanField(required=True) announcements = db.ListField(db.EmbeddedDocumentField(Announcement))
class Zone(db.Document): siteName = db.StringField() siteID = db.StringField() rows = db.IntField() zoneID = db.StringField() firmwareVersion = db.StringField() position = db.EmbeddedDocumentField(Position) meta = {'collection': 'Zone'}
class Event(db.Document): title = db.StringField(required=True, max_length=120) description = db.StringField(required=True) last_updated = db.DateTimeField(default=datetime.datetime.now()) starting_at = db.DateTimeField(required=True) ending_at = db.DateTimeField() user = db.ReferenceField(User) comments = db.ListField(db.EmbeddedDocumentField('Comment'))
class Tip(db.Document): category = db.ReferenceField(Category) user = db.ReferenceField(User) ctime = db.DateTimeField() title = db.StringField() text_raw = db.StringField() text_rendered = db.StringField() stars = db.ListField(db.EmbeddedDocumentField(Star))
class Information(db.Document): user_id = db.ReferenceField(User, unique=True, required=True) history = db.ListField(db.EmbeddedDocumentField(History), default=list) like = db.ListField(db.ReferenceField(Product, required=True), default=list) cart = db.ListField(db.ReferenceField(Product, required=True), default=list) coupon = db.ListField(db.ReferenceField(Coupon, required=True), default=list)
class User(db.Document): username = db.StringField(max_length=50, required=True) email = db.StringField(required=True) password = db.StringField(required=True) homepage = db.EmbeddedDocumentField(HomePage) role = db.StringField(max_length=20) status = db.StringField(max_length=10) session = db.DictField() #db.StringField() tags = db.ListField(db.StringField(max_length=30))
class Search(db.Document): created_at = db.DateTimeField(default=datetime.datetime.now, required=True) query = db.StringField(default="vaccine") searchItems = db.ListField(db.EmbeddedDocumentField('SearchItem')) meta = { 'allow_inheritance': True, 'indexes': ['-created_at'], 'ordering': ['-created_at'] }
class Person(db.Document): _id = ObjectIdField() name = db.StringField() # ReferenceField (Foreign Key). sex = db.ReferenceField(Sex.Sex, required=True) # List of objects. address = db.ListField(db.EmbeddedDocumentField(Address.Address)) # Allowing Inheritance for extra models meta = {'allow_inheritance': True}
class Report(db.EmbeddedDocument): goal = db.StringField(max_length=140, required=True) summary = db.StringField(max_length=500, required=True) #db.EmbeddedDocumentField(Summary) results = db.StringField(max_length=500, required=True) #db.EmbeddedDocumentField(Results) datapath = db.URLField() analysis = db.EmbeddedDocumentField(Plots) created = db.DateTimeField(help_text='date it was created') modified = db.DateTimeField(help_text='last modified')
class Snapshots(db.Document): url = db.StringField(max_length=1000, required=True) timestamp = db.DateTimeField(required=False, default=datetime.datetime.now) response = db.EmbeddedDocumentField(Responses) sha256 = db.StringField(max_length=256, required=True) screenshot = db.FileField() meta = { 'ordering': ['-timestamp'], }
class Post(db.Document): # Post model, has a list of comments. only title is required title = db.StringField(required=True, max_length=200) content = db.StringField() comments = db.ListField(db.EmbeddedDocumentField(Comment)) name = db.StringField(max_length=50) time = db.DateTimeField() def __repr__(self): return 'Post: {}'.format(self.content)
class Buyer(db.Document, BaseUser): """Buyers Collection""" meta = { 'collection': 'buyers', 'indexes': ['user_id'] } user_id = db.IntField(required=True) name = db.StringField(required=True) email = db.StringField(required=True) password = db.StringField(required=True) mobile_number = db.StringField(min_length=10, max_length=10) addresses = db.ListField(db.EmbeddedDocumentField(Address)) @classmethod def add_document(cls, name, email, password, address_params, user_id=None): address = Address(house_number=address_params['house_number'], house_name=address_params['house_name'], street_name_1=address_params['street_name_1'], street_name_2=address_params['street_name_2'], area=address_params['area'], district=address_params['district'], state=address_params['state'], country=address_params['country'], postal_code=address_params['postal_code'], nearby_landmark=address_params['nearby_landmark'], tag=address_params['tag'], extra=address_params['extra']) if user_id is None: next_id = Counter.get_next_sequence_value('buyers') encrypt_password = bcrypt.generate_password_hash( password, current_app.config.get('BCRYPT_LOG_ROUNDS') ).decode() buyer = cls(user_id=next_id, name=name, email=email, password=encrypt_password) elif isinstance(user_id, int): buyer = cls.objects(user_id=user_id).first() if buyer is None: # TODO return buyer buyer.addresses.append(address) return buyer def __repr__(self): return f'Buyer(id={self.user_id})'
class User(db.Document): # 字段 name = db.StringField(max_length=30, required=True) password = db.StringField(max_length=30, min_length=6, required=True) phone = db.StringField() device = db.ReferenceField(Device1) devices = db.ListField(db.ReferenceField(Device1)) emdevices = db.ListField(db.EmbeddedDocumentField('Device1')) def __str__(self): return "name:{} - phone:{}".format(self.name, self.phone)
class User(UserMixin, db.Document): class Status(IntEnum): NO_ACTIVE = 0 ACTIVE = 1 BANNED = 2 meta = {'collection': 'users', 'auto_create_index': False} email = db.StringField(max_length=30, required=True) password = db.StringField(required=True) created_date = db.DateTimeField(default=datetime.now) status = db.IntField(default=Status.NO_ACTIVE) entries = db.ListField(db.EmbeddedDocumentField(MoneyEntry), default=list) incomes_categories = db.ListField(db.StringField(), default=constants.INCOMES_CATEGORIES) expenses_categories = db.ListField(db.StringField(), default=constants.EXPENSES_CATEGORIES) settings = db.EmbeddedDocumentField(Settings, default=Settings)
class Question(db.Document): question = db.StringField(max_length=511, required=True) answer = db.StringField(max_length=4095) tags = db.ListField(db.EmbeddedDocumentField("Tag")) created_at = db.DateTimeField(default=datetime.datetime.now, required=True) answer_source = db.StringField(max_length=63) answered_at = db.DateTimeField() question_source = db.StringField(max_length=63, required=True) def get_question(self): return self.question
class ClassNote(db.Document): title = db.StringField(required=True,max_length=120) url_title = db.StringField(unique=True,required=True, max_length=120) description = db.StringField() class_date = db.DateTimeField() content = db.StringField() assignment = db.StringField() assignments = db.ListField( db.EmbeddedDocumentField(Assignment) ) github_url = db.StringField(default=None) demo_url = db.StringField(default=None) last_updated = db.DateTimeField(default=datetime.datetime.now()) published = db.BooleanField(default=False)