Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

410
Views
cómo comprobar si el usuario ha iniciado sesión o no

Estoy trabajando en un sistema de gestión de facturas en el que el usuario puede agregar datos de factura y se guardará en la base de datos y cada vez que el usuario inicie sesión, los datos aparecerán en la página de inicio, pero cada vez que el usuario cierre la sesión e intente acceder a la página de inicio, pero está dando el siguiente error.

 TypeError at / 'AnonymousUser' object is not iterable

Probé el método AnonymousUser.is_authenticated pero aún no funciona.

quiero que si el usuario ha iniciado sesión, home.html debería abrirse, de lo contrario intro.html

aquí está mi código views.py

 from django.shortcuts import render from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.views.generic import ( ListView, DetailView, CreateView, UpdateView, DeleteView ) from .models import Invoicelist def home(request): if request.user.is_authenticated(): context = { 'invoices': Invoicelist.objects.all() } return render(request, 'invoicedata/home.html', context) else: return render(request, 'invoicedata/intro.html', context)

inicio.html

 {% extends "invoicedata/base.html" %} {% block content %} {% for invoice in invoices %} <article class="media content-section"> <div class="media-body"> <div class="article-metadata"> <small class="text-muted">{{ invoice.date_posted|date:"F d, Y" }}</small> <h2><a class="article-title" href="{% url 'invoice-detail' invoice.id %}">{{ invoice.issuer }}</a></h2> </div> <p class="article-content">{{ invoice.invoice_number }}</p> <p class="article-content">{{ invoice.date }}</p> <p class="article-content">{{ invoice.amount }}</p> <p class="article-content">{{ invoice.currency }}</p> <p class="article-content">{{ invoice.other }}</p> <div class="article-metadata"> <small class="text-muted">{{ invoice.author }}</small> </div> </div> </article> {% endfor %} {% endblock content %}

intro.html

 {% extends "invoicedata/base.html" %} {% block content %} <h2>login to your portal for great auditing services</h2> {% endblock content %}
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Finalmente obtuve la solución que me funcionó.

aquí está

Django proporciona LoginRequiredMixin , usé esto en mi función de vista de lista de facturas

 from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin class InvoiceListView(LoginRequiredMixin,ListView): model = Invoicelist template_name = 'invoicedata/home.html' context_object_name = 'invoices' def get_queryset(self): return self.model.objects.all().filter(author=self.request.user).order_by('-date_posted')[:2]

y eso es. Ahora, cada vez que el usuario cierre la sesión, se redirigirá a la página de inicio de sesión

over 4 years ago · Santiago Trujillo Report

0

Sé que la pregunta ya fue respondida, solo quiero hacer un resumen de cada método para ocultar/mostrar información a usuarios no autenticados.

1. Iniciar sesión decorador requerido

Si se trata de una vista funcional, puede decorarla así:

 from django.contrib.auth.decorators import login_required @login_required def my_view(request): pass

Esto solo mostrará la vista a los usuarios autenticados. Si son anónimos, serán redirigidos a la URL de inicio de sesión (settings.LOGIN_URL)

2. LoginRequiredMixin

 from django.contrib.auth.mixins import LoginRequiredMixin class MyView(LoginRequiredMixin, View): login_url = '/login/' redirect_field_name = 'redirect_to'

Esto es para vistas basadas en clases. De la documentación de Django:

Si una vista usa este mixin, todas las solicitudes de usuarios no autenticados se redirigirán a la página de inicio de sesión o se mostrará un error HTTP 403 prohibido, según el parámetro raise_exception.

Al igual que el método anterior, puede personalizar login_url y redirect_field_name

3. Decorador de métodos de vista basado en clases

 from django.utils.decorators import method_decorator class ProtectedView(TemplateView): template_name = 'secret.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super().dispatch(*args, **kwargs)

4. Plantillas HTML

Por último, si solo desea ocultar algún bloque HTML específico para usuarios no autenticados, puede envolverlo así:

 {% if user.is_authenticated %} <p> Hidden content! </p> <!-- You can also access the user data like this --> <p> {{ {{ request.user }} }} </p> {% endif %}
over 4 years ago · Santiago Trujillo Report

0

En el contexto HTML, puede hacer:

 {% if user.is_authenticated %} # some arbitary stuff <li class="nav-item"> <a class="nav-link" href="#"><strong>{{ user.username }}</strong></a> </li> {% endif %}

y luego en el contexto de python puedes hacer:

 from django.contrib.auth.decorators import login_required @login_required function stuff(): .....

donde @login_required debe prefijar cualquier función que solo debe ejecutar un usuario que haya iniciado sesión.

Editar: y para abordar su caso de uso específico, solo desea hacer:

if request.user.is_authenticated: .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!