Resumo : neste tutorial, você aprenderá como funcionam as sessões do Django e como definir várias configurações para a sessão.
Introdução às sessões do Django
Django possui uma estrutura de sessão que suporta sessões anônimas e de usuário. Django usa o middleware de sessão para enviar e receber cookies.
A imagem a seguir ilustra como funcionam as sessões do Django:
Quando um navegador da web faz a primeira solicitação HTTP ao servidor da web, o middleware de sessão inicia uma nova sessão. O middleware de sessão gera um número grande e aleatório que é chamado de identificador de sessão e o envia de volta ao navegador como um cookie.
Para as solicitações subsequentes, o middleware de sessão combina o valor sessionid
do cookie enviado pelo navegador da web com o identificador de sessão armazenado no servidor da web e associa os dados da sessão ao objeto de solicitação HTTP.
Para usar sessões, você precisa garantir que as MIDDLEWARE
configurações do seu projeto ( settings.py
) contenham o middleware da sessão assim:
MIDDLEWARE = [
# other middleware
'django.contrib.sessions.middleware.SessionMiddleware',
# ...
]
Linguagem de código: Python ( python )
O middleware de sessão é adicionado por MIDDLEWARE
padrão quando você cria um novo projeto usando o startproject
comando.
O middleware de sessão habilita sessões através da session
propriedade do objeto request ( HttpRequest
):
request.session
Linguagem de código: Python ( python )
O request.session
é um dicionário que permite armazenar e recuperar dados da sessão. Aceita request.session
qualquer objeto que possa ser serializado para JSON por padrão.
Ao contrário de outros objetos, request.session
persiste de uma solicitação HTTP para a próxima solicitação.
Para definir uma variável na sessão, você pode usar o request.session
seguinte:
request.session['visit'] = 1
Linguagem de código: Python ( python )
Esta instrução define a variável visit como 1.
Para recuperar uma chave de sessão, você usa o get()
método do request.session
objeto:
request.session.get('visit')
Linguagem de código: Python ( python )
Para excluir uma chave na sessão, você usa a del
instrução:
del request.session['visit']
Linguagem de código: Python ( python )
Configurando sessões do Django
Por padrão, o Django armazena dados de sessão em um banco de dados usando o Session
modelo da django.contrib.sessions
aplicação. No entanto, você pode escolher outros mecanismos de sessão usando o SESSION_ENGINE
.
Django fornece as seguintes opções para armazenar dados de sessão:
Opções | Descrição |
---|---|
Sessões de banco de dados | Armazene os dados da sessão no django_session do banco de dados. Este é o mecanismo padrão. |
Sessões baseadas em arquivo | Armazene dados da sessão no sistema de arquivos. |
Sessões em cache | Armazene dados de sessão em um back-end de cache. Para definir o back-end do cache, você usa a CACHES configuração. |
Sessões de banco de dados em cache | Armazene dados de sessão em um cache e banco de dados write-through. Se os dados não estiverem no cache, o Django irá ler os dados da sessão do banco de dados. |
Sessões baseadas em cookies | Armazene dados de sessão nos cookies que são enviados ao navegador da web. |
Observe que um mecanismo de sessão baseado em cache oferece melhor desempenho em comparação com outros mecanismos de sessão.
Django suporta Memcached pronto para uso. Além disso, você pode encontrar um pacote de terceiros para gerenciar back-ends de cache para Redis e outros sistemas de cache.
Além do SESSION_ENGINE
Django, você pode personalizar sessões com configurações específicas. A tabela a seguir lista os mais importantes:
Configurações de sessão | Descrição |
---|---|
SESSION_COOKIE_AGE | A duração dos cookies de sessão na sessão. O padrão é duas semanas (1.209.600 segundos) |
SESSION_COOKIE_DOMAIN | Defina o domínio para cookies de sessão. |
SESSION_COOKIE_HTTPONLY | Defina como True para evitar que o JavaScript acesse o cookie da sessão. O padrão é True, o que aumenta a segurança contra sequestro de sessão do usuário. |
SESSION_COOKIE_SECURE | Defina como True para indicar que o cookie só deve ser enviado se a conexão for HTTPS. O padrão é Falso. |
SESSION_EXPIRE_AT_BROWSER_CLOSE | Defina como True para expirar a sessão ao fechar o navegador. Seu valor padrão é Falso. Se você definir como True, SESSION_COOKIE_AGE não terá nenhum efeito. |
SESSION_SAVE_EVERY_REQUEST | Defina como True para salvar a sessão e atualizar a expiração da sessão no banco de dados em cada solicitação. O padrão é Falso. |
Exemplo de sessões Django
Primeiro, adicione um URL ao urlpatterns
arquivo urls.py
:
urlpatterns = [
path('visit/', views.count_visit, name='visit')
]
Linguagem de código: Python ( python )
Quando você navega para http://localhost:8000/visit
, a count_visit
função em views.py será executada.
Segundo, defina a count_visit()
função no views.py
arquivo:
def count_visit(request):
visit = request.session.get('visit',0) + 1
request.session['visit'] = visit
return HttpResponse(f"Visit count:{request.session['visit']}")
Linguagem de código: Python ( python )
A count_visit()
função usa request.session
para aumentar a visit
variável cada vez que você visita o http://localhost:8000/visit
URL. Também exibe o valor atual da visit
variável na página web:
Se você visualizar os cookies no navegador da web, verá um cookie com o nome sessionid:
O valor do sessionid corresponde ao session_key na tabela django_session:
Os dados da sessão são uma string codificada em base64. Para analisá-lo, você usa o seguinte código:
from base64 import b64decode
data = base64decode('eyJ2aXNpdCI6MTF9:1ov84c:qngX5Woil1EDwGGylot0OrQtche6734UOApKJ4yp-BA')
print(data)
Linguagem de código: Python ( python )
Saída:
b'{"visit":11}\xd6\x8b\xfc\xe1\xca\xa7\x81~V\xa2)u\x10<\x06\x1b)h\xb7C\xabB\xd7!{\xae\xf7\xe1C\x80\xa4\xa2x\xca\x90@'
Linguagem de código: texto simples ( texto simples )
Resumo
- Uma sessão é uma variável que reside nas solicitações.
- Django usa middleware de sessão para gerenciar sessões.
- Use
request.session
para gerenciar dados da sessão.