Browse Source

Inicia implementação do login simples

pull/328/head^2
Marcio Mazza 9 years ago
parent
commit
e318a2c02b
  1. 74
      base/tests/test_login.py
  2. 8
      base/tests/teststub_urls.py
  3. 5
      base/urls.py
  4. 42
      base/views.py
  5. 13
      templates/base.html

74
base/tests/test_login.py

@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
import pytest
from django.contrib.auth.models import User
from django.test.html import parse_html as html
pytestmark = pytest.mark.django_db
@pytest.fixture
def user():
return User.objects.create_user('jfirmino', password='123')
def test_login_aparece_na_barra_para_usuario_nao_logado(client):
response = client.get('/')
assert '<a href="/login/?next=/">Login</a>' in response.content
def test_username_do_usuario_logado_aparece_na_barra(client, user):
assert client.login(username='jfirmino', password='123')
response = client.get('/')
assert html('<a href="/login/?next=/">Login</a>') not in html(response.content)
assert 'jfirmino' in response.content
assert html('<a href="/logout/?next=/">Sair</a>') in html(response.content)
def test_nome_completo_do_usuario_logado_aparece_na_barra(client, user):
# nome completo para o usuario
user.first_name = 'Joao'
user.last_name = 'Firmino'
user.save()
assert client.login(username='jfirmino', password='123')
response = client.get('/')
assert html('<a href="/login/?next=/">Login</a>') not in html(response.content)
assert 'Joao Firmino' in response.content
assert html('<a href="/logout/?next=/">Sair</a>') in html(response.content)
@pytest.mark.parametrize("link_login,destino", [
# login a partir de uma pagina retorna para ela mesma
('/login/?next=/zzzz', 'http://testserver/zzzz'),
('/login/?next=/', 'http://testserver/'),
# login a partir da propria pagina de login redireciona para home
('/login/?next=/login/', 'http://testserver/'),
# link sem destino de retorno (next) redireciona para home
('/login/', 'http://testserver/'),
])
def test_login(app, user, link_login, destino):
pagina_login = app.get(link_login)
form = pagina_login.forms['login-form']
form['username'] = 'jfirmino'
form['password'] = '123'
res = form.submit()
assert user.pk == app.session['_auth_user_id']
assert res.url == destino
@pytest.mark.urls('home.teststub_urls')
@pytest.mark.parametrize("link_logout,destino", [
# logout a partir de uma pagina retorna para ela mesma
('/logout/?next=/zzzz', 'http://testserver/zzzz'),
('/logout/?next=/', 'http://testserver/'),
# logout a partir da propria pagina de logout redireciona para home
('/logout/?next=/logout/', 'http://testserver/'),
# link sem destino de retorno (next) redireciona para home
('/logout/', 'http://testserver/'),
])
def test_logout(client, user, link_logout, destino):
# com um usuário logado ...
assert client.login(username='jfirmino', password='123')
assert user.pk == client.session['_auth_user_id']
# ... acionamos o link de logout
res = client.get(link_logout, follow=True)
destino_real = res.redirect_chain[-1][0]
assert '_auth_user_id' not in client.session
assert destino_real == destino

8
base/tests/teststub_urls.py

@ -0,0 +1,8 @@
from django.conf.urls import patterns, url
from sapl.urls import urlpatterns as original_patterns
urlpatterns = original_patterns + patterns('',
url(r'^zzzz$', 'home.views.index', name='zzzz'),
)

5
base/urls.py

@ -3,7 +3,7 @@ from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.views.generic.base import TemplateView
from .apps import AppConfig
from .views import CasaLegislativaTableAuxView, HelpView
from .views import CasaLegislativaTableAuxView, HelpView, login, logout
app_name = AppConfig.name
@ -14,6 +14,9 @@ urlpatterns = [
name='help_base'),
url(r'^casa-legislativa$',
CasaLegislativaTableAuxView.as_view(), name='casa_legislativa'),
url(r'^login/$', login, name='login'),
url(r'^logout/$', logout, name='logout'),
]
# Fix a static asset finding error on Django 1.9 + gunicorn:

42
base/views.py

@ -1,11 +1,17 @@
import os
from functools import lru_cache
import django.contrib.auth.views
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Hidden, Submit
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views.generic import FormView
from django.views.generic.base import TemplateView
from .areas import areas_em_pares
from .forms import CasaLegislativaTabelaAuxForm
from .models import CasaLegislativa
@ -42,7 +48,7 @@ class CasaLegislativaTableAuxView(FormView):
casa = CasaLegislativa.objects.first()
if casa:
if ("remover" in request.POST or
(form.cleaned_data['logotipo'] and casa.logotipo)):
(form.cleaned_data['logotipo'] and casa.logotipo)):
try:
os.unlink(casa.logotipo.path)
except OSError:
@ -65,3 +71,37 @@ class CasaLegislativaTableAuxView(FormView):
def get_success_url(self):
return reverse('base:casa_legislativa')
def index(request):
"""Página Inicial"""
return render(request, 'home.html', {'areas': areas_em_pares})
def login(request):
"""Página de Login"""
helper = FormHelper()
helper.form_id = 'login-form'
helper.form_class = 'form-horizontal'
helper.label_class = 'col-lg-1'
helper.field_class = 'col-lg-3'
helper.form_method = 'post'
login_path = reverse('base:login')
helper.form_action = login_path
next_path = request.REQUEST.get('next', '/')
if next_path == login_path:
next_path = '/'
helper.add_input(Hidden('next', next_path))
helper.add_input(Submit('submit', 'Submit'))
return django.contrib.auth.views.login(request,
extra_context={'helper': helper})
def logout(request):
django.contrib.auth.views.logout(request)
return HttpResponseRedirect(request.GET.get('next', '/'))

13
templates/base.html

@ -102,6 +102,19 @@
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Login</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
João da Silva
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="#">Sair</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>

Loading…
Cancel
Save