1 | 报错如下图所示: |
确定forms.py表单的url和logo选择了FileField字段:
views.py 视图函数也导入了
1 | from werkzeug.utils import secure_filename # 如下图所示 |
下图展示具体代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | # 电影编辑 @admin .route( '/movie/edit/<int:id>' , methods = [ "GET" , "POST" ]) @admin_login_req def movie_edit( id = None ): form = MovieForm() form.url.validators = [] # 因为可以不做更改,所以不需要校验 form.logo.validators = [] movie = Movie.query.get_or_404( id ) if request.method = = "GET" : form.info.data = movie.info form.star.data = movie.star form.tag_id.data = movie.tag_id if form.validate_on_submit(): data = form.data movie_count = Movie.query.filter_by(title = data[ "title" ]).count() if movie_count = = 1 and movie.title ! = data[ 'title' ]: flash( "片名已经存在!" , "error" ) return redirect(url_for( "admin.movie_edit" , id = id )) if not os.path.exists(app.config[ 'UP_DIR' ]): # 存放目录不存在则创建 os.makedirs(app.config[ 'UP_DIR' ]) os.chmod(app.config[ 'UP_DIR' ], "rw" ) if form.url.data.filename ! = '': old_url = movie.url file_url = secure_filename(form.url.data.filename) # 获取并转化为安全的电影文件名 movie.url = change_filename(file_url) # 调用函数生成新的文件名 form.url.data.save(app.config[ 'UP_DIR' ] + movie.url) # 保存上传的数据 if os.path.exists(app.config[ 'UP_DIR' ] + old_url): # 删除旧文件 os.remove(app.config[ 'UP_DIR' ] + old_url) if form.logo.data.filename ! = '': old_logo = movie.logo file_logo = secure_filename(form.logo.data.filename) movie.logo = change_filename(file_logo) form.logo.data.save(app.config[ 'UP_DIR' ] + movie.logo) if os.path.exists(app.config[ 'UP_DIR' ] + old_logo): os.remove(app.config[ 'UP_DIR' ] + old_logo) movie.title = data[ "title" ] movie.info = data[ "info" ] movie.star = int (data[ "star" ]) movie.tag_id = int (data[ "tag_id" ]) movie.area = data[ "area" ] movie.release_time = data[ "release_time" ] movie.length = data[ "length" ] db.session.add(movie) db.session.commit() flash( "添加电影成功" , "successfully" ) return redirect(url_for( "admin.movie_list" , id = movie. id )) return render_template( "admin/movie_edit.html" , form = form, movie = movie) |
movie_edit.html 页面的form表单:的确填写了 enctype="multipart/form-data"
1 2 3 | < form role = "form" method = "post" enctype = "multipart/form-data" > {{ form.csrf_token }} ... |
望老师百忙之中能够抽出时间为学生解答,O(∩_∩)O谢谢
# 这个bug已经把我弄疯了