新闻审核详情
审核详情界面数据
- 在
admin/views.py
中添加新闻审核详情视图函数,接收新闻id为参数
@admin_blu.route('/news_review_detail')
def news_review_detail():
"""新闻审核"""
# 获取新闻id
news_id = request.args.get("news_id")
if not news_id:
return render_template('admin/news_review_detail.html', data={"errmsg": "未查询到此新闻"})
# 通过id查询新闻
news = None
try:
news = News.query.get(news_id)
except Exception as e:
current_app.logger.error(e)
if not news:
return render_template('admin/news_review_detail.html', data={"errmsg": "未查询到此新闻"})
# 返回数据
data = {"news": news.to_dict()}
return render_template('admin/news_review_detail.html', data=data)
- 修改待审核列表中
news_review.html
审核的链接地址:
<td>
<a href="{{ url_for('admin.news_review_detail') }}?news_id={{ news.id }}" class="review">审核</a>
</td>
news_review_detail.html
数据渲染
<div class="form_group">
<label>新闻标题:</label>
<input type="text" class="input_txt2" value="{{ data.news.title }}" readonly>
</div>
<div class="form_group">
<label>新闻分类:</label>
<div class="category_name">{{ data.news.category.name }}</div>
</div>
<div class="form_group">
<label>新闻摘要:</label>
<textarea class="input_multxt" readonly>{{ data.news.digest }}</textarea>
</div>
<div class="form_group">
<label>索引图片:</label>
<img src="{{ data.news.index_image_url }}" alt="索引图片" class="index_pic">
</div>
<div class="form_group">
<label>新闻内容:</label>
<div class="rich_wrap fl">
<input class="input_area" id="rich_content" name="content" value="{{ data.news.content }}"></input>
</div>
</div>
...
<!-- 隐藏字段,用于记录当前新闻id -->
<input name="news_id" value="{{ data.news.id }}" hidden>
运行测试
新闻审核
- 修改视图函数,使其能够接受POST请求执行审核操作,并实现其代码
- 因为在审核完成之后需要跳转界面,所以以处需要使用 ajax 进行提交,并审核完成之后使用 js 进行跳转
@admin_blu.route('/news_review_detail', methods=["GET", "POST"])
def news_review_detail():
"""新闻审核"""
if request.method == "GET":
...
return render_template('admin/news_review_detail.html', data=data)
# 执行审核操作
# 1.获取参数
news_id = request.json.get("news_id")
action = request.json.get("action")
# 2.判断参数
if not all([news_id, action]):
return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
if action not in ("accept", "reject"):
return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
news = None
try:
# 3.查询新闻
news = News.query.get(news_id)
except Exception as e:
current_app.logger.error(e)
if not news:
return jsonify(errno=RET.NODATA, errmsg="未查询到数据")
# 4.根据不同的状态设置不同的值
if action == "accept":
news.status = 0
else:
# 拒绝通过,需要获取原因
reason = request.json.get("reason")
if not reason:
return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
news.reason = reason
news.status = -1
# 保存数据库
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_review_detail.js
中添加以下代码
$(".news_review").submit(function (e) {
e.preventDefault()
var params = {};
// 获取到所有的参数
$(this).serializeArray().map(function (x) {
params[x.name] = x.value;
});
// 取到参数以便判断
var action = params["action"];
var news_id = params["news_id"];
var reason = params["reason"];
if (action == "reject" && !reason) {
alert('请输入拒绝原因');
return;
}
params = {
"action": action,
"news_id": news_id,
"reason": reason
}
$.ajax({
url: "/admin/news_review_detail",
type: "post",
contentType: "application/json",
headers: {
"X-CSRFToken": getCookie("csrf_token")
},
data: JSON.stringify(params),
success: function (resp) {
if (resp.errno == "0") {
// 返回上一页,刷新数据
location.href = document.referrer;
}else {
alert(resp.errmsg);
}
}
})
})
运行测试,注意:在模板界面需要填充隐藏的新闻id字段,以便在提交的时候直接带上该参数