ajax,分页器
一、ajax请求数据
'''
$.ajax({
url: '/ajax/', # 请求路径
type: 'post', # 请求方式
data: { # get和post都以data字典方式携带数据
usr: $('.usr').val(), # 获取输入框内容
pwd: $('.pwd').val(),
},
success: function (data) {
console.log(typeof(data), data); # 得到后台返回的数据(普通字符串 | json类型数据)
}
})
''' '''
# ajax请求,后台只需要返回信息,所以不会出现render、redirect
def ajax(request):
print(request.is_ajax()) # 是否是ajax请求
if request.method == 'GET': # 获取get请求数据
usr = request.GET.get('usr', None)
pwd = request.GET.get('pwd', None)
if request.method == 'POST': # 获取post请求数据
usr = request.POST.get('usr', None)
pwd = request.POST.get('pwd', None) # 返回字符串类型数据
# return HttpResponse('OK') # *** # 返回json类型数据
dic = {'status': 'ok', 'msg': '登录成功'}
data = json.dumps(dic, ensure_ascii=False)
# 直接返回json模块处理后的json数据(json字符串),前台接收到的是一个json类型的字符串,需要前台自己处理
# return HttpResponse(data) # 返回json字符串是,还告诉前台,该数据就是json类型字符串,设置响应头
return HttpResponse(data, content_type='application/json') # **** from django.http import JsonResponse
# 返回json类型数据的终极方法
dic = {'status': 'ok', 'msg': '登录成功'}
return JsonResponse(dic, safe=False, json_dumps_params={'ensure_ascii': False}) # *****
# 参数含义:
# 返回值保证是字典类型
# safe在False情况下就支持返回列表或字符串
# 取消json的dumps方法采用的默认ascii编码中文
'''
二、分页器
from django.core.paginator import Paginator # 分页对象列表
book_list = Book.objects.all()
# 分页对象
paginator = Paginator(book_list, 6) # 分页对象列表,每一页对象(最大)数
# 对象总个数
count = paginator.count
# 总分页数
num_pages = paginator.num_pages
# 页码列表(可迭代对象)
page_range = paginator.page_range # 某一具体页
page = paginator.page(3) # 具体第几页
# 是否有上一页
page.has_previous()
# 上一页编码
page.previous_page_number()
# 是否有下一页
page.has_next()
# 下一页编码
page.next_page_number()
#后台
'''
def show_book(request):
book_list = Book.objects.all()
header = '图书管理系统'
title = '图书详情' #得到分页器(分页的数据,一页的个数)
paginator = Paginator(book_list,5)
#对象总个数
count = paginator.count
#总分页数
num_pages = paginator.num_pages
#页码列表(可迭代对象)
page_range = paginator.page_range #请求有误默认采用第一页
try:
current_num = int(request.GET.get('page',1))
except:
current_num = 1
#不在页面范围内安全处理
if current_num < 1:
current_num = 1
return redirect('/show_book/?page=%s'%current_num)
elif current_num > num_pages:
current_num = num_pages
return redirect('/show_book/?page=%s'%num_pages) #获取某一具体页
current_page = paginator.page(current_num) #通过page_range来控制页面排版
if num_pages > 5:
if current_num < 4:
page_range = range(2,5)
elif current_num > num_pages - 3:
page_range = range(num_pages - 3,num_pages)
else:
page_range = range(current_num - 1,current_num + 2)
elif num_pages >= 3:
page_range = range(2,num_pages)
else:
page_range = range(1,1) return render(request,'show_book.html', locals())
'''
#前台
<!--分页器-->
<nav aria-label="Page navigation">
<ul class="pagination">
<!-- 上一页 -->
<li>
{% if current_num > 1 %}
<!--大于1点击上一页到上一页-->
<a href="{% url 'show_book' %}?page={{ current_num|add:-1 }}" aria-label="Previous">
{% else %}
<!--等于小于1不能点击-->
<a href="javascript:void(0)" aria-label="Previous">
{% endif %}
<span aria-hidden="true">«</span>
</a>
</li>
<!-- 第一页页码 -->
{% if current_num == 1 %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="{% url 'show_book' %}?page=1">1</a></li> <li><a href="javascript:void(0)">...</a></li> <!-- 中间三页页码 -->
{% for num in page_range %}
{% if current_num == num %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="{% url 'show_book' %}?page={{ num }}">{{ num }}</a></li>
{% endfor %} <li><a href="javascript:void(0)">...</a></li> <!-- 最后一页页码 -->
{% if current_num == num_pages %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="{% url 'show_book' %}?page={{ num_pages }}">{{ num_pages }}</a></li> <!-- 下一页 -->
<li>
<!--小于总页数,点击下一页定位到下一页-->
{% if current_num < num_pages %}
<a href="{% url 'show_book' %}?page={{ current_num|add:1 }}" aria-label="Next">
<!--等于或大于总页数不能点击-->
{% else %}
<a href="javascript:void(0)" aria-label="Next">
{% endif %}
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav> <!--后台获取固定页book对象 {% for book in current_page %}-->
三、批量插入数据
book_list = []
for i in range(100):
book = Book(name='book%s' % i, price=11.11, publish_date='2018-1-1', publish_id=1)
book_list.append(book)
# 操作对象列表,一次操作多少条数据
Book.objects.bulk_create(book_list, 20) # 插入100条数据只需要执行5次sql
ajax,分页器的更多相关文章
- python自动化开发-[第十八天]-django的ORM补充与ajax,分页器
今日概要: 1.ORM一对多,多对多 2.正向查询,反向查询 3.聚合查询与分组查询 4.F查询和Q查询 5.ajax 6.分页器 一.ORM补充: django在终端打印sql语句设置: LOGGI ...
- 人生苦短,我用Python——博客目录
计算机基础 计算机硬件基础知识 操作系统基础 Python基础 Windows环境下Python2和Python3的安装 交互式环境与变量的使用 简单介绍Python基本数据类型及程序交互 基本运算符 ...
- python-Web-django-后台
url: # member 处理 re_path('member/list/', member.list, name='member/list/'), re_path('member/list_par ...
- python-Web-django-ajax分页
views: from django.shortcuts import HttpResponse,redirect,render from app01.models import * import j ...
- django ajax 及批量插入数据 分页器
``` Ajax 前端朝后端发送请求都有哪些方式 a标签href GET请求 浏览器输入url GET请求 form表单 GET/POST请求 Ajax GET/POST请求 前端朝后端发送数据的编码 ...
- Django与ajax、分页器
ajax简单数据响应 ajax请求,后台只需要返回信息,所以不会出现render.redirect 模板层: $('.btn').click(function() { $.ajax({ url: '/ ...
- 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...
- ajax,文件上传,分页器
一.Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...
- Django框架第九篇--Django和Ajax、序列化组件(serializers)、自定义分页器、模型表choice参数
Django和Ajax 一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语 ...
随机推荐
- LINQ以及LINQ to Object 和LINQ to Entities
LINQ的全称是Language Integrated Query,中文译成“语言集成查询”,是一种查询技术. LINQ查询通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了查询过程.LIN ...
- 27.给input边框和背景颜色设置全透明
给input边框和背景颜色设置全透明,但是里面的字不会消失 1.让背景颜色变透明(二选一) background-color:rgba(0,0,0,0); background:rgba(0,0,0, ...
- VS2010 运行时 出现cmd窗口的设置方法
项目 - 属性 -生成事件 --后期生成事件 ->命令行 (editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$(ProjectName).exe) 注: ...
- 《大话设计模式》c++实现 之工厂模式
工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端 ...
- Python scrapy - Login Authenication Issue
https://stackoverflow.com/questions/37841409/python-scrapy-login-authenication-issue from scrapy.cra ...
- for-each 循环原理
for-each 循环原理1,for-each 是在java5 之后出现的.for是java 上的一个关键字,在jdk 找不到任何for的底层实现的.是因为for的底层实现被封装到了编译器中.所以通过 ...
- 20165305 苏振龙《Java程序设计》第五周学习总结
第七章 Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类. 和某类有关的匿名类就是该类的一个子类,该子类没有明显的用类声明来定义,所以称做匿名类. 和某接口有 ...
- mysql的sql执行计划详解
实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写 ...
- 使用Hive读取ElasticSearch中的数据
本文将介绍如何通过Hive来读取ElasticSearch中的数据,然后我们可以像操作其他正常Hive表一样,使用Hive来直接操作ElasticSearch中的数据,将极大的方便开发人员.本文使用的 ...
- 关于Ajax无法下载文件到浏览器本地的问题
最近在做网站的时候遇到这样一个功能,在如图所示的页面中,需要用户点击链接的时候,能够以异步Ajax的方式判断服务器中是否存储有相应的Excel文件,如果没有的话就提示用户没有找到,如果有的话就下载到用 ...