choices参数 MTV与MVC ajax contentType 序列化组件 自定义分页器...
知识点: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 序列化组件 自定义分页器...相关推荐
- Django09:图书管理系统笔记/choices用法/ MTV与MVC模型/多对多三种创建方式
图书管理系统笔记 redirect括号内可以直接写url 也可以直接写别名 但如果别名需要参数,必须使用reverse解析. choices用法 使用场景:能列举完全的数据 #使用方法:xxx_cho ...
- Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
阅读目录 一.MVC与MTV 二.多对多表的创建 三.ajax,前后端传输编码格式contentType 四.批量插入数据与自定义分页器 摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端 ...
- Django 数据库查询优化,choices参数(数据库字段设计常见),MVC和MTV模型,多对多三种创建方式...
数据库查询优化 orm语句的特点:惰性查询 如果仅仅只是书写了orm语句,在后面没有用到该语句所查询出来的参数,那么orm会自动识别,并不执行 举例: res = models.Book.object ...
- VIEW层AJAX提交表单到Controller的实体(AJAX传递序列化的输入元素)
在MVC环境中,AJAX方式添加一个对象,这个对象在Models中是一个视图模型,在前台显示时是这样的代码: <%using (Html.BeginForm()) { %> ...
- Ajax 发送json格式数据以及发送文件(FormData)和自带的序列化组件: serializers
前后端传输数据的编码格式(contentType) get请求数据就是直接放在url?后面的 url?usernmae=junjie&password=123... 可以向后端发送post请求 ...
- choices参数(数据库字段设计常见)
chocies参数使用场景是非常广泛的,直接上代码 """ 用户表 性别学历工作经验是否结婚是否生子客户来源... 针对某个可以列举完全的可能性字段,我们应该如何存储只要 ...
- $.ajax() contenttype,$.ajax 中的contentType类型
前言 今天在搞项目的时候遇到一个问题,$.ajax 设置数据类型 applicaiton/json以后,服务器端(express)就拿不到数据,遂解决后将问题以及问题缘由整理下来.jquery 正文 ...
- mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用
ASP.NET MVC中支持Ajax的方式和webform中有些区别,没有了updatepanel,所以对于初学者来说在最开始应用时似乎没有在webform中简单,但实际使用上更为灵活而跟webfor ...
- jquery中ajax中的参数,jquery中的ajax参数
jquery中将ajax封装成了函数,我们使用起来非常方便,jquery会自动根据内容选择post还是get方式提交数据,并且会自动编码,但是要想完全掌握jquery中的ajax,我们必须将它的各个参 ...
- mvc ajax 删除数据,.Net MVC4 使用心得(四)分页、Partial View、删除、ajax返回
分页成功后,下面是ajax的页面操作.众所周知,webform中,对数据做了编辑或者删除操作后,只需调用相应控件的DataBind()方法,就可以在页面更新数据.只要将控件和触发器放在updatepa ...
最新文章
- 腻害了!同事写了个隐藏 Bug,我排查了 3 天才解决问题!
- ubuntu下php服务器搭建_Ubuntu服务器下搭建php运行环境的方法
- Nginx之rewrite使用
- 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别
- IEEE公布2.5G和5G以太网IEEE 802.3bz标准
- 武科大计算机网络课程设计,【川大】计算机网络课程设计9013,奥鹏2017
- string对象和C风格字符串
- 关于toString()与toLocaleString()的区别
- mysql5.7.17免安装版_MySql 5.7.17免安装配置
- mysql 简单游标
- php最新版本6,PHP实用函数6
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
- Android开发人员得让短信应用程序准备好迎接巧克力棒
- Optisystem软件与Matlab软件的联合数据读取
- 从OpenJDK官网下载JDK源码
- VB 6.0下载|Visual Basic 6.0简体中文企业版下载
- DotNetBar第三方控件详解
- idea git push 码云: Remote: [31mYou do not have permission to push to the repository via HTTPS
- 【编程题 】年会抽奖(详细注释 易懂)
- 在线计算机响声,怎么在线录制电脑内部声音