Flask
来源:互联网 发布:金庸哪派武功厉害知乎 编辑:程序博客网 时间:2024/06/05 15:41
- 定义文件上传保存路径:
(注意:第二个参数最后一定要加’/’)
app.config["UP_DIR"] = os.path.join(os.path.abspath(os.path.dirname(__file__)),'static/uploads/')
- 定义表单
class MovieForm(FlaskForm): url = FileField( label='文件', validators=[ DataRequired('请上传文件!') ], description='文件'
- 文件名称规范化
为了名称规范,我们使用“时间+随机字符串+文件后缀”方式命名
def change_filename(filename): fileinfo = os.path.splitext(filename) #把文件名分解为后缀和前缀 filename = datetime.datetime.now().strftime('%Y%m%d%H%M%S')+str(uuid.uuid4().hex)+fileinfo[-1] return filename
有很多时候我们直接传入文件名是不安全的,需要secure_filename把文件名转化成安全的名称,这时我们需要定义加密函数:
- 在视图函数中定义上传的操作:
@admin.route('/movie/add/',methods=['GET','POST'])def movie_add(): form = MovieForm() if form.validate_on_submit(): data = form.data #secure_filename使传入的文件名变得安全 file_url = secure_filename(form.url.data.filename) file_logo = secure_filename(form.logo.data.filename) if not os.path.exists(app.config['UP_DIR']): #如果不存在存储的目录,则创建该目录 os.makedirs(app.config['UP_DIR']) #设置该目录可读可写 os.chmod(app.config['UP_DIR'],'rw') #名称规范化 url = change_filename(file_url) logo = change_filename(file_logo) #进行保存 form.url.data.save(app.config['UP_DIR']+url) form.logo.data.save(app.config['UP_DIR']+logo) #设施movie模型实例 movie = Movie( url = url, ) db.session.add(movie) db.session.commit() flash('添加电影成功','ok') return redirect(url_for('admin.movie_add')) return render_template('admin/movie_add.html',form=form)
- 在HTML中添加表单及消息提示
{% for msg in get_flashed_messages(category_filter=['ok']) %} <!--取出的消息是OK的消息--><div class="alert alert-success alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> <h4><i class="icon fa fa-check"></i> 操作成功!</h4>{{ msg }}{{ form.url}}{% for err in form.url.errors %}<div class="col-md-12"> <font style="color:red">{{ err }}</font></div>{% endfor %}
阅读全文
0 0
- flask
- flask
- Flask
- Flask
- flask
- flask
- Flask
- Flask
- flask
- Flask
- flask
- Flask
- Flask
- flask
- Flask
- Flask 扩展: Flask-Script
- Flask扩展: Flask-Bootstrap
- Flask扩展: Flask-Moment
- CDQZ Challenge 4
- vue.js学习笔记-6
- 0810记录补充
- 2017多校训练6-1003:Inversion
- B. Free Market----暴力+dp
- Flask
- MySQL分布式中间件:MyCAT
- 构造函数简单示意
- 工作小结
- 如何安装emmet?
- Hibernate核心接口和工作原理
- hdu 6106 Classes
- 简单顶点漫反射
- 新式类与经典类的继承关系