20.1.cms添加轮播图后台逻辑代码完成

(1)apps/models.py

from exts import db
from datetime import datetime class BannerModel(db.Model):
__tablename__ = 'banner'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(255), nullable=False)
img_url = db.Column(db.String(255), nullable=False)
link_url = db.Column(db.String(255), nullable=False)
priority = db.Column(db.Integer, default=0)
create_time = db.Column(db.DateTime, default=datetime.now)

(2)manage.py

from apps.models import BannerModel

(3)生成到数据库

python manage.py db migrate

python manage.py db upgrade

(4)cms/forms.py

class AddBannerForm(BaseForm):
name=StringField(validators=[InputRequired(message='请输入轮播图名称')])
img_url=StringField(validators=[InputRequired(message='请输入轮播图链接')])
link_url=StringField(validators=[InputRequired(message='请输入轮播图跳转链接')])
priority=IntegerField(validators=[InputRequired(message='请输入轮播图优先级')])

(5)cms/views.py

@bp.route('/abanner/',methods=['POST'])
def abanner():
form=AddBannerForm(request.form)
if form.validate():
name=form.name.data
img_url=form.img_url.data
link_url=form.link_url.data
priority=form.priority.data
banner=BannerModel(name=name,img_url=img_url,link_url=link_url,priority=priority)
db.session.add(banner)
db.session.commit()
return restful.success()
else:
return restful.params_error(message=form.get_error())

20.2.cms添加轮播图前台逻辑完成

(1)cms/js/banner.js

$(function () {
$('#save_banner_btn').click(function (event) {
event.preventDefault();
var dialog = $('#banner-dialog');
var nameInput = $("input[name='name']");
var imgInput = $("input[name='img_url']");
var linkInput = $("input[name='link_url']");
var priorityInput = $("input[name='priority']"); var name = nameInput.val();
var img_url = imgInput.val();
var link_url = linkInput.val();
var priority = priorityInput.val(); if (!name || !img_url || !link_url || !priority) {
zlalert.alertInfo('请输入完整的轮播图数据');
return;
} zlajax.post({
'url': '/cms/abanner/',
'data': {
'name': name,
'img_url': img_url,
'link_url': link_url,
'priority': priority
},
'success': function (data) {
if (data['code'] == 200) {
dialog.modal('hide');
window.location.reload()
} else {
zlalert.alertInfo(data['message']);
}
},
'fail': function (error) {
zlalert.alertNetworkError()
}
});
}); });

(2)cms/cms_banners.html

{% from 'common/_macros.html' import static %}

<script src="{{ static('cms/js/banners.js') }}"></script>

(3)cms/views.py

@bp.route('/banners/')
@login_required
def banners():
banners = BannerModel.query.all()
return render_template('cms/cms_banners.html',banners=banners)

(4)cms_banners.html

<tbody>
{% for banner in banners %}
<tr>
<td>{{ banner.name }}</td>
<td><a href="{{ banner.img_url }}" target="_blank">{{ banner.img_url }}</a></td>
<td><a href="{{ banner.link_url }}" target="_blank">{{ banner.link_url }}</a></td>
<td>{{ banner.priority }}</td>
<td>{{ banner.create_time }}</td>
<td>
<button class="btn btn-default btn-xs edit-banner-btn">编辑</button>
<button class="btn btn-danger btn-xs delete-banner-btn">删除</button>
</td>
</tr> {% endfor %} </tbody>

最新文章

  1. 改变Activity启动时的默认动画
  2. stm32 hid 键盘描述
  3. 屌丝程序员的梦想 (六) 我也写个开源CMS
  4. jquery radio的取值 radio的选中 radio的重置
  5. VS常用技巧
  6. I.MX6 Android iperf3 porting failed
  7. 轻松搭建自己的Linux发行版本
  8. Attribute(两)——定义自己的特色+Asp.net MVC中间filter详细解释
  9. 每天一个Linux命令(17)--whereis命令
  10. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
  11. [原创]手把手教你写网络爬虫(7):URL去重
  12. 编译GDAL支持MySQL
  13. python爬取网易云周杰伦所有专辑,歌曲,评论,并完成可视化分析
  14. 使用django我的第一个简单项目流程
  15. django 图书管理系统
  16. 在Emacs中使用git操作
  17. OSChina 周日乱弹 —— 超酷炫 58 页年终总结,笑喷!
  18. Spark的Java API例子详解
  19. Bolt XML和JQBolt Lua代码自动补全插件配置教程
  20. spark java wordCount实例

热门文章

  1. Redis持久化persistence
  2. 课堂小记---JavaScript(3)
  3. 2018-2019-2 20165239《网络对抗技术》Exp4 恶意代码分析
  4. webstorm调试
  5. macof python攻击脚本
  6. 【2019雅礼集训】【可持久化线段树】【模型转化】D1T2Permutation
  7. 07flask中session及cookie的用法。
  8. MyBatis3系列__06查询的几点补充
  9. A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
  10. 用python写一个非常简单的QQ轰炸机