쿠키 및 세션 도입 및 운영
왜 이러한 기술이
1 목적은 사용자에게 클라이언트의 상태를 저장하는 것입니다
둘 이유 : HTTP 프로토콜은 무 상태입니다
쿠키
쿠키 : 대한 클라이언트 브라우저에 키 저장
키 쿠키는 클라이언트 브라우저의 우측에 저장되어 있지만, 그러나 그것은 서버, 쓰기에 대한 권리의 브라우저 쿠키 금지에 의해 설정된다
어떻게 장고 쿠키 작업
화이트 세 가지 트릭 될 것입니다
쿠키를 작동 할 수 있습니다 개체 (OBJ)를 사용하여
obj=HttpResponse()
obj=render()
obj=redirect()
return obj
설정 쿠키
obj.set_cookie('k1','v1')#告诉浏览器设置cookie
쿠키를 받기
request.COOKIES.get('k1')#获取浏览器携带过来的cookie值
설정 쿠키 시간 제한
두 매개 변수는 시간 설정, 그리고 초에
차이 : 당신은 IE 브라우저의 쿠키 시간 제한을 설정하려는 경우에만 사용이 만료
obj.set_cookie('k1','v1',max_age=3)
obj.set_cookie('k1','v1',expires=3)
삭제 쿠키
(注销 退出登录)
obj.delete_cookie('k1')
def login(request):
if request.method=='POST':
username=request.POST.get('username')
password=request.POST.get('password')
if username=='jason' and password=='123':
old_path=request.GET.get('next')
if old_path:#防止用户直接访问login页面
obj=redirect(old_path)
else:
obj=redirect('/home/')#默认跳转到首页
# obj.set_cookie('whoami','jason',max_age=10)#告诉浏览器保存一个键值对,max_age=10:十秒后失效
obj.set_cookie('whoami','jason')#告诉浏览器保存一个键值对,max_age=10:十秒后失效
return obj
return render(request,'login.html')
#装饰器
from functools import wraps
def login_auth(func):
@wraps(func)
def inner(request,*args,**kwargs):
#判断当前用户是否登录
print(request.path_info)#只获取url
print(request.get_full_path())#获取url+get参数
if request.COOKIES.get('whoami'):
res=func(request,*args,**kwargs)
return res
else:
target_path=request.path_info
return redirect('/login/?next=%s'%target_path)
return inner
@login_auth
def home(request):
#校验用户是否登录
# if request.COOKIES.get('whoami'):
return HttpResponse('home页面 只有登录的人才可以访问')
@login_auth
def index(request):
return HttpResponse('index页面 只有登录的人才可以访问')
@login_auth
def logout(request):
obj=redirect('/login/')
obj.delete_cookie('whoami')
return obj
세션
세션 :의 서버 측에 저장된 키
작동 메커니즘 세션은 쿠키에 의존
설정 세션
데이터가 생성 될 때 세션을 장고, 그것은 브라우저입니다
request.session['k1']='v1'
처음 설정은 불평 할 것이다 : 어떤 명령은 데이터베이스 마이그레이션을 수행하지 않으려면 기본 테이블을 사용하는 몇 가지 장고 필요 (django_session)를 생성
만료 시간 장고의 기본 세션은 14 일입니다
request.session [ 'K1'= ' V1' 것들 일 :
1.django 내부 호출 알고리즘을 자동으로 랜덤 문자열 (데이터가 암호화되어) 생성을
2. 추가 django_session 데이터
데이터가 실패 후 임의의 문자열을 암호화 시간
dnsfj의 ksdfjksjfksjfdjf는
브라우저에 저장 그래서 무작위로, 클라이언트 브라우저에 반환 된 문자열 3. 생성
된 세션 : 임의의 문자열을
세션을 얻기
request.session.get('k1')
1.django 자동 쿠키 요청 헤더 얻었다 내부
랜덤 문자열 유지 열한 정렬 표 2에 대응하는 세션 ID django_session
3. 대응하는 임의의 문자열의 비율이 자동적으로 데이터 수집을 출력 OUT request.session에 CCP 프로그래머가 호출합니다. 그 비교의 빈 사전이 아닌 경우
삭제 세션
request.session.delete()#客户端和服务端全部删除,只会根据浏览器的不同删除对应的数据
request.session.flush()
설정 세션 만료 시간
request.session.set_expriy(5)
request.session.set_expriy(value)
如果value是一个整数,session会在value秒数之后失效
如果value是一个datatime或timedelta,session就会在这个时间后失效
如果value是0,用户关闭浏览器session就会失效
如果value是None,session会依赖全局session失效策略
def set_session(request):#设置session
request.session['k1']='jason666'
request.session.set_expiry(10)#设置失效时间
# request.session['k2']='json666'
# request.session['k']='jasn666'
return HttpResponse('设置成功')
def get_session(request):#获取session
if request.session.get('k1'):
# res=request.session.get('k1')
# res=request.session.get('k2')
# res=request.session.get('k3')
return HttpResponse('获取成功')
return HttpResponse('失效了')
def delete_session(request):#删除session
request.session.delete()#客户端 服务端全部删除
# request.sesion.flush()#建议使用这个
return HttpResponse('删除了')
추가 세션
그것은 데이터베이스로 사용할 수 있습니다 : 데이터베이스 소프트웨어 (관계형, 비 관계형), 파일, 메모리
토큰 : 암호화 된 문자열을
장고 미들웨어
미들웨어 장고 일곱 기본이 있습니다 :
만큼 당신이 사이트의 전체 기능의 일부를 수행 할, 당신은 장고 미들웨어를 사용하는 것이 좋습니다
검증 1. 글로벌 사용자 로그인
이 글로벌 사용자 액세스 빈도 검사
3. 글로벌 사용자 권한 확인
장고 미들웨어 프레임 워크가 그래서 가장 완벽한이해야 할 일
"반영 대상 문자열" ""
"" "" "" "미들웨어 세계를"
일곱 기본 장고 미들웨어, 미들웨어 및 지원 사용자 정의, 다음 다섯 사용자에게 노출이 방법을 사용자 정의 할 수 있습니다
당신은 알고 있어야합니다 :
process_request
1. 상기 요청은 위에서 아래로 될 때, 순차적으로 다음의 이동에있어서, 상기 미들웨어 내부가 아닌 경우 프로필 설정에있어서, 상기가 수행 미들웨어 정의 된 각 중간 내부 process_request 방법을 위해 수행되는
방법 2 반환 HttpResponse에 객체되면, 그 요청을 즉시 중지 다음 즉시 철수, 이동합니다
process_response
가기 위해 아래에서 갈 1 응답 시간은 순차 내부의 설정 정보에 따라 정의 된 각각의 중간 process_response 방법에 대해 수행된다.
2. 방법은 두 개의 매개 변수가 있어야합니다 및 응답 매개 변수를 반환해야합니다, 오류가 직접 반환하지 않습니다
3. 방법 반환 아무것도 (httpResponsed 개체), 프론트 엔드는 어떤을 얻을 수있을 것이다
httpResponsed 객체, 그것은 내부 process_response 현재 미들웨어에서 다시 직접 이동합니다 process_request 메소드가 리턴, 더 이상 수행 할 미들웨어 실행되지 있지 않은 경우
당신은 알고 있어야합니다 :
process_view
process_view(self,request,view_name,*args,**kwargs)
트리거 성공적으로 매칭 라우팅 후에보기 기능 1. 실행 전에
HttpResponse에 물체가 각 브로커 방법 process_response 내를 아래에서 위로 될 메소드 리턴하는 경우
process_template_response
1. 객체가이 트리거 방법을 렌더링하는 속성 포인트를 렌더링 포함 반환, 상향식 (bottom-up) 순서
process_exception
에러가 자동으로 함수의 관점에서 발생 순서를 트리거 1. 하단에서 상단 인
다섯 가지 방법보다도, 자동 (매개 변수가 응답을 포함하는 경우, 그것은 반환해야합니다) 특정 단계를 트리거
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,redirect,render
class MyMdd1(MiddlewareMixin):
def process_request(self,request):
print('我是第一个中间件里面的process_request方法')
# return HttpResponse('我是中间件一里面的')
def process_response(self,request,response):
print('我是第一个中间件里面的process_response方法')
return response
# return HttpResponse('我是中间件一里面的')
def process_view(self,request,view_name,*args,**kwargs):
# print(view_name)
# print(args)
# print(kwargs)
print('我是第一个中间件里面的process_view方法')
# return HttpResponse('我是中间件一里面的process_view')
def process_exception(self,request,exception):
print('我是第一个中间件里面的process_exception方法')
print(exception)
def process_template_response(self,request,response):
print('我是第一个中间件里面的奇葩方法')
return response
class MyMdd2(MiddlewareMixin):
def process_request(self,request):
print('我是第二个中间件里面的process_request方法')
# return HttpResponse('我是中间件二里面的')
def process_response(self,request,response):
print('我是第二个中间件里面的process_response方法')
return response
# return HttpResponse('我是中间件二里面的')
def process_view(self,request,view_name,*args,**kwargs):
# print(view_name)
# print(args)
# print(kwargs)
print('我是第二个中间件里面的process_view方法')
# return HttpResponse('我是中间件二里面的process_view')
def process_exception(self,request,exception):
print('我是第二个中间件里面的process_exception方法')
print(exception)
def process_template_response(self,request,response):
print('我是第二个中间件里面的奇葩方法')
return response