Django学习笔记NO3

模型:

每个模型都是一个Python类,这些类继承django.db.models.Model。
模型类的每个属性都相当于一个数据库的字段
ORM(对象关系映射):为了解决面向对象于数据库存在的互不匹配的现象的技术。

cookie:

cookie是浏览器为web服务器存的一小信息。每次浏览器从某个服务器请求页面时,都会自动带上以前收到的cookie。cookie保存在客户端,安全性差。
用法:
1、设置cookie

HttpResponse.set_cookie(key, value='', max_age=None, expires=None,path='/', domain=None, secure=None, httponly=False)

参数:

  • key: cookie的名称(*)
  • value: cookie的值,默认是空字符
  • max_age:cookies的持续有效时间(以秒计),如果设置为 None,cookies 在 浏览器关闭的时候就失效了。
  • expires:cookies的过期时间,格式:“Wdy, DD-Mth-YY HH:MM:SS GMT” 如果设置这个参数,它将覆盖max_age。
  • path: cookie⽣效的路径前缀,浏览器只会把cookie回传给带有该路径的⻚ ⾯,这样你可以避免将cookie传给 站点中的其他的应⽤。/ 表示根路径,特殊的:根路径的cookie可以被任何url的⻚⾯访问
  • domain: cookie⽣效的站点。你可⽤这个参数来构造⼀个跨站cookie。如, domain=".example.com"所构造的 cookie对下⾯这些站点都是可 读的: www.example.com 、 www2.example.com。 如果该参数设置为None,cookie只能由设置它的站点读取。
  • secure: 如果设置为 True ,浏览器将通过HTTPS来回传cookie。
  • httponly: 仅http传输 不能使⽤js获取cookie

2、 获取cookie

HttpRequest.COOKIES.get(key)

获取加“盐”的cookie

HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='',max_age=None)

3、 删除cookie

HttpResponse.delete_cookie(key, path='/', domain=None)

session:

cookie看似解决了HTTP(短连接、⽆状态)的会话保持问题,但把全部⽤户数据保存在客户端,存在安全隐患,于是session出现了。我们可以 把关于⽤户的数据保存在服务端,在客户端cookie⾥加⼀个sessionID(随机字符串)。
工作流程:

  • 当⽤户来访问服务端时,服务端会⽣成⼀个随机字符串;
  • 当⽤户登录成功后 把 {sessionID :随机字符串} 组织成键值对加到cookie⾥发送给⽤户;
  • 服务器以发送给客户端 cookie中的随机字符串做键,⽤户信息做值,保存⽤ 户信息;
  • 再访问服务时客户端会带上sessionid,服务器根据sessionid来确认⽤户是否 访问过⽹站

cookie和session的区别与联系

  • 区别:
    –session将数据存储与服务器端,cookie存储在客户端
    -cookie 存储在客户端,不安全,sess存储在服务器端,客户端只存sesseionid,安全
    -cookie在客户端存储值有⼤⼩的限制,⼤约⼏kb。session没有限制
  • 联系:
    -session 基于cookie

session操作:

  • session设置:
def doregister(request):
	'''
	request.session['username'] = username
	
  • session获取:
def index(request):
	'''
	# session获取
	username = request.session.get('username')
  • session删除:
    clear() 清空所有session,但是不会将session表中的数据删除
    flush()清空所有,并删除表中的数据
    logout()退出登录,清除所有,并删除表中的数据
    del req.ression[‘key’]删除某一个session值
def logout(request):
	'''
	 request.session.flush()
  • session过期时间:
req.session.set_expiry(5)

分页

Paginator 分页器

Paginator⽤于分⻚,但Paginator并不具体管理具体的⻚的处理,⽽是使⽤Page对象管理具体⻚⾯。

  • 创建分页器对象
    格式:Paginator(<query_set查询集>,每⻚显示数据的条数)

  • 对象的属性
    count 分页对象的个数
    num_pages 总页数
    page-range 页码的列表

  • 方法
    page(num) 返回page对象,如果给定的页码不存在,就抛出异常

page对象

page对象具体负责每⻚的处理,包括每⻚的数据,当前⻚的⻚码,是否有上⼀⻚或下⼀⻚等。

类别、名称说明
属性、object_list当前页码上的所有数据
属性、number当前页码值
属性、paginator返回Paginator的对象
方法、has_next是否有下一页
方法、has_previous是否有上一页
方法、has_other_pages是否有上一页或下一页
方法、has_page_number返回下一页的页码
方法、previous_page_number返回上一页的页码
方法、len返回当前页数据的个数
  • 实例
# 路由
url(r'^userlist/$',views.userlist,name='userlist'),
url(r'^userlist/(\d+)/$',views.userlist,name='userlist1'),
# views.py
def userlist(request,page=1):
	users = User.objects.all()
 	# 实例化分⻚对象,⼀⻚两条记录
 	pagination = Paginator(users,2)
 	page = pagination.page(page) #某⼀⻚的分⻚对象
 	return render(request,'userlist.html',context={
 		'data':page.object_list, #当前⻚的数据(列表)
 	'page_range':pagination.page_range,#⻚码范围
 	'page':page
 	})
# 模板文件
<ul class="pagination">
	{% if page.has_previous %}
	<li>
		<a href="{% url 'app:userlist1'page.number|add:'-1' %}" aria-label="Previous">
			<span aria-hidden="true">&laquo;</span></a>
	</li>
	{% else %}
	<li class="disabled">
		<span href="{% url 'app:userlist1'page.number|add:'-1' %}" aria-label="Previous">
		<span aria-hidden="true">&laquo;</span></span>
	</li>
	{% endif %}

	{% for num in pagerange %}
		{% ifequal num page.number %}
		<li class="active"><a href="{% url'app:userlist1' num %}">{{ num }}</a></li>
	{% else %}
		<li><a href="{% url 'app:userlist1'num %}">{{ num }}</a></li>
		{% endifequal %}
	{% endfor %}
	
	{% if page.has_next %}
	<li>
		<a href="{% url 'app:userlist1'page.number|add:'1' %}" aria-label="Next">
		<span aria-hidden="true">&raquo;</span></a>
	</li>
	{% else %}
		<li class="disabled">
		<span href="#" aria-label="Next">
		<span aria-hidden="true">&raquo;</span></span>
	</li>
	{% endif %}
</ul>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值