Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Login - Django 1.10

Boa tarde, primeiramente gostaria de saber quando haverá uma nova versão do curso de Django? em segundo lugar, como isso ficaria no Djanho 1.10

urlpatterns = patterns('',
    url(r'^registrar/$', RegistrarUsuarioView.as_view(), name="registrar"),
    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name':'login.html'}, name='login'),
   url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', {'login_url':'/login/'}, name='logout')
)

Uma vez que o pattern é diferente e eu não consigo utilizar o 'template_name', atualmente o que eu tenho é algo parecido com isso:

from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth.views import login, logout_then_login
from views import RegistrarUsuarioView, login

urlpatterns = [
    url(r'^login/?$', login, name="login"),
    url(r'^logout/?$', logout_then_login, name="logout"),
    url(r'^registrar/?$', RegistrarUsuarioView.as_view(), name="registrar"),
]

Como podem ver, é um pouco diferente (devido as versões) da forma explicada no vídeo. Mas eu quero que depois de autenticado caia em uma outra página, como deve ser a view com @login_required? Atualmente a minha está assim:

# Create your views here.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect

@login_required
def modulos(request):
    return render(request, 'modulos.html')

Mas não funciona, apenas redireciona para uma página de /login/?next=/modulos

Se alguém puder me ajudar, agradeço.

1 resposta
solução!

Você não consegue usar o template_name porque login é uma function based view. É preciso usar uma class based view para configurar o template_name, como no código abaixo:

from django.conf.urls import url
from django.contrib.auth.views import LoginView
from django.contrib.auth.views import logout_then_login

from usuarios.views import RegistrarUsuarioView

urlpatterns = [
    url(r'^registrar/$',RegistrarUsuarioView.as_view(), name="registrar"),
    url(r'^login/$', LoginView.as_view(template_name='login.html'), name="login"),
    url(r'^logout/$',logout_then_login,{'login_url': '/login/'}, name="logout")

Adicionalmente, precisei fazer as seguintes configurações necessárias no Django 1.11:

Em settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Em usuarios/login.html:

<form class="form-signin" role="form" action="{% url 'login' %}" method="post">

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software