Beispiel #1
0
def user_info():
    form = InfoForm()
    user = User.query.get_or_404(int(session.get("user_id")))
    if request.method == "GET":
        form.user_jianjie.data = user.jianjie
    if form.validate_on_submit():
        old_name = user.name
        user.name = form.data["user_name"]
        user.email = form.data["user_email"]
        user.phone = form.data["user_phone"]
        user.jianjie = form.user_jianjie.data
        filestorage = request.files["user_face"]
        # 判断用户是否上传了新的头像文件
        if filestorage.filename != "":
            # 如果上传了符合要求的新的头像文件,则首先删除旧的,再保存新的
            userface_path = photosSet.path(filename=user.face, folder=old_name)
            os.remove(path=userface_path)
            # 更新 user.face 中保存的头像文件名
            user.face = secure_filename_with_uuid(filestorage.filename)
            photosSet.save(storage=filestorage, folder=old_name, name=user.face)

        # 如果用户修改了用户名, 就修改用户的上传文件夹
        if old_name != user.name:
            os.rename(os.path.join(app.config["UPLOADS_FOLDER"], old_name),
                      os.path.join(app.config["UPLOADS_FOLDER"], user.name))
        # 更新数据项
        db.session.add(user)
        db.session.commit()
        session["user_name"] = user.name
        session["user_id"] = user.id
        return redirect(url_for("home.user_detail"))
    return render_template("home/user_info.html", user=user, form=form)
Beispiel #2
0
def user_article_mine_modify(id):
    form = ArticleInfoForm()
    article_tags = ArticleTag.query.all()
    form.article_tag.choices = [(tag.id, tag.name) for tag in article_tags]
    form.article_cover.validators = [FileAllowed(IMAGES, '只允许图像格式为:%s' % str(IMAGES)), ]
    article = Article.query.get_or_404(id)
    if request.method == "GET":
        form.article_title.data = article.title
        form.article_abstract.data = article.abstract
        form.article_privacy.data = article.privacy
        form.article_tag.data = article.tag_id
        form.article_recmm.data = article.recommed
    if form.validate_on_submit():
        article.title = form.article_title.data
        article.abstract = form.article_abstract.data
        article.privacy = form.article_privacy.data
        article.tag_id = int(form.article_tag.data)
        article.recommed = int(form.article_recmm.data)
        # 保存新的封面图像
        fs = request.files.get(form.article_cover.name)
        if fs.filename != '':
            # 删除原来的封面图像
            coverpath = photosSet.path(filename=article.cover)
            if os.path.isfile(coverpath):
                os.remove(coverpath)
            covername = secure_filename_with_uuid(fs.filename)
            subfolder = session.get("user_name") + '/' + article.uuid
            article.cover = photosSet.save(fs, folder=subfolder, name=covername)
        db.session.add(article)
        db.session.commit()
        return redirect(url_for('home.user_article_mine', page=1))
    return render_template("home/user_article_mine_modify.html", form=form)
Beispiel #3
0
def user_regist():
    form = RegistForm()
    if form.validate_on_submit():
        # 查看用户名是否已经存在
        user_name = form.user_name.data
        user_x = User.query.filter_by(name=user_name).first()
        if user_x:
            flash("用户名已经存在!", category='err')
            return render_template('home/user_regist.html', form=form)
        user_x = User.query.filter_by(email=form.user_email.data).first()
        if user_x:
            flash("邮箱已经被注册过!", category='err')
            return render_template('home/user_regist.html', form=form)
        user_x = User.query.filter_by(phone=form.user_phone.data).first()
        if user_x:
            flash("手机号已经被注册过!", category='err')
            return render_template('home/user_regist.html', form=form)
        # 如果用户不存在,创建一个用户类的实例
        user = User()
        user.name = form.user_name.data
        user.pwd = generate_password_hash(form.user_pwd.data)
        user.email = form.user_email.data
        user.phone = form.user_phone.data
        user.jianjie = form.user_jianjie.data
        user.uuid = str(uuid.uuid4().hex)[0:10]  # 给每个用户分配一个10个字符的身份标识符
        filestorage = request.files["user_face"]
        user.face = secure_filename_with_uuid(filestorage.filename)
        # 保存用户头像文件,执行插入操作
        try:
            photosSet.save(storage=filestorage, folder=user.name, name=user.face)
            db.session.add(user)
            db.session.commit()
            flash("用户注册成功!", category='ok')
            return redirect(url_for("home.user_login", username=user.name))
        except UploadNotAllowed:
            flash("头像文件格式不对!", category='err')
            return render_template('home/user_regist.html', form=form)
    return render_template('home/user_regist.html', form=form)
Beispiel #4
0
def album_upload():
    form = AlbumSelectForm()
    albums = Album.query.filter_by(user_id=session.get("user_id")).all()
    form.album_title.choices = [(item.id, item.title) for item in albums]
    if len(form.album_title.choices) < 1:
        flash(message="请先创建一个相册!再上传照片", category='err')
        return redirect(url_for("home.album_create"))
    if request.method == "POST":
        fs_keys = request.files.keys()
        album_id = int(request.args.get('aid'))
        for key in fs_keys:
            fs = request.files.get(key)
            album_title = ''
            for id, title in form.album_title.choices:
                if id == album_id:
                    album_title = title
            folder = session.get("user_name") + '/' + album_title
            name_orig = secure_filename_with_uuid(fs.filename)
            fname = photosSet.save(fs, folder=folder, name=name_orig)
            ts_path = photosSet.config.destination + '/' + folder
            # 创建并保存缩略图
            name_thumb = create_thumbnail(path=ts_path, filename=name_orig, base_width=300)
            # 创建并保存展示图
            name_show = create_show(path=ts_path, filename=name_orig, base_width=800)
            # 把产生的Photo对象保存到数据库
            photo = Photo(origname=name_orig, showname=name_show, thumbname=name_thumb,
                          album_id=album_id)
            db.session.add(photo)
            db.session.commit()
            # 设置封面文件
            album_cover = photo.thumbname
        # 更新相册的信息
        album = Album.query.get_or_404(album_id)
        album.photonum += 1
        album.cover = album_cover
        db.session.add(album)
        db.session.commit()
        # message = "成功保存:" + str(1) + "张图像; "
        # message += "当前相册共有:" + str(album.photonum) + "张图像"
        # flash(message=message, category='ok')
        return redirect(url_for('home.album_upload'))
    return render_template("home/album_upload_dropzone.html", form=form)
Beispiel #5
0
def user_album_mine_photo_add(id):
    album = Album.query.get_or_404(id)
    if request.method == 'GET':
        folder = album.user.name + '/' + album.title
        for photo in album.photos:
            photo.url = photosSet.url(folder + '/' + photo.thumbname)
    if request.method == "POST":
        # 通过 files.getlist() 获得上传的 FileStorage 文件对象列表
        fses = request.files.getlist("album_upload")
        # 检查文件扩展名,将合格的文件过滤出来
        valid_fses = check_filestorages_extension(fses, ALLOWED_IMAGE_EXTENSIONS)
        if len(valid_fses) < 1:
            flash(message="只允许上传文件类型:" + str(ALLOWED_IMAGE_EXTENSIONS), category='err')
            return redirect(url_for("home.user_album_mine_adddel", id=id))
        else:
            # 开始遍历保存每一个合格文件
            for fs in valid_fses:
                folder = session.get("user_name") + '/' + album.title
                name_orig = secure_filename_with_uuid(fs.filename)
                fname = photosSet.save(fs, folder=folder, name=name_orig)
                ts_path = photosSet.config.destination + '/' + folder
                # 创建并保存缩略图
                name_thumb = create_thumbnail(path=ts_path, filename=name_orig, base_width=300)
                # 创建并保存展示图
                name_show = create_show(path=ts_path, filename=name_orig, base_width=800)
                # 把产生的Photo对象保存到数据库
                photo = Photo(origname=name_orig, showname=name_show, thumbname=name_thumb,
                              album_id=album.id)
                db.session.add(photo)
                db.session.commit()
            album.photonum += len(valid_fses)
            db.session.add(album)
            db.session.commit()
            message = "成功保存:" + str(len(valid_fses)) + "张图像; "
            message += "当前相册共有:" + str(album.photonum) + "张图像"
            flash(message=message, category='ok')
        return redirect(url_for("home.user_album_mine_photo_add", id=id))
    return render_template('home/user_album_mine_adddel.html',
                           album=album, form=PhotoAddForm())
Beispiel #6
0
def article_create():
    form = ArticleInfoForm()
    article_tags = ArticleTag.query.all()
    form.article_tag.choices = [(tag.id, tag.name) for tag in article_tags]
    if form.validate_on_submit():
        article = Article()
        article.title = form.article_title.data
        article.abstract = form.article_abstract.data
        article.privacy = form.article_privacy.data
        article.tag_id = form.article_tag.data
        article.recommed = form.article_recmm.data
        article.content = ""
        article.user_id = int(session.get("user_id"))
        article.uuid = str(uuid.uuid4().hex)[0:15]
        fs = request.files.get(form.article_cover.name)
        if fs.filename != '':
            covername = secure_filename_with_uuid(fs.filename)
            subfolder = session.get("user_name") + '/' + article.uuid
            article.cover = photosSet.save(fs, folder=subfolder, name=covername)
        db.session.add(article)
        db.session.commit()
        return redirect(url_for("home.article_write", aid=article.id))
    return render_template("home/article_create.html", form=form)