Flask&Wtforms:400错误请求提交上传表单

2024-09-30 20:18:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图为一个学校项目创建一个电影数据库,我得到了一个'400'后提交的表格。 此表单的用途是将电影添加到您的数据库中,包括说明、标题、年份和图片(指向数据库的Url)。在

在routes.py公司名称:

@login_required
@app.route('/upMovie', methods=['GET'])
def movieup():
    return render_template('upload.html', MovieUploadForm=MovieUploadForm())


@login_required
@app.route('/upMovie', methods=['POST'])
def movieup_validate():
    upload_form = MovieUploadForm()
    if upload_form.validate_on_submit():
        if Movie.query.filter_by(title=upload_form.title.data).first() is not None:
            return 'Movie already exists.<a href="/upMovie">Back</a>'
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(upload_form.filename.file.filename)
            file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
            upload_form.filename.file.save(file_path)
            movie = Movie(
                title=upload_form.title.data,
                info=upload_form.info.data,
                year=upload_form.year.data,
                filename=file_path,
                rating=5
            )

            db.session.add(movie)
            db.session.commit()
            return redirect(url_for('uploaded_file', filename=filename))
        return 'Registration of movie successful.<br/><a href="/">Home</a>'
    else:
        upload_form.flash_form_errors()
        return render_template('errors.html')

在表单.py公司名称:

^{pr2}$

在函数.py在

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1] in app.config['ALLOWED_EXTENSIONS']

Tags: pathpyform数据库appdatareturnif
1条回答
网友
1楼 · 发布于 2024-09-30 20:18:21

所以我试了一段时间,找到了一个可行的解决方案。 我所做的改变routes.py在

if upload_form.validate_on_submit():
    if upload_form.filename.data.filename is not "":
        filename = secure_filename(upload_form.filename.data.filename)
        file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        # file_path = "imdb/static/pic/" + filename
        upload_form.filename.data.save(file_path)

    movie = Movie(
        title=upload_form.title.data,
        info=upload_form.info.data,
        year=upload_form.year.data,
        filename=file_path if upload_form.filename.data else None,
        rating=5
    )
    db.session.add(movie)
    db.session.commit()
    return 'Registration of movie successful.<br/><a href="/">Home</a>'

当我们从wtforms中获取日期时,我们不需要file = request.files['file'],因为我们得到的对象是空的。在

在表单.py在

^{pr2}$

我相应地更改了它们,允许使用文件结尾,还添加了对重复项的验证。在

有了这个代码,一切似乎都很好。在

相关问题 更多 >