【问题标题】:Why does posting Image with data using axios to django-rest-framework gives 404 error?为什么使用 axios 将带有数据的图像发布到 django-rest-framework 会出现 404 错误?
【发布时间】:2020-12-07 15:33:01
【问题描述】:

我正在使用 django-rest-framework 并发布数据,但只有在我向其中添加图像时它才会给我 404 错误。没有图像,数据被发布,modelviewset 完美运行。

错误屏幕:

我的urls.py

router = routers.SimpleRouter()
router.register(r'users', UserView, 'user')
router.register(r'teachers', TeacherView, 'teacher')
router.register(r'students', StudentView, 'student')
router.register(r'classes', ClassView, 'class')
router.register(r'subjects', SubjectView, 'subject')
router.register(r'institutes', InstituteView, 'institute')
router.register(r'enrolls', EnrolledView, 'enrolled')

router.register(r'quizes', QuizView, 'quizes')
router.register(r'questions', QuestionView, 'questions')
router.register(r'options', OptionView, 'options')
router.register(r'answers', AnswerView, 'answers')
router.register(r'attemptedQuestions',
                AttemptedQuestionView, 'attemmptedQuestion')
router.register(r'attemptedQuizes', AttemptedQuizesView, 'attemptedQuizes')

urlpatterns = router.urls

我的意见.py:

class QuizView(viewsets.ModelViewSet):
    serializer_class = QuizSerializer
    queryset = Quiz.objects.all()


class QuestionView(viewsets.ModelViewSet):
    serializer_class = QuestionSerializer
    queryset = Question.objects.all()


class OptionView(viewsets.ModelViewSet):
    serializer_class = OptionSerializer
    queryset = Option.objects.all()


class AnswerView(viewsets.ModelViewSet):
    serializer_class = AnswerSerializer
    queryset = Answer.objects.all()


class AttemptedQuizesView(viewsets.ModelViewSet):
    serializer_class = AttemptedQuizesSerializer
    queryset = attempted_quizes.objects.all()


class AttemptedQuestionView(viewsets.ModelViewSet):
    serializer_class = AttemptedQuestionSerializer
    queryset = attempted_question.objects.all()

编辑

堆栈跟踪Stack Trace after the error screen

测验模型

class Quiz(models.Model):
    Pin = models.AutoField(primary_key=True)
    Live = models.BooleanField(default=False)
    asset = models.FileField(upload_to='Quiz_assets',
                             default=None, null=True, blank=True)
    Title = models.CharField(max_length=255)
    Description = models.TextField()
    Start_time = models.DateTimeField()
    End_time = models.DateTimeField()
    created = models.DateTimeField(auto_now_add=True)
    Student = models.ManyToManyField(
        acModels.Student, through='attempted_quizes')
    Subject = models.ForeignKey(
        acModels.Subject, related_name="Quiz", on_delete=models.CASCADE)

另外,在我的本地机器上一切正常。

【问题讨论】:

    标签: django reactjs image django-rest-framework http-status-code-404


    【解决方案1】:

    问题不在于您发布图片。您的网址末尾有 /1。这意味着 Django 将尝试获取 ID = 1 的测验。当您使用 PUT 方法时,Django 将尝试更新 ID = 1 的测验。当没有 ID = 1 的此类测验时,它会引发 404 错误。只需从 URL 中删除 /1 并再次发布即可。在 PUT 的情况下,附加 DB 中实际存在的 ID。它会起作用的。

    【讨论】:

    • 请再次阅读问题,如果我提出没有图像的请求,数据会更新。它不适用于 图像,为了澄清 id 存在于数据库中,这就是为什么它在没有图像的情况下得到更新
    • 你能把堆栈跟踪和你的测验模型定义吗?
    • 请查看上面更新的问题以获取堆栈跟踪(更多来自服务器的响应,因为我在调试模式下运行它以解决此错误)和测验模型。提前致谢!此外,这很奇怪,因为在我的本地 PC 上一切正常。
    • @Kirti 您好,查看错误,我仍然认为是 URL 问题。可以请您在删除结束斜线后尝试。只需从末尾删除“/”即可。如果还是不行,能不能在 GitHub 上上传一个最少的代码。我可以尝试从那里复制问题。
    • django 需要尾部斜杠。我们可以通过明确定义trailing_slash=False 来切换它,但我显然没有这样做。我在阅读您的评论后尝试过,但问题仍然存在,我认为您不能在本地产生此错误,因为我说它在我的本地电脑上工作正常。我只在服务器中遇到这个问题。
    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2019-05-08
    • 2012-05-15
    • 1970-01-01
    • 2017-01-19
    • 2021-02-28
    相关资源
    最近更新 更多