分页原理、cookie

发布时间 2024-01-02 11:49:12作者: Way*yy

推导分页原理

分页:当我们要展示的数据特别多的时候,一页展示不完,这个时候我们需要把要展示的数据分成多页展示

分页中需要的几个参数:
1. 总数据有多少条
2. 每页展示多少条数据(自己规定的20)
3. 一共展示多少页
4. 总页数 = 总数据量 / 每页展示多少条数据
5. 当前第几页(前端传过去的)

总页数怎么算?
"""
	总条数       每页展示的数据     页数
	100				10			10
	101				10			11
	99				10			10
	...
	divmod(100, 10)  做除法的函数可以自动帮忙取余
"""

分页类的使用

# 以后我们针对像分页类这种第三方工具,我们一般在Django中创建一个utils文件夹保存
# 图书页面展示
def book_list(request):
    # # 1、获取到数据库里面的书籍信息
    # book_obj = models.Book.objects.all()
    # 获取当前页数
    current_page = request.GET.get("page")
    print(current_page)
    # 因为接收过来的是字符串类型,所以我们需要转一下整型,为了强转的时候报错所以需要try一下
    try:
        current_page = int(current_page)
    except Exception as e:
        # 如果强转报错则从第一页开始
        current_page = 1
    # 获取数据库中的所有数据
    book_obj = models.Book.objects.all()
    # 获取数据的总数量
    book_obj_num = book_obj.count()
    print(book_obj_num)
    # current_page:当前页  all_count:数据总条数
    page_obj = Pagination(current_page=current_page, all_count=book_obj_num, per_page_num=10, pager_count=26)
    print(page_obj.start, page_obj.end)
    # 展示show_book_list条数据
    show_book_list = book_obj[page_obj.start:page_obj.end]
    print(show_book_list)   
    page_html = page_obj.page_html()
    return render(request, 'book_list.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 = ''
            
    要求:每个学生都必须做到能够脱稿说出cookie和session的原理.
    """
 
# 如果都把用户信息保存在django_session表中,有没有其他问题?
最大的问题就是数据量一旦很大,查询就是致命的

# 怎么解决这个问题
需要用到token
token就是一个随机字符串------->保存着用户信息---------->字符串返回给前端------>每次都把token提交过来------>后端做验证.

加密和解密都是后端做的,前端只需要每次把这个串来回传递就行了


# jwt------------>三段式--------->

跟面试相关的:
	1. 保存在浏览器上的数据都称之为是cookie
    2. session是保存在服务端的
    3. session的数据相对更加安全,cookie不够安全
    4. session是基于cookie工作的? 对还是不对? 对
    5. django让浏览器保存cookie,用户有权可以设置浏览器不保存
    6. session离开cookie一定就不能工作了,对还是不对?
    	
务必掌握!!!  

Django操作cookie

# 在Django中如何使用cookie?
Django的三板斧:
	HttpResponse、render、redirect
    
obj = HttpResponse()
return obj

obj= render()
return obj

obj = redirect()
return obj