Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

411
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda