Maison  >  Questions et réponses  >  le corps du texte

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

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粉450079266P粉450079266241 Il y a quelques jours419

répondre à tous(1)je répondrai

  • P粉178132828

    P粉1781328282024-02-22 09:31:57

    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

    répondre
    0
  • Annulerrépondre