16、Flask构建弹幕微电影网站-电影预告管理:增删查改

【百度云搜索,搜各种资料:http://www.81ad.cn】

Flask 构建微电影视频网站

已上线演示地址: http://movie.tbquan.cn

预告管理

预告增加

创建预告添加表单

class PreviewForm(FlaskForm):
    title = StringField(
        label='预告标题',
        validators=[
            DataRequired('请输入预告标题!')
        ],
        description='请输入预告标题!',
        render_kw={
            'class': "form-control"
        }
    )
    logo = FileField(
        label='预告封面',
        validators=[
            DataRequired('请上传预告封面!')
        ],
    )

这儿添加和更新使用同一个模板文件,直接将previewadd.html修改为previewedit.html**

修改preview_add预告增加视图

from app.admin.forms import LoginFrom, TagForm, MovieForm, PreviewForm
from app.models import Admin, Tag, Movie, Preview

@admin.route("/preview/add/", methods=['GET', 'POST'])
@admin_login_require
def preview_add():
    form = PreviewForm()
    if form.validate_on_submit():
        data = form.data
        if Preview.query.filter_by(title=data['title']).count() == 1:
            flash('预告标题已存在,请检查!', category='err')
            return redirect(url_for('admin.preview_add'))

        file_logo = secure_filename(form.logo.data.filename)  # 获取上传文件名字
        file_save_path = app.config['UP_DIR']  # 文件上传保存路径
        if not os.path.exists(file_save_path):
            os.makedirs(file_save_path)  # 如果文件保存路径不存在,则创建一个多级目录
            import stat
            os.chmod(file_save_path, stat.S_IRWXU)  # 授予可读写权限
        logo = change_filename(file_logo)  # 文件重命名
        form.logo.data.save(file_save_path + logo)  # 保存文件到磁盘中

        preview = Preview(
            title=data['title'],
            logo=logo  # 只在数据库中保存文件名
        )
        db.session.add(preview)
        db.session.commit()
        flash('添加预告成功', 'ok')
        return redirect(url_for('admin.preview_add'))

    return render_template('admin/preview_edit.html', form=form)

增加模板中的消息显示alert_info.html模块

app/templates/admin/目录下创建alert_info.html模板文件

{% with msgs = get_flashed_messages(category_filter=['ok']) %}
    {% if msgs %}
        

成功!

{% for msg in msgs %}

{{ msg }}

{% endfor %}
{% endif %} {% endwith %} {% with msgs = get_flashed_messages(category_filter=['err']) %} {% if msgs %}

失败!

{% for msg in msgs %}

{{ msg }}

{% endfor %}
{% endif %} {% endwith %}

之后再其他模板中就不用重复编写,直接包含这个模块即可,使用方式:{% include 'admin/alert_info.html' %}

修改preview_edit.html预告编辑模板

由于添加和更新使用相同的模板,所以需要对访问url进行判断

{% extends 'admin/base.html' %}

{% block content %}
    

微电影管理系统

{% if request.path == url_for('admin.preview_add') %} 添加预告 {% else %} 修改预告 {% endif %}

{% include 'admin/alert_info.html' %}
{{ form.title }} {% for err in form.title.errors %}
{{ err }}
{% endfor %}
{{ form.logo }} {% for err in form.logo.errors %}
{{ err }}
{% endfor %} {% if request.path != url_for('admin.preview_add') %} {% endif %}
{{ form.csrf_token }}
{% endblock %} {% block js %} {% endblock %}
BLOG_20181111_201406_53
BLOG_20181111_201500_46

假如数据库已存在的,会提示错误

BLOG_20181111_201509_11

预告列表

修改preview_list预告显示视图

@admin.route("/preview/list//")
@admin_login_require
def preview_list(page=None):
    page_previews = Preview.query.paginate(page=page, per_page=10)
    return render_template('admin/preview_list.html', page_previews=page_previews)

修改preview_list.html预告显示模板

{% include 'admin/alert_info.html' %} {% for preview in page_previews.items %} {% endfor %}
编号 预告标题 预告封面 添加时间 操作事项
{{ preview.id }} {{ preview.title }} {{ preview.add_time }} 编辑   删除
BLOG_20181111_201537_37

需要修改base.html预告列表链接,增加page参数


     预告列表


预告删除

增加preview_delete预告删除视图

删除预告会将旧的图片文件删除

@admin.route("/preview/delete//", methods=['GET'])
@admin_login_require
def preview_delete(delete_id=None):
    if delete_id:
        preview = Preview.query.filter_by(id=delete_id).first_or_404()
        # 删除同时要从磁盘中删除封面文件
        file_save_path = app.config['UP_DIR']  # 文件上传保存路径
        # 如果存在将进行删除,不判断,如果文件不存在删除会报错
        if os.path.exists(os.path.join(file_save_path, preview.logo)):
            os.remove(os.path.join(file_save_path, preview.logo))

        # 删除数据库,提交修改,注意后面要把与电影有关的评论都要删除
        db.session.delete(preview)
        db.session.commit()
        # 删除后闪现消息
        flash('删除预告成功!', category='ok')
    return redirect(url_for('admin.preview_list', page=1))

修改preview_list.html删除预告链接

删除

BLOG_20181111_201552_53

编辑预告

增加preview_update预告修改视图

同样使用preview_edit.html视图

@admin.route("/preview/update//", methods=['GET', 'POST'])
@admin_login_require
def preview_update(update_id=None):
    preview = Preview.query.get_or_404(update_id)
    form = PreviewForm(
        title=preview.title,
    )
    # 不验证上传文件
    form.logo.validators = []
    form.logo.render_kw = {'required': False}

    if form.validate_on_submit():
        data = form.data
        if Preview.query.filter_by(title=data['title']).count() == 1 and preview.title != data['title']:
            flash('预告标题已存在,请重新输入', category='err')
            return redirect(url_for('admin.preview_update', update_id=update_id))

        preview.title = data['title']

        print(data['logo'], type(data['logo']), form.logo.data, type(form.logo.data))
        #  
        #  
        # 上面两种方式结果一样

        # 文件保存路径操作
        file_save_path = app.config['UP_DIR']  # 文件上传保存路径
        if not os.path.exists(file_save_path):
            os.makedirs(file_save_path)  # 如果文件保存路径不存在,则创建一个多级目录
            import stat
            os.chmod(file_save_path, stat.S_IRWXU)  # 授予可读写权限
        if form.logo.data:  # 当有上传新的图片
            if os.path.exists(os.path.join(file_save_path, preview.logo)):
                os.remove(os.path.join(file_save_path, preview.logo))  # 删除旧图片
            file_logo_name = form.logo.data.filename
            preview.logo = change_filename(file_logo_name)  # 得到新的文件名,保存到输入局
            form.logo.data.save(file_save_path + preview.logo)
        db.session.commit()
        flash('预告信息修改成功!', category='ok')
        return redirect(url_for('admin.preview_update', update_id=update_id))
    return render_template('admin/preview_edit.html', form=form, preview=preview)

修改预告直接使用preview_edit.html模板

BLOG_20181111_201622_73

当文件名存在时,会提示已存在。

BLOG_20181111_201631_90

你可能感兴趣的:(16、Flask构建弹幕微电影网站-电影预告管理:增删查改)