Django et Vue : "Impossible de charger la ressource : le serveur a répondu avec un statut de 500 (erreur interne du serveur)" continue d'apparaître sur mon site
P粉450079266
P粉450079266 2024-02-21 12:52:46
0
1
468

J'utilise Vue et Django pour ce projet, mais lorsque j'exécute mon code, j'obtiens toujours cette erreur

"Failed to load resource: the server responded with a status of 500 (Internal Server Error)

127.0.0.1:8000/api/v1/products/winter/yellow-jacket-with-no-zipper:1"

J'ai continué à recharger et à attendre 30 minutes que cette erreur disparaisse, mais elle a continué à arriver. Je ne sais pas s'il y a un problème avec mon javascript car j'exécute le projet vue sans aucune erreur.

C'est le code qui, à mon avis, pose problème.

Backend :

Module urls.py dans le package du produit :

from django.urls import path, include

from product import views

urlpatterns = [
  path('latest-products/', views.LatestProductsList.as_view()),
  path('products/<slug:category_slug>/<slug:product_slug>', views.ProductDetail.as_view()),
]

Front-end :

Script Product.vue :

<template>
  <div class="page-product">
    <div class="columns is-multiline">
      <div class="column is-9">
        <figure class="image mb-6">
          <img v-bind:src="product.get_image">
        </figure>

        <h1 class="title">{{ product.name }}</h1>

        <p>{{ product.description }}</p>
      </div>

      <div class="column is-3">
        <h2 class="subtitle">Information</h2>

        <p>Price: <strong>{{ product.price }}</strong></p>

        <div class="field has-addons mt-6">
          <div class="control">
            <input type="number" class="input" min="1" v-model="quantity">
          </div>

          <div class="control">
            <a class="button is-dark">Add to Carts</a>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'Product',
  data() {
    return {
      product: {},
      quantity: 1
    }
  },
  mounted() {
    this.getProduct()
  },
  methods: {
    getProduct() {
      const category_slug = this.$route.params.category_slug
      const product_slug = this.$route.params.product_slug

      axios
        .get(`/api/v1/products/${category_slug}/${product_slug}`)
        .then(response => {
          this.product = response.data
        })
        .catch(error => {
          console.log("error")
        })
    }
  }
}
</script>

Éditeur :

Après quelques modifications, je pense que le problème est causé par le module views.py dans le package du produit

from django.http import Http404

from rest_framework.views import APIView
from rest_framework.response import Response

from .models import Product
from .serializers import ProductSerializer

class LatestProductsList(APIView):
  def get(self, request, format=None):
    products = Product.objects.all()[0:4]
    serializer = ProductSerializer(products, many=True)
    return Response(serializer.data)

#I think its this line of code
class ProductDetail(APIView):
  def get_object(self, category_slug, product_slug):
    try:
      return Product.objects.filter(category_slug=category_slug).get(slug=product_slug)
    except Product.DoesNotExist:
      raise Http404

  def get(self, request, category_slug, product_slug, format=None):
    product = self.get_object(category_slug, product_slug)
    serializer = ProductSerializer(product)
    return Response(serializer.data)

P粉450079266
P粉450079266

répondre à tous(1)
P粉178132828

Après avoir modifié le code, j'ai trouvé que j'avais raison. Le problème vient du module views.py dans le package du produit. Cela peut être vu dans la fonction get_object de la classe ProductDetail.

Texte original :

class ProductDetail(APIView):
  def get_object(self, category_slug, product_slug):
    try:
      return Product.objects.filter(category_slug=category_slug).get(slug=product_slug)
    except Product.DoesNotExist:
      raise Http404

Le problème est que je dois ajouter un autre trait de soulignement/trait de soulignement (cette chose : _) lors de la définition du slug de catégorie, donc

category_slug=category_slug

est devenu

category__slug=category_slug

Nouvelle version :

class ProductDetail(APIView):
      def get_object(self, category_slug, product_slug):
        try:
          return Product.objects.filter(category__slug=category_slug).get(slug=product_slug)
        except Product.DoesNotExist:
          raise Http404
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal