autenticação com django
Publicado em 11/10/2021 as 18:05 por Raifran

Autenticando aplicações web com Python e Django

1.0 - Iremos definir o que vai precisar de autenticação e a maneira viável de se criar, se é via cadastro na aplicação ou outras bibliotecas como login via rede social e etc.

1.1 - Nesse modelo vamos criar uma autenticação via aplicação.

2.0 - Criar a app chamada account, dentro da app vamos criar alguns arquivos e pastas para a configurarmos nossa app

2.1 - Vamos criar um arquivo chamado forms.py e vamos colocar nele o seguinte conteúdo:

from django.contrib.auth.models import User
from django import forms

class UserForm(forms.ModelForm):
   class Meta:
       model = User
       fields = ('last_name', 'email', 'username', 'password')

Esse forms vai conter 4 campos que vão servir para o cadastro, vejam que é simples, eu peço o nome da pessoa, email, o username, e a senha.

 

      2.2 - Vamos ir no arquivo de views.py e configurarmos as funções necessárias para a aplicação, vai ser elas:


      2.2.1 - Importações:

from django.contrib.auth import logout, update_session_auth_hash, login, authenticate
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from .forms import UserForm

      2.2.2 - Criar usuário:

# adicionar usuário
def add_user(request):
   if request.method == 'POST':
       form = UserForm(request.POST)
       if form.is_valid():
           u = form.save()
           u.set_password(u.password)
           u.save()
           return redirect('tela_inicial')
       else:
           messages = form.errors
   else:
       form = UserForm()
   return render(request, 'account/register.html', locals())

         2.2.3 - Login:

# login
def user_login(request):
   if request.method == 'POST':
       username = request.POST.get('username')
       password = request.POST.get('password')
       user = authenticate(username=username, password=password)
       if user:
           login(request, user)
           return redirect('tela_inicial')
       else:
           messages = ['Username ou senha incorretos, por favor tente novamente']
   return render(request, 'account/login.html', locals())

       2.2.4 - Alterar senha:

# alterar senha
@login_required
def change_password(request):
   if request.method == 'POST':
       form = PasswordChangeForm(request.user, request.POST)
       if form.is_valid():
           user = form.save()
           update_session_auth_hash(request, user)
           return redirect('tela_inicial')
       else:
           messages = form.errors
   else:
       form = PasswordChangeForm(request.user)
   return render(request, 'account/change_password.html', locals())

         2.2.5 - Ver a conta de usuário ** :

# minha conta
def account(request):
   user = User.objects.get(id=request.user.id)
   return render(request, 'account/account.html', locals())

         2.2.6 - Logout:

# logout
def user_logout(request):
   logout(request)
   return redirect('tela_inicial')

    2.3 - Vamos criar agora um arquivo chamado urls.py e colocar o seguinte conteúdo para utilizarmos as funções criadas nas views.py: 

from django.urls import path
from .views import user_login, user_logout, account, add_user, change_password

urlpatterns = [
   path('login/', user_login, name='login'),
   path('logout/', user_logout, name='user_logout'),
   path('meus-dados/', account, name='account'),
   path('novo-usuario/', add_user, name='add_user'),
   path('alterar-senha/', change_password, name='change_password'),
]

    2.4 - Para finalizarmos temos que criar os templates, podemos utilizar esse template que esta pré configurado nesse link templates.zip .

 

3.0 - Pronto agora com a app totalmente configurada podemos implementar aonde quisermos no projeto a autenticação. Vamos setar no settings.py essa configuração:

LOGIN_URL = '/account/login/'

        3.1 - Configurando isso no settings.py você pode agora escolher as funções das views que quer implementar para o usuário só conseguir utilizar caso esteja logado com a conta dele. Podemos usar os decorators para isso, vamos até a view que queremos e vamos importar essa linha:

from django.contrib.auth.decorators import login_required

Depois de importarmos iremos escolher a função ou classe e iremos implementar na primeira linha em cima antes de criar a função essa linha:

@login_required

Assim na hora que o usuário for acessar o django vai verificar se ele está logado, caso não esteja ele vai redirecionar para a página de login que configuramos no settings.py.

Pronto nossa aplicação já tem o sistema de autenticação de forma simples, podendo ser implementada melhorias futuramente a partir disso.