Update day 16
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
741187de54
commit
af00070aeb
@ -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
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<p>
|
<p>
|
||||||
{{request.user}}
|
{{request.user}}
|
||||||
</p>
|
</p>
|
||||||
<a href="">Salir</a>
|
<a href="{% url 'logout' %}">Salir</a>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
@ -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'),
|
||||||
|
@ -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')
|
||||||
|
@ -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/
|
||||||
|
Loading…
Reference in New Issue
Block a user