知识点:1.choice参数
2.MTV 与 MVC 框架
3.ajax
4.contentType前后端传输数据编码格式
5.序列化组件(django自带,小型的):serializers
6.sweetalert
7.自定义分页器

1.choice参数:

    choices = ((1,'男'),(2,'女'),(3,'其他'))gender = models.IntegerField(choices=choices)1.存: choices 里面 数字与中文的对应关系2.取: get_gender_display()注: 只要是choices字段 ,在获取数字对应的注释就用 get_choices字段名_display()3. 要是存了 choices 里面没有的数字不会报错,但取时展现的是数字

2.MTV 与 MVC 框架
    mtv框架:m:modelst:templatesv:viewsmvc框架:m:modelsv:viewsc:controller  控制器(urls)注: django自称是 MTV框架 ,本质上 还是 MVC 框架

3.ajax
特点:异步提交 局部刷新
请求方式: GET  POST
小结:  1.a标签中的href属性             GET请求2.浏览器中输入的url           GET请求 3.form表单                    GET/POST都支持4.ajax                        GET/POST都支持
优点:ajax最大的优点是在不重新加载整个页面的情况下,与服务器交互数据并 实现局部更新网页内容

4.前后端传输数据编码格式
 编码格式:1.urlencoded2.formdata3.jsonform表单1.编码格式默认是urlencoded的,数据格式:name=jssd&pwd=234,dj后端会把urlencoded编码格式的数据自动解析并放入request.POST中;2.编码格式可以修改为formdata来传文件,django后端会把符合urlencoded编码格式的数据放入 request.POST中,会把符合formdata编码格式的数据放入 request.FILES中;注: 前后端传的数据格式 要与你的 编码格式 一致ajax传数据:1.它默认的编码格式是urllencode,方法同 form 表单2.可以传 json 格式的数据,  后端会把数据原封不动的放入request.body 中,需要开发者手动 解析ajax传文件:获取文件标签存储文件的方法1. 用jquery 找到 存储文件的input标签2. 把jq 转为 js3. 用js对象的方法 .files[0] 获取标签内部存储的文件对象4. processData与contentType的参数 一定要设置为 false

5.序列化组件(django自带,小型的):serializers
  serializers.serialize('json',user_list)

6.sweetalert

7.自定义分页器

    知识点:1.bulk_creat() 批量插入数据 l = []for i in range(10000):l.append(models.Book(title='第%s本书'%i))models.Book.objects.bulk_create(l)  # 批量插入数据,效率高2.creat() 逐条插入数据for i in range(1000):models.Book.objects.create(title='第%s本书'%i)  # 效率极低分页器的使用:后端代码:book_list = models.Book.objects.all()current_page = request.GET.get("page",1)all_count = book_list.count()page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10,pager_count=5)page_queryset = book_list[page_obj.start:page_obj.end]前端代码:{% for book in page_queryset %}<p>{{ book.title }}</p>{% endfor %}{{ page_obj.page_html|safe }}

分页器原理:

class Pagination(object):def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):"""
            封装分页相关数据:param current_page: 当前页:param all_count:    数据库中的数据总条数:param per_page_num: 每页显示的数据条数:param pager_count:  最多显示的页码个数用法:queryset = model.objects.all()page_obj = Pagination(current_page,all_count)page_data = queryset[page_obj.start:page_obj.end]获取数据用page_data而不再使用原始的queryset获取前端分页样式用page_obj.page_html"""
            try:current_page = int(current_page)except Exception as e:current_page = 1if current_page < 1:current_page = 1self.current_page = current_pageself.all_count = all_countself.per_page_num = per_page_num# 总页码all_pager, tmp = divmod(all_count, per_page_num)if tmp:all_pager += 1self.all_pager = all_pagerself.pager_count = pager_countself.pager_count_half = int((pager_count - 1) / 2)@propertydef start(self):return (self.current_page - 1) * self.per_page_num@propertydef end(self):return self.current_page * self.per_page_numdef page_html(self):# 如果总页码 < 11个:if self.all_pager <= self.pager_count:pager_start = 1pager_end = self.all_pager + 1# 总页码  > 11else:# 当前页如果<=页面上最多显示11/2个页码if self.current_page <= self.pager_count_half:pager_start = 1pager_end = self.pager_count + 1# 当前页大于5else:# 页码翻到最后if (self.current_page + self.pager_count_half) > self.all_pager:pager_end = self.all_pager + 1pager_start = self.all_pager - self.pager_count + 1else:pager_start = self.current_page - self.pager_count_halfpager_end = self.current_page + self.pager_count_half + 1page_html_list = []# 添加前面的nav和ul标签page_html_list.append('''
                        <nav aria-label='Page navigation>'<ul class='pagination'>''')first_page = '<li><a href="?page=%s">首页</a></li>' % (1)page_html_list.append(first_page)if self.current_page <= 1:prev_page = '<li class="disabled"><a href="#">上一页</a></li>'else:prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)page_html_list.append(prev_page)for i in range(pager_start, pager_end):if i == self.current_page:temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)else:temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)page_html_list.append(temp)if self.current_page >= self.all_pager:next_page = '<li class="disabled"><a href="#">下一页</a></li>'else:next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)page_html_list.append(next_page)last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)page_html_list.append(last_page)# 尾部添加标签page_html_list.append('''
                                               </nav></ul>''')return ''.jowhatever happens tomorrow,we've had today.

 
 
 

转载于:https://www.cnblogs.com/wyf20190411-/p/11574148.html

choices参数 MTV与MVC ajax contentType 序列化组件 自定义分页器...相关推荐

  1. Django09:图书管理系统笔记/choices用法/ MTV与MVC模型/多对多三种创建方式

    图书管理系统笔记 redirect括号内可以直接写url 也可以直接写别名 但如果别名需要参数,必须使用reverse解析. choices用法 使用场景:能列举完全的数据 #使用方法:xxx_cho ...

  2. Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

    阅读目录 一.MVC与MTV 二.多对多表的创建 三.ajax,前后端传输编码格式contentType 四.批量插入数据与自定义分页器 摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端 ...

  3. Django 数据库查询优化,choices参数(数据库字段设计常见),MVC和MTV模型,多对多三种创建方式...

    数据库查询优化 orm语句的特点:惰性查询 如果仅仅只是书写了orm语句,在后面没有用到该语句所查询出来的参数,那么orm会自动识别,并不执行 举例: res = models.Book.object ...

  4. VIEW层AJAX提交表单到Controller的实体(AJAX传递序列化的输入元素)

    在MVC环境中,AJAX方式添加一个对象,这个对象在Models中是一个视图模型,在前台显示时是这样的代码: <%using (Html.BeginForm())       { %>   ...

  5. Ajax 发送json格式数据以及发送文件(FormData)和自带的序列化组件: serializers

    前后端传输数据的编码格式(contentType) get请求数据就是直接放在url?后面的 url?usernmae=junjie&password=123... 可以向后端发送post请求 ...

  6. choices参数(数据库字段设计常见)

    chocies参数使用场景是非常广泛的,直接上代码 """ 用户表 性别学历工作经验是否结婚是否生子客户来源... 针对某个可以列举完全的可能性字段,我们应该如何存储只要 ...

  7. $.ajax() contenttype,$.ajax 中的contentType类型

    前言 今天在搞项目的时候遇到一个问题,$.ajax 设置数据类型 applicaiton/json以后,服务器端(express)就拿不到数据,遂解决后将问题以及问题缘由整理下来.jquery 正文 ...

  8. mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用

    ASP.NET MVC中支持Ajax的方式和webform中有些区别,没有了updatepanel,所以对于初学者来说在最开始应用时似乎没有在webform中简单,但实际使用上更为灵活而跟webfor ...

  9. jquery中ajax中的参数,jquery中的ajax参数

    jquery中将ajax封装成了函数,我们使用起来非常方便,jquery会自动根据内容选择post还是get方式提交数据,并且会自动编码,但是要想完全掌握jquery中的ajax,我们必须将它的各个参 ...

  10. mvc ajax 删除数据,.Net MVC4 使用心得(四)分页、Partial View、删除、ajax返回

    分页成功后,下面是ajax的页面操作.众所周知,webform中,对数据做了编辑或者删除操作后,只需调用相应控件的DataBind()方法,就可以在页面更新数据.只要将控件和触发器放在updatepa ...

最新文章

  1. 腻害了!同事写了个隐藏 Bug,我排查了 3 天才解决问题!
  2. ubuntu下php服务器搭建_Ubuntu服务器下搭建php运行环境的方法
  3. Nginx之rewrite使用
  4. 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别
  5. IEEE公布2.5G和5G以太网IEEE 802.3bz标准
  6. 武科大计算机网络课程设计,【川大】计算机网络课程设计9013,奥鹏2017
  7. string对象和C风格字符串
  8. 关于toString()与toLocaleString()的区别
  9. mysql5.7.17免安装版_MySql 5.7.17免安装配置
  10. mysql 简单游标
  11. php最新版本6,PHP实用函数6
  12. Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
  13. Android开发人员得让短信应用程序准备好迎接巧克力棒
  14. Optisystem软件与Matlab软件的联合数据读取
  15. 从OpenJDK官网下载JDK源码
  16. VB 6.0下载|Visual Basic 6.0简体中文企业版下载
  17. DotNetBar第三方控件详解
  18. idea git push 码云: Remote: [31mYou do not have permission to push to the repository via HTTPS
  19. 【编程题 】年会抽奖(详细注释 易懂)
  20. 在线计算机响声,怎么在线录制电脑内部声音

热门文章

  1. shell脚本循环嵌套
  2. 62. KVOController详解
  3. 更改VS2010,VS2008,VS2012等指定默认浏览器操作方式
  4. Java开发中学用eclipse code templates
  5. SAP Client Copy
  6. 多个apple苹果设备(iphone,mac,pad,icloud)之间同步数据
  7. 代码调试神器:VS Code 开源新工具!
  8. 阿里规定超过三张表禁止join,这是为什么?
  9. 分享一下我作为面试官面试了几个java程序员后的感受
  10. BAT Java面试154道题分享!搞懂轻松进BAT