Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Reverse for 'django.contrib.auth.views.login' not found

Olá, estou recebendo esse recebendo o erro NoReverseMatch at /login/ após ter terminado de codificar meu projeto. O DEBUG do django me dá a seguinte mensagem quando tento abrir a páginas inicial:

NoReverseMatch at /login/
Reverse for 'django.contrib.auth.views.login' not found. 'django.contrib.auth.views.login' is not a valid view function or pattern name.
Request Method:    GET
Request URL:    http://localhost:8000/login/?next=/
Django Version:    2.0.1
Exception Type:    NoReverseMatch
Exception Value:    
Reverse for 'django.contrib.auth.views.login' not found. 'django.contrib.auth.views.login' is not a valid view function or pattern name.
Exception Location:    C:\Users\huugo\AppData\Local\Programs\Python\Python36\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 632
Python Executable:    C:\Users\huugo\AppData\Local\Programs\Python\Python36\python.exe
Python Version:    3.6.4
Python Path:    
['C:\\C++\\Django\\connectedin',
 'C:\\Users\\huugo\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
 'C:\\Users\\huugo\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
 'C:\\Users\\huugo\\AppData\\Local\\Programs\\Python\\Python36\\lib',
 'C:\\Users\\huugo\\AppData\\Local\\Programs\\Python\\Python36',
 'C:\\Users\\huugo\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
Server time:    Fri, 26 Jan 2018 22:22:10 +0000

Pelo que eu compreendi, o django não está interpretando as funções login e logout_then_login como funções de view válidas. Só não sei o porquê kkk minha #connectedin.usuarios.urls# está assim:

from django.urls import re_path
from usuarios.views import RegistrarUsuarioView
from django.contrib.auth import views

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

Observação: Estou usando python 3 com o Django 2.0. Porém, mesmo sendo uma versão diferente, se eu for no diretorio em que ele está instalado no meu computador, irei a mesma rota 'django.contrib.auth.views' onde está definida a função:

def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm,
          extra_context=None, redirect_authenticated_user=False):
    warnings.warn(
        'The login() view is superseded by the class-based LoginView().',
        RemovedInDjango21Warning, stacklevel=2
    )
    return LoginView.as_view(
        template_name=template_name,
        redirect_field_name=redirect_field_name,
        form_class=authentication_form,
        extra_context=extra_context,
        redirect_authenticated_user=redirect_authenticated_user,
    )(request)

então não estou entendo pq ele não está reconhecendo a função. Como consertar isso?

3 respostas

Fala ai Hugo, tudo bem ?

Cara vi que está a alguns dias com essa dúvida aberta, conseguiu soluciona-la ?

Acho que aqui na plataforma a galera ainda não passou por isso.

Cara, ainda não resolvi não. Como foi uma dúvida na última aula, eu acabei tendo que compreender só conceitualmente mesmo. Pq minha página de login não ta carregando, como expliquei anteriormente

solução!

E ai Hugo blz ? Não sei se você já conseguiu resolver, mas essa solução aqui funcionou pra mim:

#connectedin/usuarios/urls.py
from django.conf.urls import url
from django.contrib.auth.views import login, logout_then_login
from usuarios.views import RegistrarUsuarioView

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

E no form do login alterar 'django.contrib.auth.views.login' para 'login'

<!-- connectedin/usuarios/templates/login.html -->
<form class="form-signin" role="form" action="{% url 'login' %}" method="post">