---恢复内容开始---
一、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 == '123': 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.11 Exception Type: ValueError Exception Value: The view app01.views.shopping didn't return an HttpResponse object. It returned None instead. Exception Location: C:Users10243AppDataLocalProgramsPythonPython36libsite-packagesdjangocorehandlersbase.py in _get_response, line 198 Python Executable: C:Users10243AppDataLocalProgramsPythonPython36python.exe Python Version: 3.6.4 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, 24 Sep 2019 17:53:24 +0000