CSS Ribbon

Reproducing the GitHub Ribbon in CSS

路飞学城Python-Day113

 
107-HTTP协议的无状态保存
什么是无状态保存?
HTTP无状态请求就是客户端每次发送的请求都是单独的新请求,每一次请求都是独立的,这样的特点在网站上就是服务器登录的时候记录浏览器的信息,建立起会话,会话记录有效的防止了http的无状态保存
 
108-cookie简介
cookie和session都是会话编辑技术
什么是会话?
一次请求和一响应不是一次会话,一次会话包含多次请求,编辑技术就是记录了会话的相关信息
什么是cookie?
具体一个浏览器,不同的浏览器有不同的cookie,不同的浏览器针对一个服务器存储的数据key,value结构
cookie是保存在浏览器上的一个结构,针对服务器就要存一个字典形式的信息,浏览器就保存在请求的信息处,浏览器是可以设置
当浏览器发送数据给服务器的时候,服务器就会设置并发送一个cookie,下一次浏览器接收到以后,就会发送这样的一个cookie,就能够建立请求直接的联系,能读到的cookie的服务器就会访问
之前的会话
浏览器在有效期内(一般为2周),浏览器再访问服务器的时候都会带着cookie值,如果是别的浏览器来访问服务器的话,带的是其他的cookie或者空的新cookie给服务器
 
109-Cookie的设置与读取
from django.shortcuts import render, HttpResponse, redirect

# Create your views here.
from app01.models import UserInfo


def login(request):
    if request.method == 'POST':
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        userinfo = UserInfo.objects.filter(user=user, pwd=pwd).first()
        if userinfo:
            '''
            响应体
            最基本都是HttpResponse,其他的相应方式都是继承了HttpResponse
            :return HttpResponse
            :return render
            :return redirect
            '''
            print('登录成功')
            response = HttpResponse('登录成功')
            # 这就是cookie函数,需要加key,value
            response.set_cookie('is_login', True)
            response.set_cookie('user', user)
            return response
        else:
            print('登录失败')
            return HttpResponse('登录失败')
    return render(request, "login.html")


def index(request):
    print(request.COOKIES)
    is_login = request.COOKIES.get('is_login')
    # print(is_login)
    if is_login:
        username = request.COOKIES.get('user')
        return render(request, 'index.html', locals())
    return render(request, 'index.html')
Views.py
class HttpResponseBase:

def set_cookie(self, key, 键
             value='', 值
             max_age=None, 超长时间
                              cookie需要延续的时间(以秒为单位)
                              如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止。

             expires=None, 超长时间
                          expires默认None ,cookie失效的实际日期/时间。
                            

             path='/', Cookie生效的路径,
浏览器只会把cookie回传给带有该路径的页面,这样可以避免将
cookie传给站点中的其他的应用。
/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
            
domain=None, Cookie生效的域名
你可用这个参数来构造一个跨站cookie。
如, domain=".example.com"
所构造的cookie对下面这些站点都是可读的:
www.example.com 、 www2.example.com
                         和an.other.sub.domain.example.com 。
如果该参数设置为 None ,cookie只能由设置它的站点读取。

             secure=False, 如果设置为 True ,浏览器将通过HTTPS来回传cookie。
             httponly=False 只能http协议传输,无法被JavaScript获取
(不是绝对,底层抓包可以获取到也可以被覆盖)
          ): pass
110-设置cookie的超时参数
max_age如果参数不加的话,就是浏览器带着true,设置的数值是以秒数记录,超出秒数就过有效期
expires=None
以秒数为单位设置或者指定日期时间设置
response.set_cookie('is_login', True, max_age=15)



import datetime
date = datetime.datetime(year=2019, month=10, day=15)
response.set_cookie('user', user, expires=date)
设置参数实例

111-设置cookie的有效路径参数

# 指定url的可以带的cookie
response.set_cookie('user', user, path='/index/')
指定路径

112-cookie应用之保存上次访问时间

set
response.set_cookie('time', time.strftime('%Y-%m-%d %X'))

get
date = request.COOKIES.get('time')
if is_login:
username = request.COOKIES.get('user')
return render(request, 'index.html', locals())

html
<h2>Hi {{ username }}</h2>
<hr>
<h2>上一次的登录时间 {{ date }}</h2>
简单代码实例

 

 
 

posted on 2018-10-15 11:32  pandaboy1123  阅读(130)  评论(0编辑  收藏  举报

导航