示例#1
0
def save_thumbnail(picture_id):
    """通过图片ID,查找图片,生产略缩图,存储本地,然后存储数据库"""

    pub_picture = PubPicture.query.filter(PubPicture.id == picture_id).first()
    save_path = pub_picture.base_path + pub_picture.rel_path + "/"
    picture = save_path + pub_picture.pic_name
    im = Image.open(picture)
    im.thumbnail((256, 256))
    thumbnail_name = time_file_name(pub_picture.upload_name, sign="nail") + ".jpeg"
    im.save(save_path + thumbnail_name, "jpeg")
    pub_picture.thumbnail = thumbnail_name

    im_250 = Image.open(picture)
    im_250.thumbnail((2000, 250))
    thumbnail_250 = time_file_name(pub_picture.upload_name, sign="nail") + ".jpeg"
    im_250.save(save_path + thumbnail_250, "jpeg")
    pub_picture.thumbnail_250 = thumbnail_250

    db.commit()
示例#2
0
def save_activity_thumbnail(picture_id):
    """通过图片ID,查找图片,生产略缩图,存储本地,然后存储数据库"""

    activity_picture = ActivityPicture.query.filter(ActivityPicture.id == picture_id).first()
    save_path = activity_picture.base_path + activity_picture.rel_path + '/'
    picture = save_path + activity_picture.pic_name
    im = Image.open(picture)
    im.thumbnail((256, 256))
    thumbnail_name = time_file_name(activity_picture.upload_name, sign='nail') + '.jpeg'
    im.save(save_path+thumbnail_name, 'jpeg')
    activity_picture.thumbnail = thumbnail_name
    db.commit()
示例#3
0
def save_pub_pictures(pub_id, pictures):
    """保存酒吧图片"""
    for picture in pictures:
        if not allowed_file_extension(picture.filename, PUB_PICTURE_ALLOWED_EXTENSION):
            continue
        else:
            upload_name = picture.filename
            base_path = PUB_PICTURE_BASE_PATH
            rel_path = PUB_PICTURE_UPLOAD_FOLDER
            pic_name = time_file_name(secure_filename(upload_name), sign=pub_id)
            pub_picture = PubPicture(pub_id, base_path, rel_path, pic_name, upload_name, cover=0)
            db.add(pub_picture)
            picture.save(os.path.join(base_path + rel_path + "/", pic_name))
            db.commit()
            save_thumbnail(pub_picture.id)
示例#4
0
def save_activity_pictures(activity_id, pictures):
    """保存酒吧图片"""
    for picture in pictures:
        if not allowed_file_extension(picture.filename, ACTIVITY_PICTURE_ALLOWED_EXTENSION):
            continue
        else:
            upload_name = picture.filename
            base_path = ACTIVITY_PICTURE_BASE_PATH
            rel_path = ACTIVITY_PICTURE_UPLOAD_FOLDER
            pic_name = time_file_name(secure_filename(upload_name), sign=activity_id)
            activity_picture = ActivityPicture(activity_id, base_path, rel_path, pic_name, upload_name, cover=0)
            db.add(activity_picture)
            picture.save(os.path.join(base_path+rel_path+'/', pic_name))
            db.commit()
            save_thumbnail(activity_picture.id)
示例#5
0
def check_save_pub_type_pictures(pub_type_pictures, model=None, update=None):
    """图片的长宽比例的保证,其中有两个可能"""
    for picture in pub_type_pictures:
        if (update is not None) and (model is not None):
            old_picture = str(model.base_path) + str(model.rel_path) + "/" + str(model.pic_name)
        if picture.filename == "":  # 或许没有图片
            return True
        if not allowed_file_extension(picture.filename, PUB_TYPE_ALLOWED_EXTENSION):
            flash(u"图片格式不支持啊,png,jpeg支持", "error")
            return False
        upload_name = picture.filename
        base_path = PUB_TYPE_BASE_PATH
        rel_path = PUB_TYPE_UPLOAD_FOLDER
        pic_name = time_file_name(secure_filename(upload_name))
        picture.save(os.path.join(base_path + rel_path + "/", pic_name))

        image = Image.open(os.path.join(base_path + rel_path + "/", pic_name))

        if model is not None:
            if model.id == 1:
                if image.size != (440, 199):
                    flash(u"图片需要固定大小的哦 440*199", "error")
                    os.remove(os.path.join(base_path + rel_path + "/", pic_name))
                    return False
            else:
                if image.size != (211, 119):
                    flash(u"图片需要固定大小的哦 211*119", "error")
                    os.remove(os.path.join(base_path + rel_path + "/", pic_name))
                    return False
        else:
            if image.size != (211, 119):
                flash(u"图片需要固定大小的哦 211*119", "error")
                os.remove(os.path.join(base_path + rel_path + "/", pic_name))
                return False
        if (update is not None) and (model is not None):
            try:
                os.remove(old_picture)
            except:
                flash("remove %s failed!", old_picture)

        model.base_path = base_path
        model.rel_path = rel_path
        model.pic_name = pic_name

        return True
示例#6
0
    def upload(self, path=None):
        """
            Upload view method

            :param path:
                Optional directory path. If not provided, will use the base directory
        """
        # Get path and verify if it is valid
        base_path, directory, path = self._normalize_path(path)

        if not self.can_upload:
            flash(gettext('File uploading is disabled.'), 'error')
            return redirect(self._get_dir_url('.index', path))

        if not self.is_accessible_path(path):
            flash(gettext(gettext('Permission denied.')))
            return redirect(self._get_dir_url('.index'))

        form = UploadForm(self)
        if helpers.validate_form_on_submit(form):
            activity_id = request.args.get('activity_id')
            if not activity_id:
                flash(gettext('这里无法上传图片,修改酒吧即可看到图片管理按钮。'), 'error')
                return redirect("/admin/activitypicturefile")  # todo-lyw ugly
            upload_name = secure_filename(form.upload.data.filename)
            pic_name = time_file_name(upload_name, sign=activity_id)
            save_path_name = op.join(directory, pic_name)

            if not allowed_file_extension(upload_name, ACTIVITY_PICTURE_ALLOWED_EXTENSION):
                flash(gettext('File "%(name)s" must be a picture!', name=pic_name),
                      'error')
            else:
                try:
                    self.save_file(save_path_name, form.upload.data)
                    picture = ActivityPicture(activity_id, ACTIVITY_PICTURE_BASE_PATH, ACTIVITY_PICTURE_UPLOAD_FOLDER,
                                              pic_name, upload_name, cover=0)
                    db.add(picture)
                    db.commit()
                    save_activity_thumbnail(picture.id)  # 生产略缩图文件,保存到本地,然后数据库添加数据
                    self.on_file_upload(directory, path, pic_name)
                    return redirect('/admin/activitypicturefile/?activity_id=' + str(request.args.get('activity_id')))
                except Exception as ex:
                    flash(gettext('Failed to save file: %(error)s', error=ex))

        return self.render(self.upload_template, form=form)
示例#7
0
文件: user.py 项目: pesome/pub_py
    def post(user_id):
        parser = reqparse.RequestParser()
        parser.add_argument('login_type', type=int, required=True, help=u'登陆必须需要login_type')
        parser.add_argument('password', type=str, required=False)
        parser.add_argument('open_id', type=str, required=False)
        parser.add_argument('new_password', type=str, required=False)
        parser.add_argument('login_name', type=str, required=False)
        parser.add_argument('nick_name', type=str, required=False)
        parser.add_argument('system_message_time', type=int, required=False)
        parser.add_argument('mobile', type=str, required=False)
        parser.add_argument('tel', type=str, required=False)
        parser.add_argument('real_name', type=str, required=False)
        parser.add_argument('sex', type=int, required=False)
        parser.add_argument('birthday_type', type=int, required=False)
        parser.add_argument('birthday', type=str, required=False)
        parser.add_argument('intro', type=str, required=False)
        parser.add_argument('signature', type=str, required=False)
        parser.add_argument('ethnicity_id', type=str, required=False)
        parser.add_argument('company', type=str, required=False)
        parser.add_argument('job', type=str, required=False)
        parser.add_argument('email', type=str, required=False)
        parser.add_argument('province_id', type=str, required=False)
        parser.add_argument('city_id', type=str, required=False)
        parser.add_argument('county_id', type=str, required=False)
        parser.add_argument('street', type=str, required=False)
        parser.add_argument('head_picture', type=werkzeug.datastructures.FileStorage, location='files')
        args = parser.parse_args()

        login_type = args.get('login_type')
        password = args.get('password', None)
        open_id = args.get('open_id', None)
        new_password = args.get('new_password', None)
        login_name = args.get('login_name', None)
        nick_name = args.get('nick_name', None)
        system_message_time = args.get('system_message_time', None)
        mobile = args.get('mobile', None)
        tel = args.get('tel', None)
        real_name = args.get('real_name', None)
        sex = args.get('sex', None)
        birthday_type = args.get('birthday_type', None)
        birthday = args.get('birthday', None)
        intro = args.get('intro', None)
        signature = args.get('signature', None)
        ethnicity_id = args.get('ethnicity_id', None)
        company = args.get('company', None)
        job = args.get('job', None)
        email = args.get('email', None)
        province_id = args.get('province_id', None)
        city_id = args.get('city_id', None)
        county_id = args.get('county_id', None)
        street = args.get('street', None)
        head_picture = args.get('head_picture', None)

        err = {'status': 1}

        if login_type == 0:
            if not password:
                err['message'] = '注册用户获取和改变个人资料需要密码'
                return err
            user = User.query.filter(User.id == user_id).first()
            if not user.check_password(password):
                err['message'] = '密码错误'
                return err
            user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first()
            if login_name:
                if User.query.filter(User.login_name == login_name).count():
                    err['message'] = 'login_name已存在'
                    return err
            if nick_name:
                if User.query.filter(User.nick_name == nick_name).count():
                    err['message'] = 'nick_name已存在'
                    return err
            if head_picture:
                if not allowed_file_extension(head_picture.stream.filename, HEAD_PICTURE_ALLOWED_EXTENSION):
                    err['message'] = '图片的格式不支持,png jpg jpeg gif支持'
                    return err
                old_head_picture = user_info.base_path + user_info.rel_path + '/' + user_info.pic_name
                user_info.upload_name = head_picture.stream.filename
                user_info.base_path = HEAD_PICTURE_BASE_PATH
                user_info.rel_path = HEAD_PICTURE_UPLOAD_FOLDER
                user_info.pic_name = time_file_name(secure_filename(head_picture.stream.filename), sign=user_id)
                head_picture.save(os.path.join(user_info.base_path+user_info.rel_path+'/', user_info.pic_name))
                try:
                    os.remove(old_head_picture)
                except:
                    pass
            if login_name:
                user.login_name = login_name
            if nick_name:
                user.nick_name = nick_name
            if new_password:
                user.change_password(password, new_password)
            if system_message_time:  # 1
                if not user.system_message_time:
                    user.system_message_time = todayfstr()
            else:
                user.system_message_time = None
            if mobile:
                user_info.mobile = mobile
            if tel:
                user_info.tel = tel
            if real_name:
                user_info.real_name = real_name
            if sex:
                user_info.sex = sex
            if birthday_type:
                user_info.birthday_type = birthday_type
            if birthday:
                user_info.birthday = birthday
            if intro:
                user_info.intro = intro
            if signature:
                user_info.signature = signature
            if ethnicity_id:
                user_info.ethnicity_id = ethnicity_id
            if company:
                user_info.company = company
            if job:
                user_info.job = job
            if email:
                user_info.email = email
            if province_id:
                user_info.province_id = province_id
            if city_id:
                user_info.city_id = city_id
            if county_id:
                user_info.county_id = county_id
            if street:
                user_info.street = street

            db.add(user)
            db.add(user_info)
            db.commit()
            user = User.query.filter(User.id == user_id).first()
            user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first()

            return {'user': pickler.flatten(user), 'user_info': pickler.flatten(user_info), 'status': 0}

        if login_type == 1 or login_type == 2:
            if not open_id:
                err['message'] = '第三方登录用户必须需要open_id'
                return err
            user = User.query.filter(User.id == user_id).first()
            user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first()
            if nick_name:
                if User.query.filter(User.nick_name == nick_name).count():
                    err['message'] = 'nick_name已存在'
                    return err
            if head_picture:
                if not allowed_file_extension(head_picture.stream.filename, HEAD_PICTURE_ALLOWED_EXTENSION):
                    err['message'] = '图片的格式不支持,png jpg jpeg gif支持'
                    return err
                old_head_picture = user_info.base_path + user_info.rel_path + '/' + user_info.pic_name
                user_info.upload_name = head_picture.stream.filename
                user_info.base_path = HEAD_PICTURE_BASE_PATH
                user_info.rel_path = HEAD_PICTURE_UPLOAD_FOLDER
                user_info.pic_name = time_file_name(secure_filename(head_picture.stream.filename), sign=user_id)
                head_picture.save(os.path.join(user_info.base_path+user_info.rel_path+'/', user_info.pic_name))
                try:
                    os.remove(old_head_picture)
                except:
                    pass
            if nick_name:
                user.nick_name = nick_name
            if system_message_time:  # 1
                if not user.system_message_time:
                    user.system_message_time = todayfstr()
            else:
                user.system_message_time = None
            if mobile:
                user_info.mobile = mobile
            if tel:
                user_info.tel = tel
            if real_name:
                user_info.real_name = real_name
            if sex:
                user_info.sex = sex
            if birthday_type:
                user_info.birthday_type = birthday_type
            if birthday:
                user_info.birthday = birthday
            if intro:
                user_info.intro = intro
            if signature:
                user_info.signature = signature
            if ethnicity_id:
                user_info.ethnicity_id = ethnicity_id
            if company:
                user_info.company = company
            if job:
                user_info.job = job
            if email:
                user_info.email = email
            if province_id:
                user_info.province_id = province_id
            if city_id:
                user_info.city_id = city_id
            if county_id:
                user_info.county_id = county_id
            if street:
                user_info.street = street

            db.add(user)
            db.add(user_info)
            db.commit()
            user = User.query.filter(User.id == user_id).first()
            user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first()

            return {'user': pickler.flatten(user), 'user_info': pickler.flatten(user_info), 'status': 0}