THU.Cookie 及 Session
批量插入数据
book = [ ]
res= models. Book. objects. count( )
print ( res)
分页原理的推导过程
1 . 当前第几页
2 . 每页展示多少条数据
3 . start= 20 , end = 10
4 . 总数据
eg:
1 . 总数据:100 , 每页显示10 条
page = 100 / 10 = 10
2 . 总数据:101 , 每页显示10 条
page = 100 / 10 + 1 = 11
3 . 总数据:99 , 每页显示10 条
page = 99 / 10 + 1 = 10
只要是余数不为0 , 总页数= 商+ 1
divmod ( 100 , 10 )
select * from table limit 50 , 10
分页类的使用
from utils. mypage import Pagination
book_count = models. Book. objects. count( )
current_page = request. GET. get( 'page' , 1 )
obj = Pagination( current_page, book_count)
page_html = obj. page_html( )
book_list = models. Book. objects. all ( ) [ obj. start: obj. end]
cookie和session的介绍
cookie
服务端保存在客户端浏览器上的信息都可以称之为 cookie 一般以 k: v 键值对的形式保存,可以有多个
session
数据是保存在服务端的并且他的表现形式一般也是 k: v 键值对,
总结:
cookie 就是保存在客户端浏览器上的信息 session 就是保存在服务端上的信息数据 session 是基于 cookie 工作的(其实大部分的保存用户状态的操作都需要 cookie)
http协议的四大特性:
无状态:不能保存用户信息
cookie, session, token , jwt
在浏览器中保存
用户登录, 保存用户信息
补充
token
- session 虽然数据是保存在服务端的,但是禁不住数据量大
- 服务器不再保存数据
- 登陆成功之后 将一段用户信息进行加密处理,将加密之后的结果拼接在信息后面,整体返回给浏览器保存,浏览器下次访问的时候带着该信息,服务端自动窃取前面一段信息再次使用自己的加密算法跟浏览器尾部的密文进行比对
Django操作cookie
- 虽然 cookie 是服务端告诉客户端浏览器需要保存内容,但是客户端浏览器可以选择拒绝保存
- 那么只要是需要记录用户状态的网站即使登录成功都无法使用
return HttpResponse( )
return render( )
return redirect( )
obj1 = HttpResponse( )
obj2 = render( )
obj3 = redirect( )
设置 cookie
obj. set_cookie( key, value)
获取 cookie
request. COOKIES. get( key)
设置超时时间(均以秒为单位)
obj. set_cookie( key, value, max_age= x)
obj. set_cookie( key, value, exprise= x)
登录功能
1 、登录验证装饰器
def login_property ( func) :
def inner ( request, * args, ** kwargs) :
last_url = request. get_full_path( )
if request. COOKIES. get( 'account' ) :
return func( request, * args, ** kwargs)
else :
return redirect( '/model/login/?next=%s' % last_url)
return inner
2 、登录功能
def login ( request) :
if request. method == 'POST' :
account = request. POST. get( 'account' )
password = request. POST. get( 'password' )
if account == 'Only' and password == '0310' :
last_url = request. GET. get( 'next' )
if last_url:
obj = redirect( last_url)
else :
obj = redirect( '/model/' )
obj. set_cookie( 'account' , 'Just_you' , max_age= 20000 )
return obj
return render( request, 'login.html' )
3 、返回主页
@login_property
def homepage ( request) :
if request. COOKIES. get( 'account' ) == 'Just_you' :
return render( request, 'homepage.html' )
return redirect( '/model/login/' )
4 、注销功能
@login_property
def get_out ( request) :
obj = redirect( '/model/login/' )
obj. delete_cookie( 'account' )
return obj
Django操作session
session 数据是保存在服务端的,给客户端返回的是一个随机字符串
- sessionid: 随机字符串
在默认情况下操作 session 的时候需要 Django 默认的一张 Django_session 表
- 数据库迁移命令
Django 默认 session 的过期时间是 14 天
设置 session(可以同时设置多个值)
- request. session[ 'key' ] = values
def set_session ( request) :
request. session[ 'hobby' ] = 'girl'
"""
1.Django 内部自动随机生成一个字符串
2.Django 内部自动将随机生成的字符串和对应的数据保存到 Django_session 表中
2.1现在内存中产生操作数据的缓存
2.2在响应结果 Django 中间件的时候才真正操作数据库
3.将产生的字符串返回给客户端浏览器保存
"""
request. session. set_expiry( )
"""
1、整数 多少秒
2、日期对象 到指定日期就失效
3、0 一旦当前浏览器窗口关闭立刻失效
4、不写 14 天,Django 内部全局 session 默认的失效时间
"""
return HttpResponse( '嘿嘿嘿' )
获取 session(request. session 获取的是一个对象,里面可以包含多个值)
- request. session. get( 'key' )
def get_session ( request) :
if request. session. get( 'hobby' ) :
"""
1.自动从浏览器中获取 sessionid 对应的随机字符串
2.拿着该字符传去 Django_session 表中查找对应数据
3.如果比对上了, 则将对应的数字取出并以字典的形式封装到 request.session 中
如果比对不上,则 request.session 返回的结果为 None
"""
return HttpResponse( '^_^' )
return HttpResponse( '大爷,再来啊' )
'''
Django_session 表中的数据条数取决于浏览器
同一个计算机(IP地址)同一浏览器只会有一条数据生效(主要是为了节省服务端资源)
更换浏览器即可增加数据条数
当 session 过期时可能会出现多条数据对应一个浏览器,内部会自动识别并清除过期的 session 数据,也可以手动清除
一条数据可以对应
'''
清除 session
request. session. delete( )
request. session. flush( )
session 是保存在服务端的,但是 session 的保存位置可以有多种选择