为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Flask 框架将图片添加到我的帖子中?

如何使用 Flask 框架将图片添加到我的帖子中?

慕慕森 2023-05-09 10:07:36
我目前正在努力为我的 flaskblog 中的帖子添加图片这是我的 routes.py 导入和 new_post 函数和路由import osimport secretsfrom PIL import Imagefrom flask import render_template, url_for, flash, redirect, request, abortfrom flaskblog import app, db, bcryptfrom flaskblog.forms import RegistrationForm, LoginForm, UpdateAccountForm, PostFormfrom flaskblog.models import User, Postfrom flask_login import login_user, current_user, logout_user, login_required@app.route("/post/new", methods=['GET', 'POST'])@login_requireddef new_post():    form = PostForm()    if form.validate_on_submit():        if form.post_picture.data:            image_post = form.post_picture.data        post = Post(title=form.title.data, content=form.content.data, author=current_user, post_image=image_post)        db.session.add(post)        db.session.commit()        flash('Your post has been created!', 'success')        return redirect(url_for('home'))    return render_template('create_post.html', title='New Post', post_image=post_image,                           form=form, legend='New Post')这是我的 forms.py 导入和 PostForm 类from flask_wtf import FlaskFormfrom flask_wtf.file import FileField, FileAllowedfrom flask_login import current_userfrom wtforms import StringField, PasswordField, SubmitField, BooleanField, TextAreaFieldfrom wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationErrorfrom flaskblog.models import Userclass PostForm(FlaskForm):    title = StringField('Title', validators=[DataRequired()])    content = TextAreaField('Content', validators=[DataRequired()])    post_picture = FileField('Add image to your post', validators=[FileAllowed(['jpg', 'png'])])    submit = SubmitField('Post')这是我的 models.py 文件和 Post 类from datetime import datetimefrom flaskblog import db, login_managerfrom flask_login import UserMixin
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

在你的 new_post 方法中你需要通过

return render_template('create_post.html', title='New Post', post_image=image_post,
                           form=form, legend='New Post')

以非常相似的方式命名不同的变量会让您的生活变得有点困难:image_post、post_image、post_picture 这很可能使您在代码中混淆它们。


查看完整回答
反对 回复 2023-05-09
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您的image_post变量在 if 语句中分配return redirect(url_for('home'))

所以它不会被分配,如果你

return render_template('create_post.html', title='New Post', post_image=post_image,
                           form=form, legend='New Post')

请记住,一个方法一次只返回一个东西。


查看完整回答
反对 回复 2023-05-09
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

我遇到了这个错误,我发现你需要编辑这个:

<div class="content-section">
<form method="POST" action="">

对此:

<div class="content-section">
<form method="POST" action="" enctype="multipart/form-data">

就是这样


查看完整回答
反对 回复 2023-05-09
  • 3 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信