def send_auth_captcha(identity): """Send authentication captcha to an identity, the identity can be a cellphone or an email. """ if not identity: raise Exception('Identity is not provided.') if CELLPHONE_PATTERN.match(identity): user = User.objects.get(cellphone=identity, cellphoneBindingCaptcha__exists=False, status=1) now = datetime.now() user.cellphoneAuthCaptcha = Captcha(captcha=str(random())[2:8], expireTime=datetime.fromtimestamp(now.timestamp() + 30 * 60)) user.updateTime = now user = user.save() template = Loader('templates/account/').load('cellphone_auth_captcha.txt') content = template.generate(captcha=user.cellphoneAuthCaptcha.captcha) send_sms(user.cellphone, content.decode('utf-8')) return user elif EMAIL_PATTERN.match(identity): user = User.objects.get(email=identity, emailBindingCaptcha__exists=False, status=1) now = datetime.now() user.emailAuthCaptcha = Captcha(captcha=md5((str(random())[2:]).encode('utf-8')).hexdigest(), expireTime=datetime.fromtimestamp(now.timestamp() + 24 * 60 * 60)) user.updateTime = now user = user.save() template = Loader('templates/account/').load('email_auth_captcha.html') content = template.generate(captcha=user.emailAuthCaptcha.captcha) send_mail([user.email], '身份验证', content.decode('utf-8')) return user else: raise Exception('Invalid identity.')
def gen_db_model(self, schema_name, table_name): sql = """ SELECT column_name, column_default, data_type, column_key, is_nullable, character_maximum_length, column_comment FROM information_schema.columns WHERE TABLE_SCHEMA = :schema_name AND TABLE_NAME = :table_name ORDER BY ORDINAL_POSITION""" with self.create_session(self._default_db) as session: entities = session.execute(sql, dict(schema_name=schema_name, table_name=table_name)) metas = [GenMeta(entity) for entity in entities if entity[0] != 'pkid'] model_meta = DbModelMeta() model_meta.table_metas = metas for meta in metas: if model_meta.has_id is False: model_meta.has_id = meta.column_name == 'id' model_meta.is_string_id = meta.column_name == 'id' and \ u'varchar' == meta.data_type if model_meta.has_created_at is False: model_meta.has_created_at = meta.column_name == 'created_at' if model_meta.has_updated_at is False: model_meta.has_updated_at = meta.column_name == 'updated_at' if model_meta.has_is_deleted is False: model_meta.has_is_deleted = meta.column_name == 'is_deleted' model_meta.class_name = inflection.singularize(inflection.camelize(table_name)) template_path = os.path.join(os.path.dirname(__file__)) t = Loader(template_path, **{}).load('model.tpl') print t.generate(**model_meta.__dict__)
def _send_binding_captcha(self, cellphone=False, email=False): """Send binding captcha. """ # Prepare captcha. now = datetime.now() if cellphone and self.cellphoneBindingCaptcha: self.cellphoneBindingCaptcha = Captcha(captcha=str(random())[2:8], expireTime=datetime.fromtimestamp(now.timestamp() + 30 * 60)) if email and self.emailBindingCaptcha: self.emailBindingCaptcha = Captcha(captcha=md5((str(random())[2:]).encode('utf-8')).hexdigest(), expireTime=datetime.fromtimestamp(now.timestamp() + 24 * 60 * 60)) # Save captcha. self.updateTime = now new_self = self.save() # Send captcha. if cellphone: template = Loader('templates/account/').load('cellphone_binding_captcha.txt') content = template.generate(captcha=new_self.cellphoneBindingCaptcha.captcha) send_sms(new_self.cellphone, content.decode('utf-8')) if email: template = Loader('templates/account/').load('email_binding_captcha.html') content = template.generate(captcha=new_self.emailBindingCaptcha.captcha) send_mail([new_self.email], '确认注册邮箱', content.decode('utf-8')) return new_self