---恢复内容开始---

一、cookie

  前戏.cookie 的由来

  由于http协议是无状态的 无法记录用户状态

  cookie就是保存在客户端浏览器上的键值对

  工作原理:当你登陆成功之后 浏览器会保存一些信息

  下次再访问的时候 就会携带着这些信心 访问服务端 服通过识别你携过来的信息进行判断

  cookie 虽热是写在浏览器的浏览器上的 但是浏览器可以不服从命令 禁止写cookie  这样的结果就会让用户没办法登陆了

  如何操作cookie

  django 返回给客户端浏览器的都必须是HttpResponse对象

  return HttpResponse()

  return render()

  retrurn redirct()

  1.cookie的设置

  后端代码 只有用户登陆成功之后才让他啊进行登陆

  

def log(request):
if request.method == 'POST': username = request.POST.get('username')
password = request.POST.get('password')
print(username,'---')
if username == 'aaa' and password == '':
obj = redirect('/home/')
print(obj)
obj.set_cookie('username','koko') # 只要设置了 一会浏览器就会保存cookie k:v
return obj
# 先返回一个用户登陆
return render(request,'log.html')

  

obj.set_cookie('username','koko',max_age=3)   max_age = 3 是一个秒数进行计算的 也就是说3秒后就失效了 这个cookie 值 页码也会登陆失败 类是强制下线

设置超时时间
max_age=None, 访问的时间  
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)  被访问的时间 Django 默认14天

  2.cookie的获取

通过request 获取

def home(request):
# 也就是说这里是先让榕湖登陆成功之后才能进行访问的其他页面
# 获取COOKIE 值
if request.COOKIES.get('username'): return HttpResponse('我是home 页面 登陆成功才可以访问')

  3.cookie的删除

三剑客对象返回 对象 进行删除

# 删除也就是用户的注销功能
def logout(request):
obj = HttpResponse('已经注销')
obj.delete_cookie('username')
return obj
# 现在有一个需求就是比如我刚看见一件衣服想买 点击之后发现并没有登陆 浏览器让我去登陆 并在登陆成功之后 返回到我买衣服的界面
# 装饰器的对把
from functools import wraps

def auth_login(func):
@wraps(func)
def inner(request, *args, **kwargs): # 获取路径 塞到返回的页面路径
# 后端通过get()去就可以了
# 从request 中获取路径
target_url = request.get_full_path()
res = request.COOKIES.get('username')
if res:
func(request,*args, **kwargs)
else:
return redirect('/log/?index=%s' % target_url) return inner

二.session

  session的由来

  session 是保存在服务器上的简直对

  session 虽然保存在浏览器上 但是它依赖于cookie 工作

  服务器返回给浏览器一个随机的字符串 浏览器键值对的新式进行保存

  seesionid:随机字符串保存在服务端

  cookie:浏览器在访问时 就会将随机的字符串携带上 后端获取获取服务端的字符串进行比较

  随机字符串1:数据1

  1.session的设置

def set_session(request):
request.session['username'] = 'aaa'
return HttpResponse('ok')

session 如何设置时间呢

def set_session(request):
request.session['username'] = 'bbb'
request.session.set_expiry(5) # vlues 参数是秒计算的
return HttpResponse('ok')

5秒后sesssion 就会消失

def get_session(request):
print(request.session.get('username')) # 再次取值是个空 session >>>None return HttpResponse('ok')

"""
上面这一句话发生了三件事
1.django 内部自动生成一个随机字符串
2.将随机字符串和你要保存的数据 写入django_session表中(现在内存中生成一个缓存记录 等到经过中间件的时候才会执行)
3.将产生的随机字符串发送给浏览器写入cookie
sessionid:随机字符串
"""

  2.session的获取

def get_session(request):
print(request.session.get('username')) return HttpResponse('ok')

  3.session的删除\

  

def session_logout(request):
# request.session.delete() # 只会删除浏览器
request.session.flush() # 服务器和浏览器都会删除
return HttpResponse('ok')

这用于确保前面的会话数据不可以再次被用户的浏览器访问
例如,django.contrib.auth.logout() 函数中就会调用它。

django session默认的超时时间是14天

django_session表中的一条记录针对一个浏览器

如果其他浏览器就会产生第二条记录

三。作业  session 验证用户登陆 返回 访问的页面  》》》装饰器的进行操作  》》》url  返回到登陆的页面

  

  

def auth_login(func):
@wraps(func)
def inner(request, *args, **kwargs): # 获取路径 塞到返回的页面路径
# 后端通过get()去就可以了
# 从request 中获取路径
target_url = request.get_full_path()
res = request.COOKIES.get('username')
if res:
func(request,*args, **kwargs)
else:
return redirect('/log/?index=%s' % target_url) return inner
@auth_login
def shopping(request):
if request.COOKIES.get('username'):
print(request.COOKIES.get('username'),'-----==')
return render(request,'shopping.html') # 有问题 ????
ValueError at /shopping/
The view app01.views.shopping didn't return an HttpResponse object. It returned None instead.
Request Method: GET
Request URL: http://127.0.0.1:8000/shopping/
Django Version: 1.11.
Exception Type: ValueError
Exception Value:
The view app01.views.shopping didn't return an HttpResponse object. It returned None instead.
Exception Location: C:\Users\\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py in _get_response, line
Python Executable: C:\Users\\AppData\Local\Programs\Python\Python36\python.exe
Python Version: 3.6.
Python Path:
['D:\\forms_24',
'D:\\forms_24',
'C:\\Users\\10243\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
'C:\\Users\\10243\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
'C:\\Users\\10243\\AppData\\Local\\Programs\\Python\\Python36\\lib',
'C:\\Users\\10243\\AppData\\Local\\Programs\\Python\\Python36',
'C:\\Users\\10243\\AppData\\Roaming\\Python\\Python36\\site-packages',
'C:\\Users\\10243\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages',
'C:\\Program Files\\JetBrains\\PyCharm '
'2018.1.4\\helpers\\pycharm_matplotlib_backend']
Server time: Tue, Sep :: +

Django之cookie 和session的更多相关文章

  1. Django之Cookie、Session、CSRF、Admin

    Django之Cookie.Session.CSRF.Admin   Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...

  2. [py][mx]django的cookie和session操作-7天免登录

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  3. Django基础cookie和session

    Django基础cookie和session 1.会话跟踪 ​ 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如给10086打个电话,你就是客户端, ...

  4. django的cookie和session以及内置信号、缓存

    cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...

  5. django的cookie 和session

    Cookie 1.获取cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt=' ...

  6. Django组件-cookie与session

    一.会话跟踪技术 1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...

  7. web框架开发-Django组件cookie与session

    http协议的每一次都是无保存状态的请求,这会带来很多的不方便,比如,一刷新网页,或者进入该网页的其他页面,无法保存之前的登录状态.为了解决类似这样的问题,引入了会话跟踪 会话跟踪技术 1 什么是会话 ...

  8. Django 之 cookie和session

    一. Cookie 1.Cookie的由来 因为HTTP协议是无状态的,无状态的意思就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,也不会受前后请求响应情况直接影响.简 ...

  9. django之COOKIE 与 SESSION

    COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  10. 9.Django组件-cookie和session

    HTTP协议的无保存状态,对两次请求没有任何关联.每次请求都是相互独立的. 1.cookie简介 什么是会话跟踪技术我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会 ...

随机推荐

  1. (59)Linux操作系统深入应用

    目录: 第一部分:嵌入式的含义 第二部分:DOS命令 第三部分:linux的发展历史(与unix的关系) 第四部分: 基于ubuntu下的linux命令详解大全         第一部分:嵌入式的含义 ...

  2. vue-router(转)——基本使用 + 路由守卫无限循环问题

    路由守卫无限循环问题 https://www.jianshu.com/p/1187f8f74a72 学习目的 学习Vue的必备技能,必须 熟练使用 Vue-router,能够在实际项目中运用. Vue ...

  3. Singleton(Java)

    1.定义私有静态易变的类变量2.定义getInstance静态方法 2.1.若静态变量为null,则在同步类类型的同时判断静态实例是否为null, 是null则创建新实例赋给静态变量 2.2.不为nu ...

  4. legend3---Homestead常用操作代码

    legend3---Homestead常用操作代码 一.总结 一句话总结: 在虚拟机里面改变文件windows里面也会变,在windows里面改变虚拟机里面也会变,所以可以在windows里面编程或者 ...

  5. 监听浏览器返回键、后退、上一页事件(popstate)操作返回键

    在WebApp或浏览器中,会有点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面.确认离开页面或执行一些其它操作的需求.可以使用 popstate 事件进行监听返回.后退.上一页操作. 一 ...

  6. 【后台管理系统】—— Ant Design Pro页面相关(二)

    一.弹框Modal表单 使用Form.create()包装得到一个含有this.props.form属性的CreatForm自组件 从页面主(父)组件获得props数据和propsMethod方法 r ...

  7. 如何进行EDM邮件内容的撰写

    近两个月没有来博客园更新一下博客文章了,实在惭愧,最近忙于工作,经常加班.下面来说说EDM邮件内容的撰写技巧吧,本文就跟大家交流一下自己一直以来的心得体会. EDM中很重要的一个步骤,就是邮件内容的撰 ...

  8. Vue创建局部组件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. datalist的模板里的label要绑定一个函数

    列下如何在前台绑定数据时呼叫後台方法 如下GetInfoByID是后台方法,Eval("ID").ToString()是你在前台绑定数据传入的字段名 <asp:Label I ...

  10. CSS3——提示工具 图片廓 图像透明 图像拼接技术 媒体类型 属性选择器

    提示工具 提示框在鼠标移动到特定的元素上显示 设置提示框的位置 给提示框添加箭头 提示框的淡入效果 提示框美化 图片廓 响应式图片廓 图像透明 创建透明图像——悬停效果 ———鼠标放置后———> ...