分页和cookie
分页
# 当数据量过多的时候,一页展示不完,就需要分页
参数:
1. 当前页
2. 总数据
3. 每页数据
4. 总页数
def index(request):
book_obj = models.Book.objects.all() # 实例化一个对象
count = book_obj.count() # 总数量
per_page_num = 5 # 每页展示多少条数据
current_page = request.GET.get('page', 1) # 获取前端返回的值
current_page = int(current_page)
start = (current_page - 1) * per_page_num
end = start + per_page_num
page_count, yushu = divmod(count, per_page_num) # 总页数
if yushu:
page_count += 1
page_html = ''
temp = current_page
if current_page<4: # 判断下限
current_page = 4
if current_page>(page_count-3): # 判断上限
current_page=(page_count-3)
for i in range(current_page-3, current_page + 4):
if i == temp:
page_html += '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i)
else:
page_html += '<li><a href="?page=%s">%s</a></li>' % (i, i)
book_lis = book_obj[start:end]
return render(request, 'index.html', locals())
分页类的使用
# 以后再实际项目中,会经常用到非django 的第三方工具,对于这种第三方工具,我们一般会在django中新建一个文件夹叫 utils,以后很多封装的代码都使用用面向对象的写法
from utils.mypage import Pagination
from django.conf import settings # 推荐这样优先查找本项目下的settings,找不到去源码找
# from Django05 import settings # 只能获取这个文件下的settings的数据
current_page = request.GET.get('page', 1)
book_obj = models.Book.objects.all()
count = book_obj.count()
per_page_num = settings.PER_PAGE_NUM
page_obj = Pagination(current_page, count, per_page_num, 7)
book_lis = book_obj[page_obj.start:page_obj.end]
page_html = page_obj.page_html()
cookie和session的简单介绍
介绍一些背景信息
"""
1. 网站它是不用保存用户的信息,最早期的时候,网站都是一些静态网站
eg:新闻网站 博客
2. 随着技术发展,诞生了很多需要登录的网站
eg: 淘宝 京东 支付宝...
登录:解决了在网站中,网站可以识别出你是谁
以登录为例,当用户第一次登录网站的时候,用户输入用户名和密码,如果不保存下来,拿用户就每次都需要登录,意味着每次都要输入用户名和密码、
针对以上的问题,如何解决的嫩?
利用到了cookie,当用户第一次登录成功网站的时候,服务端告诉浏览器把用户名和密码都给用户的浏览器,然后,用户浏览器把用户名和密码保存在本地,之后,用户在每次访问网站的时候,会自动把之前保存的用户名和密码都传给服务端,服务端接收浏览器传过来的用户名和密码在进行验证.
针对以上方案有没有问题? 肯定是有的,把用户名和密码保存在浏览器本地最大的问题就是不安全!!!
如何优化一下上述不安全问题?
session的诞生, session是把数据保存在服务端的,但是,session会生成一个随机字符串,在服务端做随机字符串和用户信息的对应关系
就是把用户信息保存在数据表中了,它是如何保存的?
随机字符串1:用户信息1
随机字符串2:用户信息2
随机字符串3:用户信息3
session做的事情:
1. 生成一个随机字符串
2. 把随机字符串和用户信息的对应关系保存在数据表中
3. 把随机字符串返回给浏览器,让浏览器把随机字符串保存下来
之后,用户在访问网站的时候,会把随机字符串一块提交过来,服务端拿着随机字符串去数据表中查询,如果查到了,说明登录了,如果查不到,就说明还没有登录
select * from t where key = ''
背景信息:cookie在浏览器上是可以选择不保存的
面试题1:session是基于cookie工作的?对,为什么?
面试题2:如果浏览器把保存cookie的开关关掉了,说白了就是不能保存用户信息了,问:session一定不能用了?对于不对?不对,
session把数据保存在数据表里了,但是,当数据量特备大的时候,查询效率肯定会降低
token:就是一个算法
"""
1. cookie
# 就是把数据保存在浏览器上的数据都可以称之为cookie
cookie一般保存的形式是:k:v键值对
2. session
# session把数据保存在服务端
关于cookie和session的面试题:
1. cookie把数据保存在浏览器
2. session把数据保存在服务端
3. session保存的数据更加安全
3. token
4. jwt------------>三段式信息-------------》加密得到的
Cookie的操作
# 使用Django操作cookie
return HttpResponse
return redirect
return render
obj = HttpResponse
return obj
obj = redirect
return obj
obj = render
return obj
# 如果你想操作cookie,必须使用obj对象
1. 设置cookie
obj.set_cookie('key', 'value')
2. 获取cookie
print(request.COOKIES.get("key"))
3. 还可以给cookie设置一个过期时间
max_age:
expires:是IE浏览器
# 都是用来设置过期时间的
4. path
5. 前端也可以获取cookie和session
localstorage
sessionstorage
6. 删除Cookie(退出功能,注销功能)
res.delete_cookie
标签:obj,分页,current,session,cookie,浏览器,page
From: https://www.cnblogs.com/juzixiong/p/17379958.html