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)
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)
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)
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)
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())
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)