Update day 16

Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
Manuel Vergara 2023-05-24 00:15:01 +02:00
parent 741187de54
commit af00070aeb
5 changed files with 70 additions and 7 deletions

View File

@ -697,7 +697,7 @@ Vamos a poner el anterior fragmento de código dentro de un if, quedando así:
<p> <p>
{{request.user}} {{request.user}}
</p> </p>
<a href="">Salir</a> <a href="{% url 'logout' %}">Salir</a>
{% else %} {% else %}
@ -710,8 +710,67 @@ En el siguiente punto veremos como construir el formulario de logueo.
## 16.14. - Formulario de Logueo / Deslogueo ## 16.14. - Formulario de Logueo / Deslogueo
Nos vamos a views.py, importamos la siguiente vista:
```python
from django.contrib.auth.views import LoginView
```
Y añadimos la siguiente clase, que tiene sentido que este arriba del todo, y dentro de la clase definimos el nombre del template, que queremos todos los campos que contiene LoginView, activar la redirección después de la autenticación y redefinimos la función get_success_url para que vaya a la página principal después del loguearse:
class Logueo(LoginView):
```python
template_name = "base/login.html"
field = '__all__'
redirect_authenticated_user = True
def get_success_url(self):
return reverse_lazy('tareas')
```
Ahora vamos a configurar las urls.py para que llegue al path. Importamos Logueo y añadimos el path:
```python
path('login/', Logueo.as_view(), name='login'),
```
Creamos el fichero en login.html en template/base con el siguiente contenido:
```html
<h1>Ingresar</h1>
<form method="post" action="">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Ingresar">
</form>
```
Para desloguear vamos a usar directamente el formulario que nos brinda django. En urls.py importamos la siguiente clase:
```python
from django.contrib.auth.views import LogoutView
```
y añadimos el path:
```python
path('logout/', LogoutView.as_view(next_page='login'), name='logout'),
```
## 16.15. - Restringir acceso ## 16.15. - Restringir acceso
Nos vamos a views.py e importamos nueva clase:
```python
from django.contrib.auth.mixins import LoginRequiredMixin
```
Con esta clase podríamos gestionar los atributos de un determinado usuario, si va a ser administrador, si va a tener alguna otra autorización especial, si va a ser un usuario común. Etc También la restricción de las vistas.
Tendremos que incluirlo en las clase que queramos que herede esta opción, como en ListaPendientes, en DetalleTarea y en definitiva, en todas las clases menos en la de logueo.
Pero si ahora intentamos entrar sin estar logueados nos saldrá un página de error de django. Para personalizarla tenemos que ir a settings.py y vamos a incluir esta línea de código antes de Static Files:
```python
LOGIN_URL = 'login'
```
Así nos desviará a la página de logueo sin no estamos registrados.
## 16.16. - Información específica de usuario ## 16.16. - Información específica de usuario
## 16.17. - Registrar nuevo usuario ## 16.17. - Registrar nuevo usuario

View File

@ -2,7 +2,7 @@
<p> <p>
{{request.user}} {{request.user}}
</p> </p>
<a href="">Salir</a> <a href="{% url 'logout' %}">Salir</a>
{% else %} {% else %}

View File

@ -1,10 +1,12 @@
from django.urls import path from django.urls import path
from .views import ListaPendientes, DetalleTarea, CrearTarea, EditarTarea, EliminarTarea, Logueo from .views import ListaPendientes, DetalleTarea, CrearTarea, EditarTarea, EliminarTarea, Logueo
from django.contrib.auth.views import LogoutView
urlpatterns = [ urlpatterns = [
path('', ListaPendientes.as_view(), name='tareas'), path('', ListaPendientes.as_view(), name='tareas'),
path('login/', Logueo.as_view(), name='login'), path('login/', Logueo.as_view(), name='login'),
path('logout/', LogoutView.as_view(next_page='login'), name='logout'),
path('tarea/<int:pk>', DetalleTarea.as_view(), name='tarea'), path('tarea/<int:pk>', DetalleTarea.as_view(), name='tarea'),
path('crear-tarea/', CrearTarea.as_view(), name='crear-tarea'), path('crear-tarea/', CrearTarea.as_view(), name='crear-tarea'),
path('editar-tarea/<int:pk>', EditarTarea.as_view(), name='editar-tarea'), path('editar-tarea/<int:pk>', EditarTarea.as_view(), name='editar-tarea'),

View File

@ -3,6 +3,7 @@ from django.views.generic.list import ListView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.contrib.auth.views import LoginView from django.contrib.auth.views import LoginView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy from django.urls import reverse_lazy
from .models import Tarea from .models import Tarea
@ -18,30 +19,30 @@ class Logueo(LoginView):
return reverse_lazy('tareas') return reverse_lazy('tareas')
class ListaPendientes(ListView): class ListaPendientes(LoginRequiredMixin, ListView):
model = Tarea model = Tarea
context_object_name = 'tareas' context_object_name = 'tareas'
class DetalleTarea(DetailView): class DetalleTarea(LoginRequiredMixin, DetailView):
model = Tarea model = Tarea
context_object_name = 'tarea' context_object_name = 'tarea'
template_name = 'base/tarea.html' template_name = 'base/tarea.html'
class CrearTarea(CreateView): class CrearTarea(LoginRequiredMixin, CreateView):
model = Tarea model = Tarea
fields = '__all__' fields = '__all__'
success_url = reverse_lazy('tareas') success_url = reverse_lazy('tareas')
class EditarTarea(UpdateView): class EditarTarea(LoginRequiredMixin, UpdateView):
model = Tarea model = Tarea
fields = '__all__' fields = '__all__'
success_url = reverse_lazy('tareas') success_url = reverse_lazy('tareas')
class EliminarTarea(DeleteView): class EliminarTarea(LoginRequiredMixin, DeleteView):
model = Tarea model = Tarea
context_object_name = 'tarea' context_object_name = 'tarea'
success_url = reverse_lazy('tareas') success_url = reverse_lazy('tareas')

View File

@ -112,6 +112,7 @@ USE_I18N = True
USE_TZ = True USE_TZ = True
LOGIN_URL = 'login'
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/ # https://docs.djangoproject.com/en/4.2/howto/static-files/