Python基础day63 Django分页和cookie、session
推导分页的原理
分页:当我们要展示的数据特别多的时候,一页展示不完,这个时候我们需要把要展示的数据分成多页展示
分页中需要的几个参数:
1. 总数据有多少条
2. 每页展示多少条数据(自己规定的20)
3. 一共展示多少页
4. 总页数 = 总数据量 / 每页展示多少条数据
5. 当前第几页(前端传过去的)
总页数怎么算?
总条数 每页展示的数据 页数
100 10 10
101 10 11
99 10 10
...
divmod(100, 10)
分页类的使用
# 以后我们针对像分页类这种第三方工具,我们一般在Django中创建一个utils文件夹保存 from utils.mypage import Pagination current_page = request.GET.get('page') try: current_page = int(current_page) except Exception: current_page = 1 user_list = models.UserInfo.objects.all() all_count = user_list.count() page_pbj = Pagination(current_page, all_count, per_page_num=10) user_list = user_list[page_pbj.start:page_pbj.end] page_html = page_pbj.page_html() return render(request, 'index.html', locals())
cookie和session的介绍(重要)
HTTP协议的特性之一:无状态
背景信息:
1.早期的时候一些网站都是静态网站,不需要登录,比如:新闻类、博客等
2.随着技术的发展以及用户的要求,诞生了诸如支付宝、淘宝、京东等电商平台,这些网站就必须要求客户登录,如果不登录,商家不知道是谁买的东西。登录的目的其实就是商家可以识别这个用户是谁
3.诞生了保存用户状态的技术:cookie和session
以登录功能为例:
分析cookie的原理
进入淘宝网站,第一次肯定是需要登录的,如果登录成功,淘宝网站不保存你的用户信息,意味着你下次再次访问淘宝的时候还需要重新登录。每一次访问淘宝的页面都需要登录就会非常影响用户体验。
如何解决上述问题?
这个时候就用到了cookie,比如你第一次登录成功之后,Django后端让浏览器把你的用户名和密码保存在浏览器中,你下次在访问淘宝页面的时候,浏览器会自动把他之前保存的用户名和密码一起提交到Django后端,Django后端每次都拿着浏览器发过来的用户名和密码再次做验证。
上述的做法有没有什么问题? 有
数据保存在浏览器上面,很明显的问题是:数据不够安全
如何解决上述数据不安全的问题
其实是做了优化:把原本存在浏览器上的数据存到后端,就称之为是session
session就解决了cookie数据不安全的问题
session的原理:
以登录功能为例:
第一次登录成功之后,把用户信息保存在后端,其中,django默认是把用户信息保存在数据表中了 django_session表中了
1. 先生成一个随机字符串
2. 把用户的信息保存在django_session表中
session_key session_data expire_date
随机字符串1 用户信息1
随机字符串2 用户信息2
随机字符串3 用户信息3
随机字符串4 用户信息4
随机字符串5 用户信息5
3. Django后端会把随机字符串告诉浏览器保存起来
4. 以后用户每次访问页面的时候,浏览器每次都要把随机字符串提交过来,Django后端拿到随机字符串,去django_session表中查询数据,如果查到了,就说明以前登录成功了,如果查不到,就说明还没有登录
select * from django_session where session_key = ''
如果都把用户信息保存在django_session表中,有没有其他问题?
最大的问题就是数据量一旦很大,查询就是致命的
怎么解决这个问题
需要用到token
token就是一个随机字符串------->保存着用户信息---------->字符串返回给前端------>每次都把token提交过来------>后端做验证.
加密和解密都是后端做的,前端只需要每次把这个串来回传递就行了
PS:
1. 保存在浏览器上的数据都称之为是cookie
2. session是保存在服务端的
3. session的数据相对更加安全,cookie不够安全
4. session是基于cookie工作的? 对还是不对? 对
5. django让浏览器保存cookie,用户有权可以设置浏览器不保存
6. session离开cookie一定就不能工作了,对还是不对?
Django操作cookie
# 在Django这种如何使用cookie、 三板斧: return HttpResponse return render return redirect obj = HttpResponse return obj obj = render return obj obj = redirect return obj # 操作cookie的时候,就用到了这个obj对象