【发布时间】:2020-07-17 17:12:24
【问题描述】:
当我以登录用户的身份提交表单时,我突然退出了,如下图所示。我还不能嵌入图像,因为我没有 10 名声望。以下是链接图片:
views.index
from django.db import IntegrityError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from .models import User, Bid, Auction, Comment
def index(request):
if request.method == "POST":
title = request.POST["title"]
bid = int(request.POST["startingBid"])
category = request.POST["category"]
image = request.POST["img"]
description = request.POST["description"]
listing = Auction(name=title, bid=bid,description=description,url=image, category=category)
listing.save()
listings = Auction.objects.all()
#user.is_authenticated == True here
return render(request, "auctions/index.html", {
"listings": listings,
"user": request.user.username,
})
return render(request, "auctions/index.html")
urls.py
from . import views
urlpatterns = [
path("home", views.index, name="index"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
path("create", views.create, name="create"),
]
index.html
{% extends "auctions/layout.html" %}
{% block body %}
<h2>Active Listings</h2>
{% if not user.is_authenticated %}
Please login to see active listings.
{% endif %}
{% if user.is_authenticated %}
{% for listing in listings %}
<div class="card bg-light">
<div class="card-body">
<div class="row">
<div class="col-sm">
<img src="{% url 'listing.url' %}" class="img-fluid" alt="Listing image">
</div>
<div class="col-sm">
<div class="row">
<div class="col">
<h2>{{ listing.name }}</h2>
</div>
</div>
<div class="row">
<div class="col">
<h6>Starting Bid: ${{ listing.bid }}</h6>
<p>Category: {{ listing.category }}</p>
</div>
</div>
<div class="row">
<div class="col">
<p>{{ listing.description }}</p>
</div>
</div>
<div class="row">
<div class="col">
<small class="text-muted">Created {{ listing.dateTime }}</small>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
{% endif %}
{% endblock %}
models.Auction 和 models.User
from django.contrib.auth.models import AbstractUser
from django.db import models
from datetime import datetime
from django.core.validators import MinValueValidator
class User(AbstractUser):
pass
class Auction(models.Model):
name = models.CharField(max_length=64,default="")
bid = models.PositiveIntegerField(validators=[MinValueValidator(0),])
description = models.CharField(max_length=200, blank=True, default="")
dateTime = models.DateTimeField(auto_now=True)
url = models.URLField(max_length=300, default="", blank=True)
category=models.CharField(max_length=50, default="")
def __str__(self):
return f"{self.name}"
当用户提交表单时,views.index 中的 request.method 等于“POST”并且 user.is_authenticated 为 True,直到模板被渲染。我希望将用户带回索引页面。如图所示,“请登录以查看活动列表。”正在显示,这意味着 user.is_authenticated 以某种方式变为错误。为什么会这样?
【问题讨论】: