как проверить, вошел ли пользователь в систему или нет - PullRequest
3 голосов
/ 26 апреля 2020

Я работаю над системой управления счетами, в которой пользователь может добавлять данные счетов-фактур, и они будут сохраняться в базе данных, и всякий раз, когда пользователь вошел в систему, данные появятся на домашней странице, но каждый раз, когда пользователь выходит из системы и пытается получить доступ к домашней странице, но он дает следующее ошибка.

TypeError at /

'AnonymousUser' object is not iterable

я пробовал AnonymousUser.is_authenticated метод, но все еще не работает.

я хочу, если пользователь вошел в систему, тогда home.html должен открыться в противном случае intro.html

вот мой код 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)

home. 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 %}

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Наконец-то я получил решение, которое работает для меня

вот оно

Django обеспечивает LoginRequiredMixin я использовал это в моей функции invoicelistview

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]

и все. Теперь, когда пользователь выходит из системы, он будет перенаправлен на страницу входа

.
1 голос
/ 26 апреля 2020

В контексте HTML вы можете сделать:

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

, а затем в контексте python вы можете сделать:

from django.contrib.auth.decorators import login_required

@login_required
function stuff():
.....

, где @login_required должен иметь префикс любая функция, которая должна выполняться только вошедшим в систему пользователем.

Редактировать: и для решения вашего конкретного c варианта использования, вы хотите сделать просто:

if request.user.is_authenticated:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...