Estoy tratando de obtener los datos de los usuarios usando un formulario que tengo en un archivo .html
llamado login.html
. El código para eso es:
<form class="register-form" method="POST" action="{% url 'login' %}"> {% csrf_token %} <table> <tr> <td>Username: </td> <td><input type="username" name="username"><br></td> </tr> <tr> <td>Password: </td> <td><input type="password" name="password"><br></td> </tr> </table> <br> <input type="submit" value="Login" /> </form>
Ya tengo una base de datos con un grupo de usuarios donde se almacenan el nombre de usuario y las contraseñas. Quiero crear mi propia página de inicio de sesión que verifique esa base de datos. Lo que estoy tratando de hacer es esencialmente llevar al usuario a la página login.html
y luego dejar que el usuario ingrese los detalles y verifique con la base de datos.
Mi urls.py
se ve así:
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^register$', include('register.urls')), url(r'^login/', include('login.urls')), url(r'^', include('home.urls')), ]
efectivamente va a login.urls
donde urls.py
para eso es:
from django.conf.urls import url, include from django.contrib import admin from login import views urlpatterns = [ url(r'^$', views.LoginPageView.as_view(), name='login'), ]
mi views.py
es:
from django.shortcuts import render from django.views.generic import TemplateView from person.models import Person class LoginPageView(TemplateView): template_name = "login.html" def get(self, request, **kwargs): print(request) return render(request, 'login.html')
El problema es que cuando hago clic en el botón Enviar, quiero verificar con la base de datos, si no tengo éxito, mostrar un error en la página de inicio de sesión; de lo contrario, autenticar correctamente al usuario y llevarlo a la página de inicio.
En lugar de que funcione, obtengo: Method Not Allowed (POST): /login/ [21/Apr/2017 14:31:12] "POST /login/ HTTP/1.1" 405 0
Gracias.
Está enviando datos en la solicitud POST y en View.py está utilizando vistas basadas en clases y en esa clase está utilizando el método de obtención en lugar del método de publicación.
vistas.py
from django.shortcuts import render from django.views.generic import TemplateView from person.models import Person class LoginPageView(TemplateView): template_name = "login.html" def post(self, request, **kwargs): print(request) return render(request, 'login.html')
simplemente reemplace su método get con post.