一.Sweetalert使用AJAX操作

sweetalert下载地址 Sweetalert

  1. $("#b55").click(function () {
  2. swal({
  3. title: "你确定要删除吗?",
  4. text: "删除可就找不回来了哦!",
  5. type: "warning",
  6. showCancelButton: true, // 是否显示取消按钮
  7. confirmButtonClass: "btn-danger", // 确认按钮的样式类
  8. confirmButtonText: "删除", // 确认按钮文本
  9. cancelButtonText: "取消", // 取消按钮文本
  10. closeOnConfirm: false, // 点击确认按钮不关闭弹框
  11. showLoaderOnConfirm: true // 显示正在删除的动画效果
  12. },
  13. function () {
  14. var deleteId = 2;
  15. $.ajax({
  16. url: "/delete_book/",
  17. type: "post",
  18. data: {"id": deleteId},
  19. success: function (data) {
  20. if (data.code === 0) {
  21. swal("删除成功!", "你可以准备跑路了!", "success");
  22. } else {
  23. swal("删除失败", "你可以再尝试一下!", "error")
  24. }
  25. }
  26. })
  27. });
  28. })

​ 页面刷新复习 location.reload

  1. // 利用Dom操作
  2. $(this).parent().parent().remove()
  3. // function里的this 和 之前的this不一样 所以我们需要 之前就定义好this
  4. $btn = $(this)

二.bulk_create

  1. def index(request):
  2. for i in range(1000):
  3. models.Book.objects.create(title='%s'%i)
  4. book_queryset = models.Book.objects.all()
  5. return render('xxx.html',locals())

​ 使用bulk_create 来批量插入数据

  1. def index(request):
  2. book_list = []
  3. for i in range(10000):
  4. book_list.append(models.Book(title='第%s本书'%i))
  5. # 批量插入数据 建议orm建议你使用bulk_create
  6. models.Book.objects.bulk_create(book_list)
  7. book_queryset = models.Book.objects.all()
  8. return render('xxx.html', locals())

两者差距很大

三.分页器

divmod

  1. >>> divmod(100,10)
  2. (10, 0)
  3. >>> divmod(101,10)
  4. (10, 1)
  5. >>> divmod(99,10)
  6. (9, 9)

分页器组件

​ 通常 我们使用到外部的功能 都会放入 文件名为 utils

  1. class Pagination(object):
  2. def __init__(self,current_page,all_count,per_page_num=2,pager_count=11):
  3. """
  4. 封装分页相关数据
  5. :param current_page: 当前页
  6. :param all_count: 数据库中的数据总条数
  7. :param per_page_num: 每页显示的数据条数
  8. :param pager_count: 最多显示的页码个数
  9. 用法:
  10. queryset = model.objects.all()
  11. page_obj = Pagination(current_page,all_count)
  12. page_data = queryset[page_obj.start:page_obj.end]
  13. 获取数据用page_data而不再使用原始的queryset
  14. 获取前端分页样式用page_obj.page_html
  15. """
  16. try:
  17. current_page = int(current_page)
  18. except Exception as e:
  19. current_page = 1
  20. if current_page <1:
  21. current_page = 1
  22. self.current_page = current_page
  23. self.all_count = all_count
  24. self.per_page_num = per_page_num
  25. # 总页码
  26. all_pager, tmp = divmod(all_count, per_page_num)
  27. if tmp:
  28. all_pager += 1
  29. self.all_pager = all_pager
  30. self.pager_count = pager_count
  31. self.pager_count_half = int((pager_count - 1) / 2)
  32. @property
  33. def start(self):
  34. return (self.current_page - 1) * self.per_page_num
  35. @property
  36. def end(self):
  37. return self.current_page * self.per_page_num
  38. def page_html(self):
  39. # 如果总页码 < 11个:
  40. if self.all_pager <= self.pager_count:
  41. pager_start = 1
  42. pager_end = self.all_pager + 1
  43. # 总页码 > 11
  44. else:
  45. # 当前页如果<=页面上最多显示11/2个页码
  46. if self.current_page <= self.pager_count_half:
  47. pager_start = 1
  48. pager_end = self.pager_count + 1
  49. # 当前页大于5
  50. else:
  51. # 页码翻到最后
  52. if (self.current_page + self.pager_count_half) > self.all_pager:
  53. pager_end = self.all_pager + 1
  54. pager_start = self.all_pager - self.pager_count + 1
  55. else:
  56. pager_start = self.current_page - self.pager_count_half
  57. pager_end = self.current_page + self.pager_count_half + 1
  58. page_html_list = []
  59. # 添加前面的nav和ul标签
  60. page_html_list.append('''
  61. <nav aria-label='Page navigation>'
  62. <ul class='pagination'>
  63. ''')
  64. first_page = '<li><a href="?page=%s">首页</a></li>' % (1)
  65. page_html_list.append(first_page)
  66. if self.current_page <= 1:
  67. prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
  68. else:
  69. prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)
  70. page_html_list.append(prev_page)
  71. for i in range(pager_start, pager_end):
  72. if i == self.current_page:
  73. temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)
  74. else:
  75. temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)
  76. page_html_list.append(temp)
  77. if self.current_page >= self.all_pager:
  78. next_page = '<li class="disabled"><a href="#">下一页</a></li>'
  79. else:
  80. next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)
  81. page_html_list.append(next_page)
  82. last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
  83. page_html_list.append(last_page)
  84. # 尾部添加标签
  85. page_html_list.append('''
  86. </nav>
  87. </ul>
  88. ''')
  89. return ''.join(page_html_list)

自定义分页器的使用

  1. # 一页展示多少条
  2. per_page_num = 10
  3. # 用户想看的页码 但是拿到的字符串我们强转 默认为1
  4. current_page_str = request.GET.get('page',1)
  5. current_page_num = int(current_page_str)
  6. """
  7. per_page_num = 10
  8. current_page start_page end_page
  9. 1 0 10
  10. 2 10 20
  11. 3 20 30
  12. """
  13. # 开始条数
  14. start_page = (current_page_num - 1) * per_page_num
  15. end_page = current_page_num * per_page_num
  16. # 一共分多少页展示给用户看
  17. book_count_num = models.AuthDetail.objects.count()
  18. all_count, more = divmod(book_count_num, per_page_num)
  19. if more:
  20. all_count += 1
  21. # 可以切分渲染给前端页面了
  22. book_queryset = models.AuthDetail.objects.all()
  23. xxx = current_page_num
  24. # 判断他是否是前6页
  25. if current_page_num < 6:
  26. xxx = 6
  27. if current_page_num > all_count - 5:
  28. xxx = all_count - 5
  29. # for循环自造数据给前端
  30. html = ''
  31. for i in range(xxx-5, xxx+6):
  32. # 判断如果循环的时候 current_page_num == i 说明当前页
  33. if current_page_num == i:
  34. html += '<li class="active"><a href="?page=%s">%s</a></li>'%(i,i)
  35. else:
  36. html += '<li><a href="?page=%s">%s</a></li>' % (i, i)
  37. # 安全返回
  38. from django.utils.safestring import mark_safe
  39. html = mark_safe(html)
  40. book_queryset = book_queryset[start_page:end_page]
  41. return render(request, 'test.html', locals())
  1. current_page = request.GET.get('page',1)
  2. all_count = book_queryset.count()
  3. page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10,pager_count=5)
  4. # 需要将原来的 book_queryset 替换成 page_queryset
  5. page_queryset = book_queryset[page_obj.start:page_obj.end]
  6. # book_queryset = book_queryset[start_page:end_page]
  7. return render(request,'index.html',locals()) # 第二种
  8. 最后 渲染分页器 <p>{{ page_ojb.page_html|safe }}</p>

django----Sweetalert bulk_create批量插入数据 自定义分页器的更多相关文章

  1. [Django高级之批量插入数据、分页器组件]

    [Django高级之批量插入数据.分页器组件] 批量插入数据 模板层models.py from django.db import models class Books(models.Model): ...

  2. django与ajax:ajax结合sweetalter ,批量插入数据 ;分页器组件

    目录 一.ajax结合sweetalter 二.bulk_create批量插入数据 三.简易版分页器推导 1. 推导步骤 四.自定义分页器的使用 1. 自定义分页器模板 2. 使用方法 (1)后端代码 ...

  3. Django批量插入数据和分页器

    目录 一.ajax结合sweetalert实现删除按钮动态效果 二.bulk_create批量插入数据 1. 一条一条插入 2. 批量插入 三.自定义分页器 一.ajax结合sweetalert实现删 ...

  4. django ajax 及批量插入数据 分页器

    ``` Ajax 前端朝后端发送请求都有哪些方式 a标签href GET请求 浏览器输入url GET请求 form表单 GET/POST请求 Ajax GET/POST请求 前端朝后端发送数据的编码 ...

  5. Django orm 实现批量插入数据

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...

  6. bulk_create 批量插入数据

    def booklist(request): # 动态插入100条数据 for i in range(100): models.Book2.objects.create(name='第%s本书'%i) ...

  7. Django向数据库批量插入数据

    # 如何向数据库一次性插入多条数据 # 方法一:效率极低,不推荐使用 for i in range(1000): models.Book.objects.create(title=f'第{i}本书') ...

  8. Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器-批量插入-07

    目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Aj ...

  9. django之ajax结合sweetalert使用,分页器和bulk_create批量插入 07

    目录 sweetalert插件 bulk_create 批量插入数据 分页器 简易版本的分页器的推导 自定义分页器的使用(组件) sweetalert插件 有这么一个需求: ​ 当用户进行一个删除数据 ...

随机推荐

  1. gin索引优化实例1

    GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一 ...

  2. add jar and proxy repo

    1. 添加代理仓库 2. 添加host 仓库 3. 添加私有jar 4. 添加仓库到public 仓库

  3. 小白学 Python 爬虫(5):前置准备(四)数据库基础

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  4. 护网杯一道crypto

    import os def xor(a,b): assert len(a)==len(b) c="" for i in range(len(a)): c+=chr(ord(a[i] ...

  5. 【Luogu P1878】舞蹈课

    Luogu P1878 事实上这道题并不难,但我真没弄懂我手写堆为什么过不了.所以 STL大法好!!! 基本思路 对于每一对相邻异性,将他们的舞蹈技术的差插入一个堆 通过维护这个小根堆,每次就可以取得 ...

  6. 【2018寒假集训Day 8】【并查集】并查集模板

    Luogu并查集模板题 #include<cstdio> using namespace std; int z,x,y,n,m,father[10001]; int getfather(i ...

  7. 探究 C# 中的 char 、 string(一)

    目录 探究 C# 中的 char . string(一) 1. System.Char 字符 2. 字符处理 3. 全球化 4. System.String 字符串 4.1 字符串搜索 4.2 字符串 ...

  8. hadoop环境的安装 和 spark环境的安装

    hadoop环境的安装1.前提:安装了java spark环境的安装1.前提:安装了java,python2.直接pip install pyspark就可以安装完成.(pip是python的软件安装 ...

  9. php踩过的那些坑(2) strpos引发的血案

    一.前方有坑 php某些自带函数,如果使用不当,也会坑得你人仰马翻.比如:strpos() 先了解一下strpos()函数是干啥的. strpos — 查找字符串首次出现的位置 用法: int str ...

  10. mysql那些事(5)建表存储引擎的选择

    在mysql见表的时候,会遇到选择存储引擎:MyISAM和InnoDB.究竟用哪种存储引擎好呢? 1.MyISAM:表锁:支持全文索引:读并发性能较好. 2.InnoDB:行锁:支持事务,支持外键:写 ...