Search
Close this search box.
Autenticação de usuários com Django
autenticação de usuários Django

Posts Relacionados:

Sistemas de autenticação de usuários são essenciais na maioria das aplicações web. Neste post, configuraremos o sistema de autenticação padrão do Django.

Receba nossa newsletter

Autenticação de Usuários com Django

Neste post, exploraremos como configurar um sistema de autenticação de usuários no Django. Ele consistirá em login, logout e inscrição.

A autenticação de usuários no backend é o processo de verificação da identidade dos usuários antes de conceder a eles o acesso aos recursos de uma aplicação web. Ou seja, ele é o mecanismo de bastidores que garante que apenas usuários autorizados possam interagir com seu sistema.

Como o Django é um framework bastante completo para o desenvolvimento de aplicações web com Python, ele conta com um sistema padrão de autenticação de usuários. Voce pode saber mais sobre o Django aqui, aqui e aqui. Portanto, usaremos o sistema de autenticação padrão do Django. O post assume que você já possui alguma familiaridade com Django.

Setup Inicial

Os primeiros passos são básicos e envolvem criar um diretório dedicado para o projeto, ativar um ambiente virtual, instalar o Django e criar um projeto Django. O projeto pode ser chamado config:

				
					django-admin startproject config
				
			

A estrutura do projeto criado é complexa e contém os seguintes arquivos:

django estrutura projeto

Em seguida, fazemos a migração e iniciamos um servidor local para verificar que tudo correu bem com a instalação inicial. Na pasta do projeto, onde está o arquivo manage.py, digite o seguinte comando no terminal:

				
					python manage.py migrate
python manage.py runserver
				
			

Se tudo correu bem com sua instalação, você deverá ver a página inicial de saudações do Django no endereço http://127.0.0.1:8000/.

Autenticação de usuários com Django

Autenticação Padrão do Django

O módulo contrib do Django fornece aplicativos integrados para auxiliar no desenvolvimento de aplicações web. Entre esses aplicativos está uma autenticação de usuários praticamente pronta para uso. Sua presença pode ser verificada no arquivo settings.py na pasta interna do projeto em INSTALLED_APPS.

Para usar esse aplicativo de autenticação, precisamos adicioná-lo ao arquivo urls.py no nível do projeto. No início do código, é preciso importar o método include. Depois, adicionamos um novo caminho de URL chamado accounts/ que insere o aplicativo de autenticação para uso no nosso projeto. O nome accounts é o padrão. Portanto, modifique o arquivo urls.py conforme mostrado abaixo:

				
					from django.contrib import admin
from django.urls import path, include # modifique aqui

urlpatterns = [
    path("admin/", admin.site.urls),
    path("accounts/", include("django.contrib.auth.urls")), # adicione isso
]

				
			

O aplicativo de autenticação de usuários padrão do Django já possui várias visualizações (views) de autenticação e URLs para lidar com login, logout, alteração de senha, redefinição de senha, etc. Veja a lista completa abaixo.

				
					accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']
				
			
Todas essas funcionalidades estão praticamente prontas para uso. Para esse post, usaremos apenas login e logout e adicionaremos uma visualização para inscrição que não esta inclusa na lista acima.
 

Login com Django

O aplicativo de autenticação de usuários do Django busca a página HTML de login em uma pasta de templates chamada registration. A visualização do login requer um arquivo chamado login.html. Portanto, no nível do projeto, crie um novo diretório chamado templates e, dentro dele, outro diretório chamada registration. Nesse diretório, crie o arquivo login.html. Veja a estrutura completa do projeto abaixo:
django login
Em seguida, atualize o arquivo settings.py para dizer ao Django para procurar uma pasta templates no nível do projeto. Atualize a configuração DIRS dentro de TEMPLATES em settings.py com a seguinte alteração:
				
					
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"], # modifique essa parte
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
            ...
				
			
No arquivo login.html, copie o seguinte código:
				
					<h2>Login</h2>
<form method="post">
  {% csrf_token %} {{ form.as_p }}
  <button type="submit">Login</button>
</form>
<p>Não possui uma conta? <a href="#">Registrar</a></p>
				
			

Este código é um formulário padrão do Django usando POST para enviar dados. A tag {% csrf_token %} precisa ser inserida por questões de segurança. O conteúdo do formulário é exibido com a tag {{ form.as_p }}. No final do código, o link está pronto para a página de inscrição ser inserida depois.

Para verificar a página de login, é preciso reiniciar o servidor local do Django e visitar o endereço: http://127.0.0.1:8000/accounts/login/. Nosso login está lá (imagem abaixo), porém ainda não temos uma conta de usuário para podermos logar. Para contornar esse problema, podemos criar a página de inscrição.

página login

Redirecionamento e Página Home

Antes de criar a inscrição, faremos dois pequenos acréscimos ao nosso app. Primeiro, especificaremos para onde redirecionar o usuário após um login bem-sucedido. Isso é feito usando a configuração LOGIN_REDIRECT_URL no arquivo settings.py. Na parte inferior desse arquivo, adicione o seguinte comando para redirecionar o usuário para a página inicial do projeto (Home).
				
					
LOGIN_REDIRECT_URL = "/"  # adicione isso
				
			
Em seguida, precisamos criar essa página. Dentro da pasta templates, crie um arquivo chamado home.html e adicione o código:
				
					<h1>Home</h1>
{% if user.is_authenticated %} 
Oi {{ user.username }}! 
{% else %}
<p>Você não está logado</p>
<a href="{% url 'login' %}">Log In</a>
{% endif %}
				
			

Ele verifica se o usuário está logado e, em caso positivo, realiza uma saudação. Em caso negativo, a página de login é indicada.

No arquivo urls.py, adicione os seguintes trechos:

				
					from django.contrib import admin
from django.urls import path, include 
from django.views.generic.base import TemplateView # insira isso

urlpatterns = [
    path("admin/", admin.site.urls),
    path("accounts/", include("django.contrib.auth.urls")),
    path("", TemplateView.as_view(template_name="home.html"), name="home"), # insira isso
]
				
			

Isso irá permitir que nossa aplicação exiba a página home, quando ela for solicitada (http://127.0.0.1:8000/). Evidentemente, não estamos adicionando nenhuma formatação de estilo ou personalização. Veja a documentação oficial do Django para obter informações sobre essas etapas.

Inscrição com Django

A aplicação de autenticação padrão do Django não inclui uma visualização e URL para inscrição. Ela precisa ser definida manualmente. Primeiro, precisamos criar um app. Ele pode se chamar accounts.
				
					python manage.py startapp accounts
				
			
Após sua criação, ele precisa ser adicionado no arquivo settings.py em INSTALLED_APPS.
				
					
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "accounts", # insira isso
]
				
			

Em seguida, adicione um caminho de URL no arquivo urls.py do projeto. Ele precisa estar acima do nosso aplicativo de autenticação padrão do Django para garantir que a página de inscrição seja carregada primeiro.

				
					from django.contrib import admin
from django.urls import path, include 
from django.views.generic.base import TemplateView 

urlpatterns = [
    path("accounts/", include("accounts.urls")),  # insira isso
    path("admin/", admin.site.urls),
    path("accounts/", include("django.contrib.auth.urls")),
    path("", TemplateView.as_view(template_name="home.html"), name="home"), 
]
				
			

Depois, crie um arquivo urls.py na pasta do app accounts. Insira esse código nele:

				
					from django.urls import path
from .views import SignUp

urlpatterns = [
    path("signup/", SignUp.as_view(), name="signup"),
]
				
			

No arquivo views.py na pasta do app accounts, definimos uma visualização para a página de inscrição:

				
					from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views.generic import CreateView

class SignUp(CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy("login")
    template_name = "registration/signup.html"
				
			

No diretório registration dentro do diretório templates, criamos o arquivo signup.html e adicionamos o seguinte código:

				
					
<h2>Inscrição</h2>
<form method="post">
  {% csrf_token %} 
  {{ form.as_p }}
  <button type="submit">Inscrever</button>
</form>
				
			

Com isso, a inscrição está pronta e já podemos nos cadastrar visitando a página http://127.0.0.1:8000/accounts/signup/.

Logout

Por fim, precisamos fazer o logout. Mas antes, no arquivo login.html, adicione a página de inscrição como mostrado abaixo (linha 7).

				
					<h2>Login</h2>
<form method="post">
  {% csrf_token %} 
  {{ form.as_p }}
  <button type="submit">Login</button>
</form>
<p>Não possui uma conta? <a href="{% url 'signup' %}">Registrar</a></p>
				
			

O logout faz parte do app de autenticação de usuários padrão do Django. Para habilitá-lo, basta adicionar no arquivo home.html um formulário como mostrado abaixo (linhas 4-6). Ele adiciona um botão de logout.

				
					<h1>Home</h1>
{% if user.is_authenticated %} 
Oi {{ user.username }}!
<form action="{% url 'logout' %}" method="post">
  {% csrf_token %}
  <button type="submit">Log Out</button>
</form>
{% else %}
<p>Você não está logado</p>
<a href="{% url 'login' %}">Log In</a>
{% endif %}
				
			

Em seguida, informamos no arquivo settings.py para redirecionar o logout de volta para a página home como mostrado abaixo (adicione no final do arquivo):

				
					LOGOUT_REDIRECT_URL = "/" 
				
			

A estrutura completa do projeto final é mostrada abaixo:

django accounts

Pronto! Com isso, configuramos as funcionalidades de login, inscrição e logout padrões do Django. Existem várias outras funcionalidades prontas para uso, como mudança e redefinição de senha. Mas elas ficam para outras ocasiões…

home Django

Imagem com IA Generativa – Dia 199

IA generativa img 199

Arte com IA generativa: imagem do dia

Todos os dias, postamos um exemplo de imagem artística gerada com inteligência artificial.

Tutoriais

Postagens Mais Recentes

Outras Postagens Que Podem Interessar

Veja
Mais

Fique em contato

Se inscreva para receber nossa newsletter com novidades.

aprendiz artificial