day58 쿠키 세션 미들웨어

쿠키 및 세션 도입 및 운영

왜 이러한 기술이
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

어떻게 권한 관리 미들웨어를 할

추천

출처www.cnblogs.com/zqfzqf/p/11986379.html