Попробуй Django за исключением ошибки для AnonymousUser - PullRequest
0 голосов
/ 17 марта 2019

Я просто студент. У меня есть такой код. Я использую условие Try для пользователя user_membership. Но мне интересно, как я могу решить, что объект 'AnonymousUser' не повторяется ошибка, если пользователь не авторизован .. Я пытался скрыть отключенную кнопку с помощью user.is_authenticated, но он не работает. (Примечание: я думаю, что вход в систему в BookDetail может решить эту проблему, но я хочу, чтобы он был доступен, даже если пользователь не входит в систему)

views.py

def BookDetail(request, id):
most_recent = Book.objects.order_by('-timestamp')[:3]
book= get_object_or_404(Book, id=id)
form = CommentForm(request.POST or None)
if request.method == "POST":
    if form.is_valid():
        form.instance.user = request.user
        form.instance.post = book
        form.save()
        return redirect(reverse("book-detail", kwargs={
            'id': book.pk
        }))
try: 
    user_membership = Customer.objects.get(user=request.user)
except Customer.DoesNotExist:
    user_membership = None

context = {
    'user_membership': user_membership,
    'form': form,
    'book': book,
    'most_recent': most_recent,

}
return render(request, 'catalog/book_detail.html', context)

и мой book_detail.html

{% if user_membership and user_membership.user == request.user %}
        {% for content in book.pages %}
            <a href="{{ content.get_absolute_url }}" class="site-btn">Read</a>
        {% endfor %}
        {% else %}
        <button class="site-btn" disabled="disabled">VIP</button>
        {% endif %}

1 Ответ

0 голосов
/ 17 марта 2019

Вы можете проверить AnonymousUser со свойством is_anonymous - вы читаете больше в документах .

Например, вы можете редактировать свой код следующим образом:

def BookDetail(request, id):
    most_recent = Book.objects.order_by('-timestamp')[:3]
    book= get_object_or_404(Book, id=id)
    form = CommentForm(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            form.instance.user = request.user
            form.instance.post = book
            form.save()
            return redirect(reverse("book-detail", kwargs={
                'id': book.pk
            }))

    if request.user.is_anonymous:
        user_membership = None
    else:
        try:
            user_membership = Customer.objects.get(user=request.user)
        except Customer.DoesNotExist:
            user_membership = None

    context = {
        'user_membership': user_membership,
        'form': form,
        'book': book,
        'most_recent': most_recent,

    }
    return render(request, 'catalog/book_detail.html', context)
...