day58 куки сессии промежуточного слоя

куки и сессии внедрение и эксплуатация

Почему эти технологии
1. Цель состоит в том, чтобы сохранить пользователю статус клиента
причинам 2: 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. возвращается в браузер клиента, поэтому браузер сохраняет
SESSIONID: случайная строка

Получение сессии

request.session.get('k1')

1.django внутренним для автоматического получения запроса заголовка куки , которые
случайным образом строка с SESSIONID 2. django_session , соответствующий одиннадцати выравнивающего стола
3. Отношение соответствующей случайной строки будет из сбора данных автоматически на request.session КПК программист называет. Если это не пустой словарь по сравнению

Удаление сессии

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. Глобального логина пользователя проверка
2 глобальной проверки частоты доступа пользователя
3. глобальных прав пользователя проверить
Джанго промежуточного программного обеспечения так что структура там сделать самый совершенный

Целевая строка символов «» «» отражает
глобальные «» «» «» «» промежуточное программное обеспечение

семь по умолчанию Джанго промежуточного слоя, промежуточный слой и поддерживает определенный пользователь, а затем подвергаются воздействие пять пользователя может настроить метод

Вы должны знать:

process_request

1. Когда запрос будет сверху вниз, последовательно выполняются для каждого промежуточного внутреннего метода process_request определяется в соответствии с параметрами профиля, если метод не находится внутри промежуточного программного обеспечения , промежуточного программного обеспечения выполнения следующего пропуска
2. Способ После того , как объект возврата HttpResponse, то запрос будет немедленно остановка рядом идти, немедленно отрекаться

process_response

1. Время реакции будет идти снизу вверх для того, последовательно выполняются для каждого промежуточного метода process_response , определенного в соответствии с внутренними профилями настроек.
2. Метод должен иметь два параметра, и должен вернуть параметр ответа, ошибка не возвращается непосредственно
3. Метод возвращает ничего (httpResponsed объект), передний конец будет в состоянии получить любой

Когда httpResponsed process_request метод возвращает объект, он будет идти непосредственно назад внутри process_response текущего промежуточного программного обеспечения, промежуточного программного обеспечения не исполняется больше не будет выполнять

Вы должны знать:

process_view

process_view(self,request,view_name,*args,**kwargs)

Триггер перед выполнением функции представления 1. После того, как успешно сравнен маршрутизации
2. Если метод возвращает объект HttpResponse, будет снизу вверх через внутреннюю часть каждого метода брокера process_response

process_template_response

1. При возврате объекта содержит рендер очки атрибутов для визуализации метод сработает, снизу вверх заказ

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
рекомендация