新闻分类管理

需求

  • 可以修改当前新闻分类名
  • 可以添加新闻分类

实现准备

  • static/admin/news_type.html 文件拖到 templates/admin/ 目录下

代码实现

  • admin/views.py 文件中添加视图函数以返回分类列表
@admin_blu.route('/news_category')
def get_news_category():
    # 获取所有的分类数据
    categories = Category.query.all()
    # 定义列表保存分类数据
    categories_dicts = []

    for category in categories:
        # 获取字典
        cate_dict = category.to_dict()
        # 拼接内容
        categories_dicts.append(cate_dict)

    categories_dicts.pop(0)
    # 返回内容
    return render_template('admin/news_type.html', data={"categories": categories_dicts})
  • 修改 templates/admin/index.html 中【新闻版式编辑】链接
<li><a class="icon034" href="/admin/news_type" target="main_frame">新闻分类管理</a></li>
  • 前端页面界面数据渲染
<tr>
    <th width="10%">id</th>
    <th width="80%">类别名称</th>
    <th width="10%">管理操作</th>
</tr>

{% for category in data.categories %}
    <tr>
        <td>{{ category.id }}</td>
        <td>{{ category.name }}</td>
        <td><a href="javascript:;" class="edit">编辑</a></td>
    </tr>
{% endfor %}

运行测试

  • 增加【添加/修改】分类的视图函数
@admin_blu.route('/add_category', methods=["POST"])
def add_category():
    """修改或者添加分类"""

    category_id = request.json.get("id")
    category_name = request.json.get("name")
    if not category_name:
        return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
    # 判断是否有分类id
    if category_id:
        try:
            category = Category.query.get(category_id)
        except Exception as e:
            current_app.logger.error(e)
            return jsonify(errno=RET.DBERR, errmsg="查询数据失败")

        if not category:
            return jsonify(errno=RET.NODATA, errmsg="未查询到分类信息")

        category.name = category_name
    else:
        # 如果没有分类id,则是添加分类
        category = Category()
        category.name = category_name
        db.session.add(category)

    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg="保存数据失败")
    return jsonify(errno=RET.OK, errmsg="保存数据成功")
  • /static/admin/js/news_type.js 中发起请求
$confirm.click(function(){
    var params = {}
    if(sHandler=='edit')
    {
        var sVal = $input.val();
        if(sVal=='')
        {
            $error.html('输入框不能为空').show();
            return;
        }
        params = {
            "id": sId,
            "name": sVal,
        };
    }
    else
    {
        var sVal = $input.val();
        if(sVal=='')
        {
            $error.html('输入框不能为空').show();
            return;
        }
        params = {
            "name": sVal,
        }
    }

    $.ajax({
        url:"/admin/add_category",
        method: "post",
        headers: {
            "X-CSRFToken": getCookie("csrf_token")
        },
        data: JSON.stringify(params),
        contentType: "application/json",
        success: function (resp) {
            if (resp.errno == "0") {
                // 刷新当前界面
                location.reload();
            }else {
                $error.html(resp.errmsg).show();
            }
        }
    })
})