Sistema de inicio de sesión en Python Django
En este tutorial de Python Django, aprenderemos a crear un sistema de inicio de sesión en Python Django . Y también daremos ejemplos relacionados con esto. Estos son los siguientes temas que vamos a discutir en este tutorial.
En esta sección, aprenderemos qué significa el sistema de inicio de sesión en python Django.
Un sistema de inicio de sesión es una función de seguridad que evita que los usuarios no autorizados accedan a los recursos de un sitio web. Hay tres partes en el sistema de inicio de sesión:
- Registro: Registrarse es el proceso de crear una nueva cuenta. Si desea utilizar un portal o aplicación por primera vez, primero debe registrarse.
- Inicio de sesión: un inicio de sesión es una colección de credenciales que se utiliza para verificar la identidad de un usuario. Indica que el usuario ha sido identificado y autenticado para poder acceder al sitio web. La combinación más común es un nombre de usuario y una contraseña.
- Cerrar sesión: para cerrar sesión en un sitio web, primero debe iniciar sesión. Cuando cierra sesión, le está diciendo al sitio web que desea interrumpir su sesión de inicio de sesión.
CÓMO CREAR UN SISTEMA DE INICIO DE SESIÓN INTEGRADO DE DJANGO
En esta sección, aprenderemos cómo usar la función integrada de Django para desarrollar una página de inicio de sesión del sistema de inicio de sesión. Te guiaré paso a paso usando un ejemplo.
1. Crear proyecto
Si está comenzando un nuevo proyecto, primero cree un nuevo proyecto Django. El comando para crear un nuevo proyecto es el siguiente:
django-admin startproject project_name
Ejemplo: aquí creo un nuevo nombre de proyecto como LoginSystem.
Dominio:
django-admin startproject LoginSystem
Iniciar proyecto
2. Verifique la configuración necesaria
Antes de crear un sistema de inicio de sesión, asegúrese de tener django.contrib.auth en sus APLICACIONES INSTALADAS y que su middleware de autenticación esté configurado correctamente en la configuración de MIDDLEWARE .
Una aplicación que ya viene incluida
3. Hacer Migración
La migración es un medio de aplicar los cambios que hemos realizado en un modelo, en el esquema de la base de datos. Para crear todas las tablas de acuerdo con el esquema definido en el archivo de migración, ejecutamos el siguiente comando.
python manage.py migrate
4. Defina las URL del proyecto
Una dirección web se denomina URL. Cada vez que visita un sitio web, puede ver la URL en la barra de direcciones de su navegador. Cada página web debe tener su propia URL única. Como resultado, su aplicación sabrá qué mostrarle a un usuario que visite esa URL.
Abra el archivo urls.py de su proyecto y especifique las URL particulares.
from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', auth_views.LoginView.as_view(), name="login"),
path('login/',include('home.urls')),
]
Importe el módulo django.contrib.auth.views y agregue URLconf para la página de inicio de sesión y la página de inicio a su archivo urls.py.
Leer la lista de Python agregar Django
5. Plantilla de inicio de sesión
Básicamente, las plantillas de Django se utilizan para generar páginas web HTML dinámicas que son visibles para el usuario final. Una plantilla en Django está escrita en HTML, CSS y Javascript en un archivo .html.
LoginView intentará representar el registro/login.html de forma predeterminada. Cree una carpeta de registro en su carpeta de plantillas y una página login.html dentro de ella.
{% csrf_token %}
{{form.as_p}}
6. Configuración de plantillas
Para configurar el sistema de plantillas, debemos especificar varios elementos en el archivo settings.py. El nombre de nuestro directorio de plantillas es templates. Django Templates busca cada uno de los subdirectorios de APLICACIONES INSTALADAS por defecto para un subdirectorio de plantillas.
Configuración de plantilla
7. Redirigir a la página de inicio
Necesitamos redirigir a la página siguiente, que es la página de inicio, después de un inicio de sesión exitoso. Entonces, primero aprendamos a crear la aplicación.
Comando para crear una aplicación:
python manage.py startapp app_name
Aquí creo una aplicación con el nombre Inicio.
Crear aplicación
Ahora, para incluir la aplicación en su proyecto, agregue el nombre de su aplicación a la lista de APLICACIONES INSTALADAS en settings.py del proyecto.
INSTALLED_APPS = [
'home',
]
A continuación, defina la URL en el archivo urls.py de la aplicación.
from django.urls import path, include
from home import views
urlpatterns = [
path('home/', views.home, name="home"),
]
Después de esto, defina la vista de la aplicación.
from django.shortcuts import render, HttpResponse
# Create your views here.
def home(request):
return render(request, 'home.html')
A continuación, cree un archivo home.html dentro de la carpeta de plantillas de la aplicación Inicio.
PythonGuides Home Search WELCOME TO PYTHON GUIDES
Thanks for landing on this page to know more about PythonGuides.com.
I welcome you to the website and hopefully, you got to learn something in Python. I started this website to share my finding and learnings in Python with you.
To keep things simple, I am trying to write a lot of articles on Python. Feel free to give your valuable comments and also share the articles if you are liking and hoping it will be helpful to someone.
ALSO, SUBSCRIBE TO OUR YOUTUBE CHANNEL FOR FREE PYTHON VIDEO TUTORIALS.
Ahora requerimos una redirección a la página siguiente. El siguiente código se puede agregar a settings.py para configurar la página siguiente:
LOGIN_REDIRECT_URL = next_page
En mi ejemplo, quiero redirigir a la página de inicio después de iniciar sesión correctamente.
LOGIN_REDIRECT_URL = 'home/'
Configuración de inicio de sesión
Si no se especifica una URL de redirección de inicio de sesión, se usará la URL predeterminada de /cuentas/perfil/ , lo que generará un problema con la plantilla no existe .
8. Crear superusuario
Hasta ahora, no hemos creado ningún usuario para esto. Entonces, vamos a crear un usuario. Así que mira, cómo podemos hacer eso.
Para crear un superusuario, ejecute el siguiente comando:
python manage.py createsuperuser
- Luego ingrese el nombre de usuario de su elección, si lo desea. De lo contrario, toma el nombre del sistema predeterminado.
- Luego ingrese la dirección de correo electrónico y presione enter. También puede dejarlo en blanco.
- Luego, frente al campo Contraseña, escriba la contraseña y presione enter. Para mantenerlo seguro, ingrese una contraseña segura.
- Luego ingrese nuevamente la misma contraseña para confirmar.
9. Ejecutar servidor
En esta sección, aprenderemos cómo ejecutar el servidor en Django. Para iniciar el servidor, use el siguiente comando en la terminal.
python manage.py runserver
La salida es la siguiente:
![cómo crear un sistema de inicio de sesión integrado en django cómo crear un sistema de inicio de sesión integrado en django](https://pythonguia.com/wp-content/uploads/2022/10/how-to-create-built-in-login-system-in-django.png)
Ahora, ingrese el nombre de usuario y la contraseña y haga clic en el botón de inicio de sesión. Después de iniciar sesión correctamente, será redirigido a la página de inicio.
Página de inicio
CÓMO CREAR DJANGO PERSONALIZAR EL SISTEMA DE INICIO DE SESIÓN
En esta sección, aprenderemos a crear una página de registro, una página de inicio de sesión y una página de cierre de sesión sin utilizar la función integrada de Django. Te guiaré paso a paso usando un ejemplo.
1. Pasos básicos
Antes de que podamos crear una página de registro, inicio de sesión o cierre de sesión, primero debemos realizar los siguientes procedimientos.
Crear proyecto: en primer lugar, debemos crear un proyecto Django. El comando para crear un proyecto Django es:
django-admin startproject project_name
Entonces, construí un proyecto llamado CustomLogin .
Crear proyecto
Crear aplicación: una vez que hayamos creado el proyecto Django, necesitaremos crear una aplicación Django. El comando para crear una aplicación Django es:
python manage.py startapp app_name
Entonces, construí una aplicación llamada cuentas .
Crear aplicación
Instalar aplicación: después de haber creado la aplicación Django, necesitaremos instalar una aplicación Django. Para hacerlo, vaya al directorio de su proyecto y abra el archivo settings.py. Ahora, en INSTALLED_APPS, escriba el nombre de su aplicación.
Instalar aplicación
Plantillas: necesitará una carpeta de plantillas para almacenar sus archivos HTML. Entonces, en el directorio de su aplicación, cree una carpeta de plantillas. Vaya al archivo settings.py y defina la ruta DIRS en las plantillas.
Definir plantillas
2. Definir archivo de URL
Según Django, todos los recursos deben mapearse usando archivos urls.py.
Archivo de URL del proyecto : por defecto, Django incluye un archivo urls.py en el proyecto. Este archivo tiene una ruta predefinida a la aplicación de administración. Y definimos la ruta del archivo urls.py recién creado en la aplicación.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls'))
]
Archivo de URL de la aplicación: en primer lugar, debemos crear un archivo con el nombre urls.py en el directorio de la aplicación. Ahora, definimos la ruta de las diferentes vistas creadas en el archivo views.py de la aplicación.
from django.urls import path
from . import views
urlpatterns = [
path("register", views.register, name="register"),
path("login_user", views.login_user, name="login_user"),
path("logout_user", views.logout_user, name="logout_user"),
path("home", views.home, name="home")
]
3. REGISTRO
Ahora, aprenderemos a crear vistas de registro. Para esto, tenemos que crear un registro de función en el archivo views.py del directorio de la aplicación.
from django.contrib import messages
from django.shortcuts import render, redirect
def register(request):
if request.method == 'POST':
first_name = request.POST['first_name']
last_name = request.POST['last_name']
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
confirm_password = request.POST['confirm_password']
if password==confirm_password:
if User.objects.filter(username=username).exists():
messages.info(request, 'Username is already taken')
return redirect(register)
elif User.objects.filter(email=email).exists():
messages.info(request, 'Email is already taken')
return redirect(register)
else:
user = User.objects.create_user(username=username, password=password,
email=email, first_name=first_name, last_name=last_name)
user.save()
return redirect('login_user')
else:
messages.info(request, 'Both passwords are not matching')
return redirect(register)
else:
return render(request, 'registeration.html')
- Comenzamos definiendo la función de registro , que hace uso del objeto de solicitud. Django hace un HttpRequest cuando se solicita una página. En este caso, utilizaremos el método HTTP Post para enviar datos a un servidor con el fin de crear o actualizar un recurso.
- Al servidor, enviamos first_name , last_name , username , email , password y confirm_password .
- Luego usamos varios filtros de objetos para verificar si la contraseña es la misma que la contraseña de confirmación si la dirección de correo electrónico ya existe, e imprimimos el mensaje en consecuencia, así como redirigimos la página según la respuesta del filtro.
Ahora, veremos el registration.html :
El archivo registration.html especifica la apariencia de la página web de registro.
{% csrf_token%}
SIGN UPUsernameFirst NameLast NameEmail addressPasswordConfirm PasswordSIGNUP
LOGIN
{% for message in messages %}
{{message}}
{% endfor %}
- Dentro del formulario, usamos la etiqueta de plantilla de Django {%csrf_token%} . Al usar esta etiqueta, podemos evitar ataques CSRF y garantizar la seguridad de las solicitudes de publicación de un usuario al servidor.
- También usamos la etiqueta de plantilla de Django {%for%} para mostrar la notificación del mensaje.
Ahora, ejecute el servidor y vea la página web de registro.
Página de registro
5. INICIO DE SESIÓN
Ahora, aprenderemos a crear vistas login_user. Para ello, tenemos que crear una función login_user en el archivo views.py del directorio de la aplicación.
from django.contrib import messages
from django.shortcuts import render, redirect
from django.contrib.auth.models import User, auth
def login_user(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect('home')
else:
messages.info(request, 'Invalid Username or Password')
return redirect('login_user')
else:
return render(request, 'login.html')
- Para comenzar, crearemos la función login_user, que utiliza el objeto de solicitud POST.
- El nombre de usuario y la contraseña se envían al servidor.
- A continuación, se utiliza la función de autenticación para verificar el nombre de usuario y la contraseña.
- Si el usuario está autenticado, vaya a la página de inicio; de lo contrario, vaya a la página de inicio de sesión e imprima el mensaje Nombre de usuario o contraseña no válidos.
Ahora, veremos el login.html :
El archivo login.html especifica la apariencia de la página web de inicio de sesión.
{% csrf_token%} LOGIN Username Password LOGIN
{% for message in messages %} {{message}} {% endfor %}
- Para mostrar la notificación del mensaje, usamos la etiqueta de plantilla de Django {%for%} .
Lo redirigimos a la página de inicio de sesión después de registrarse con éxito, o puede pasar directamente a la página de inicio de sesión si ya es un usuario.
Página de inicio de sesión
5. CASA
Ahora, aprenderemos a crear vistas de inicio. Para ello, tenemos que crear una función home en el archivo views.py del directorio de la aplicación.
from django.contrib import messages
from django.shortcuts import render, redirect
def home(request):
return render(request, 'home.html')
- Para comenzar, crearemos la función de inicio, con el objeto de solicitud.
- La función de inicio redirige a home.html.
Ahora, veremos el home.html :
El archivo home.html especifica la apariencia de la página web de inicio.
Login System HOME(current) {% if user.is_authenticated %} Hi, {{user.first_name}} LOGOUT {% else %} SIGN UP LOGIN {% endif %} WELCOME TO PYTHON GUIDES
Thanks for landing on this page to know more about PythonGuides.com.
I welcome you to the website and hopefully, you got to learn something in Python. I started this website to share my finding and learnings in Python with you.
To keep things simple, I am trying to write a lot of articles on Python. Feel free to give your valuable comments and also share the articles if you are liking and hoping it will be helpful to someone.
ALSO, SUBSCRIBE TO OUR YOUTUBE CHANNEL FOR FREE PYTHON VIDEO TUTORIALS.
- Aquí usamos la etiqueta de plantilla {%if%} con el atributo is_authenticated para verificar si el usuario está autorizado o no.
- Imprimimos el nombre del usuario en la barra de navegación si el usuario está autenticado. Usamos la etiqueta {{user.first_name}} para esto.
- En la barra de navegación, también agregamos un botón de cierre de sesión.
Echemos un vistazo a la página de inicio, cuando el usuario inicie sesión correctamente.
Página de inicio
6. SALIR
Ahora, aprenderemos a crear vistas logout_user. Para ello, tenemos que crear una función logout_user en el archivo views.py del directorio de la aplicación.
from django.contrib import messages
from django.shortcuts import render, redirect
from django.contrib.auth.models import User, auth
def logout_user(request):
auth.logout(request)
return redirect('home')
- Para comenzar, crearemos la función logout_user, con objeto de solicitud.
- Para cerrar la sesión del usuario, usamos la función logout() de django.contrib.auth.
- La función logout_user redirige a inicio.
Cuando hacemos clic en el botón de cerrar sesión, se llama a la función cerrar sesión(). Y limpió por completo los datos de la sesión para la solicitud actual.
Veamos cómo se ve la página de inicio cuando hacemos clic en el botón de cerrar sesión.
Página de inicio
CÓMO CREAR UN SISTEMA DE INICIO DE SESIÓN DE MODELO MÚLTIPLE DE DJANGO
En esta sección, aprenderemos a usar Django para desarrollar un sistema de inicio de sesión con múltiples modelos. Este sistema de inicio de sesión consta de tres módulos: registro, inicio de sesión y cierre de sesión.
Pasos básicos
Antes de comenzar a aprender cómo desarrollar los tres módulos del sistema de inicio de sesión descrito anteriormente, primero debemos completar algunos procedimientos básicos y necesarios.
CREAR PROYECTO:
En primer lugar, debemos construir un proyecto Django. Y, para hacer un proyecto Django, usa el siguiente comando:
django-admin startproject MultiLogin
- Entonces, aquí construyo un proyecto llamado MultiLogin
CREAR APLICACIÓN:
Tendremos que desarrollar una aplicación Django después de que hayamos terminado con el proyecto Django. Para hacer una aplicación Django, use el siguiente comando:
python manage.py startapp accounts
- Entonces, aquí construyo una aplicación llamada cuentas .
INSTALAR APLICACIÓN:
Tendremos que instalar una aplicación Django después de haberla creado. Para hacerlo, abra el archivo settings.py en el directorio de su proyecto. Ahora escribe el nombre de tu aplicación en APLICACIONES INSTALADAS .
INSTALAR APLICACIÓN
INSTALAR / ACTIVAR PLANTILLAS :
Para almacenar sus archivos HTML, necesitará una carpeta de plantillas. Cree una carpeta de plantillas en el directorio de su aplicación. Defina la ruta DIRS en plantillas en el archivo settings.py .
MODELO
Definir archivo de URL
Después de crear un proyecto y una aplicación, debemos crear un archivo de URL, ya que todos los recursos deben asignarse utilizando estos archivos de acuerdo con Django.
ARCHIVO DE URL DEL PROYECTO:
Django incluye un archivo urls.py en el proyecto ( MultiLogin ) por defecto. Agregue el siguiente código en este archivo.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls'))
]
- En este archivo, la ruta de la aplicación de administración está predefinida.
- Ahora, tenemos que especificar la ubicación del archivo urls.py dentro de la aplicación (cuentas) .
ARCHIVO DE URL DE LA APLICACIÓN:
De forma predeterminada, una aplicación no consta de ningún archivo urls.py. Primero, tenemos que crear un archivo con el nombre urls.py en el directorio de la aplicación (cuentas) .
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register, name="register"),
path('login/', views.login_user, name="login_user"),
path('logout/', views.logout_user, name="logout_user"),
path('home/', views.home, name="home"),
path('student_register/', views.student_register.as_view(), name="student_register"),
path('teacher_register/', views.teacher_register.as_view(), name="teacher_register")
]
- Aquí, definimos la ruta de las diferentes vistas creadas en el archivo views.py de la aplicación.
Crear modelo
Básicamente, una tabla en su base de datos es un modelo de Django. Y, de manera predeterminada, obtuvimos una base de datos SQLite vacía ubicada en la carpeta raíz de su proyecto (MUTILOGIN) cuando construimos el proyecto en Django. Entonces, para hacer una nueva mesa, necesitaremos hacer un nuevo modelo.
Abra el archivo models.py en la carpeta de cuentas. Y por defecto, está vacío, así que agrega el siguiente código:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
first_name = models.CharField(max_length=80)
last_name = models.CharField(max_length=80)
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
phone_number = models.CharField(max_length=10)
class_name = models.CharField(max_length=100)
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
phone_number = models.CharField(max_length=10)
department = models.CharField(max_length=30)
Entonces, aquí creamos tres clases nombradas como Usuario, Estudiante y Profesor. Entonces, analicemos cada clase en detalle:
- Clase de usuario:
- Aquí, creamos un modelo de usuario personalizado y ampliamos su funcionalidad mediante el uso de AbstractUser.
- Entonces, AbstractUser es un modelo que tiene campos completos, similar a una clase abstracta para que pueda heredar fácilmente los campos que necesita en otra clase de modelo también.
- Clase de estudiante:
- Aquí, creamos la clase modelo Student. Y en esta clase definimos una relación uno a uno entre los campos de la clase Usuario que creamos anteriormente.
- Además, creamos un campo de texto «phone_number» y contendrá el número de teléfono del estudiante con una longitud máxima de 10.
- Luego, creamos un campo de texto más «class_name» y contendrá la clase del estudiante.
- Clase de profesor:
- Aquí, creamos la clase modelo Teacher. Y en esta clase definimos nuevamente una relación uno a uno entre los campos de la clase Usuario que creamos anteriormente.
- Además, creamos un campo de texto «phone_number» y contendrá el número de teléfono del maestro con una longitud máxima de 10.
- Luego, creamos un campo de texto más «departamento» y contendrá el departamento en el que está trabajando el maestro.
Modelo de registro
Abra el archivo admin.py en la carpeta de cuentas. Y por defecto, está vacío, así que agrega el siguiente código:
from django.contrib import admin
from .models import User, Student, Teacher
# Register your models here.
admin.site.register(Student)
admin.site.register(Teacher)
- Entonces, aquí registramos los dos modelos creados anteriormente, es decir, el modelo de estudiante y el modelo de maestro con la interfaz de administración.
Crear formulario
Un formulario es una página que contiene múltiples campos o espacios para ingresar datos por usuario. Cree y abra el archivo Forms.py en la carpeta de cuentas. De forma predeterminada, está vacío, así que agregue el siguiente código:
from django.contrib.auth.forms import UserCreationForm
from django.db import transaction
from django import forms
from .models import Student, Teacher, User
class StudentSignUpForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
phone_number = forms.CharField(required=True)
class_name = forms.CharField(required=True)
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic
def data_save(self):
user = super().save(commit=False)
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.is_student = True
user.save()
student = Student.objects.create(user=user)
student.class_name = self.cleaned_data.get('class_name')
student.phone_number = self.cleaned_data.get('phone_number')
student.save()
return user
class TeacherSignUpForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
department = forms.CharField(required=True)
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic
def data_save(self):
user = super().save(commit=False)
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.is_teacher = True
user.save()
teacher = teacher.objects.create(user=user)
teacher.phone_number = self.cleaned_data.get('phone_number')
teacher.department = self.cleaned_data.get('department')
teacher.save()
return user
Entonces, aquí creamos dos clases de formulario llamadas StudentSignUpForm y TeacherSignUpForm Entonces, analicemos cada clase en detalle:
- StudentSignUpForm:
- Django tiene un sistema de autenticación de usuario integrado. Entonces, aquí estamos importando módulos de autenticación de usuario que nos permiten crear el registro del estudiante.
- Y aquí, usamos UserCreationForm que se usa para crear un nuevo usuario para nuestra aplicación. De forma predeterminada, hay tres campos en este formulario: nombre de usuario , contraseña y confirmar contraseña .
- Y además de esto, creamos cuatro campos de texto first_name , last_name , phone_number y class_name respectivamente.
- Definimos la clase Meta ya que necesitamos agregar datos sobre el usuario del modelo.
- Luego usamos la transacción atómica para el formulario de registro de estudiantes, que es una secuencia de una o más operaciones SQL que se tratan como una unidad. Y el objetivo de la transacción atómica es proporcionar cuatro propiedades comúnmente conocidas como ACID.
- Formulario de registro del maestro:
- Aquí estamos importando módulos de autenticación de usuario que nos permiten crear el registro del maestro.
- A continuación, usamos UserCreationForm que se usa para crear un nuevo usuario para nuestra aplicación. De forma predeterminada, hay tres campos en este formulario: nombre de usuario , contraseña y confirmar contraseña .
- Luego, además de esto, creamos tres campos de texto first_name , last_name y department respectivamente.
- Definimos la clase Meta ya que necesitamos agregar datos sobre el modelo de usuario.
- Luego usamos la transacción atómica para el formulario de registro de maestros, ya que el objetivo de la transacción atómica es proporcionar cuatro propiedades comúnmente conocidas como ACID.
Definir archivo de vistas
Básicamente, las vistas de Django, como los documentos HTML, son funciones de Python que toman solicitudes http y devuelven respuestas http. Entonces, podemos decir que los sitios web basados en Django tienen muchas vistas con varias tareas y objetivos.
Además, las vistas a menudo se almacenan en un archivo llamado views.py en la carpeta de la aplicación. De forma predeterminada, está vacío, así que agregue el siguiente código:
from email import message
from django.shortcuts import render, redirect
from django.contrib.auth import login, logout,authenticate
from django.contrib.auth.forms import AuthenticationForm
from django.contrib import messages
from django.views.generic import CreateView
from .models import User
from .forms import StudentSignUpForm, TeacherSignUpForm
# Create your views here.
def home(request):
return render(request, 'home.html')
def register(request):
return render(request, 'register.html')
class student_register(CreateView):
model = User
form_class = StudentSignUpForm
template_name="student_register.html"
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('/accounts/home')
class teacher_register(CreateView):
model = User
form_class = TeacherSignUpForm
template_name="teacher_register.html"
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('/accounts/home')
def login_user(request):
if request.method=='POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None :
login(request,user)
return redirect('/accounts/home')
else:
messages.error(request,"Invalid username or password")
else:
messages.error(request,"Invalid username or password")
return render(request, 'login.html',context={'form':AuthenticationForm()})
def logout_user(request):
logout(request)
return redirect('/accounts/home')
Por lo tanto, aquí creamos seis vistas denominadas home , register , student_register , teacher_register , login_user y logoout_user . Entonces, analicemos cada vista en detalle:
- hogar:
- En la vista de inicio, simplemente representamos la plantilla ‘home.html’ .
- Registrarse:
- En la vista de registro, simplemente representamos la plantilla ‘register.html’ .
- estudiante_abogado:
- Luego, creamos la clase student_register basada en la vista genérica.
- A continuación, usamos CreateView ya que se requiere StudentSignUpForm en la página y se requiere una inserción en la base de datos al enviar un formulario válido.
- maestro_registro:
- Luego, creamos la clase teacher_register basada en la vista genérica.
- A continuación, usamos CreateView ya que se requiere TeacherSignUpForm en la página y se requiere una inserción en la base de datos al enviar un formulario válido .
- login_user:
- Crearemos la vista login_user , que utiliza el objeto de solicitud POST.
- El nombre de usuario y la contraseña se envían al servidor.
- A continuación, se utiliza la función de autenticación para verificar el nombre de usuario y la contraseña.
- Si el usuario está autenticado, vaya a la página de inicio; de lo contrario, vaya a la página de inicio de sesión e imprima el mensaje Nombre de usuario o contraseña no válidos.
- cerrar sesión_usuario:
- Con el objeto de solicitud, crearemos la función de usuario de cierre de sesión.
- A continuación, se usa la función logout() de django.contrib.auth para cerrar la sesión del usuario.
- En el cierre de sesión exitoso, el usuario lo regresará a su ‘ página de inicio’ .
Crear plantillas
Aprendimos de Django que el resultado debe estar en HTML y los archivos HTML se crean en una plantilla.
Así que cree una carpeta de plantillas dentro de la carpeta raíz (MULTILOGIN) y cree cinco archivos HTML llamados ‘home.html’ , ‘ login.html’ , ‘register.html’ , ‘student_register.html’ y ‘teacher_regsiter.html’ .
Entonces, analicemos y creemos cada archivo HTML:
- casa.html:
- El archivo home.html especifica la apariencia de la página web de inicio. Y el siguiente es el código del archivo home.html .
- Aquí usamos la etiqueta de plantilla {%if%} con el atributo is_authenticated para verificar si el usuario está autorizado o no.
- Imprimimos el nombre de usuario Hola si el usuario está autenticado. Usamos la etiqueta {{user.get_username}} para esto.
- También añadimos un botón de cierre de sesión.
WELCOME TO PYTHONGUIDES
{% if user.is_authenticated%}
Hi {{user.get_username}}
Logout
{% else %}
Register
Login
{% endif %}
- iniciar sesión.html
- El archivo login.html especifica la apariencia de la página web de inicio de sesión. Y el siguiente es el código del archivo login.html .
- Aquí, agregamos el enlace de student_register y teacher_register .
LOGIN
{% csrf_token %}
{{form.as_p}}
- registrarse.html:
- El archivo register.html especifica la apariencia de la página web de registro. Y el siguiente es el código del archivo register.html .
USER REGISTRATION
I am a student
I am an teacher
- estudiante_registro.html:
- El archivo student_register.html especifica la apariencia de la página web de registro de estudiantes. Y el siguiente es el código del archivo student_register.html .
STUDENT REGISTERATION FORM
{% csrf_token %} {{form.as_p}}
- registro_profesor.html:
- El archivo teacher_register.html especifica la apariencia de la página web de registro de profesores. Y el siguiente es el código del archivo teacher_register.html .
TEACHER REGISTERATION FORM
{% csrf_token %}
{{form.as_p}}
Pasos para ejecutar la aplicación Django
HACER MIGRACIONES:
Si los modelos han sido modificados, este comando prepara un archivo makemigrations para nuestro nuevo modelo. Ejecute el siguiente comando en la terminal.
python manage.py makemigartions
EMIGRAR:
El comando de migración ejecuta las instrucciones proporcionadas en el archivo de migraciones recientes de la base de datos. Ejecute el siguiente comando en la terminal.
python manage.py migrate
EJECUTAR SERVIDOR:
Para ejecutar el servidor de desarrollo, ejecute el siguiente comando en la terminal.
python manage.py runserver
Producción
Página de inicio Sistema de inicio de sesión de modelos múltiples
En la página de inicio tenemos dos opciones Registrarse e Iniciar sesión. Si es un usuario nuevo, haga clic en ‘Registrarse’. Y si ya estás registrado haz clic en ‘Iniciar sesión’.
Página de registro
Cuando hacemos clic en Registrarse, tenemos dos opciones ‘Soy un estudiante’ y ‘Soy un profesor’. Si es estudiante, haga clic en los de estudiante; de lo contrario, haga clic en los de profesor.
Registro de estudiantes
Si hace clic en ‘Soy un estudiante’ obtendrá una página como esta.
Inicio de sesión del estudiante
Cuando haga clic en Registrarse, la página se verá así.
Sistema de inicio de sesión multimodelo
Cuando hacemos clic en Cerrar sesión, pasamos a la página de inicio.
Página de inicio de sesión
Cuando hagamos clic en Iniciar sesión, nos moveremos a la página de inicio de sesión. Y cuando haga clic en Iniciar sesión, volverá a la página de inicio con su nombre de usuario y Hola.
Página de registro
Si haces clic en Soy profesor.
Registro de profesores
Se moverá a la página teacher_register donde el profesor se registra.
Página de inicio del maestro
Se moverá a la página de inicio donde obtendrá el nombre de usuario del maestro y el mensaje Hola. Y si hace clic en el botón Cerrar sesión, pasará a la página de inicio principal, donde tenemos dos opciones: Registrarse o Iniciar sesión.