我在 Django 中通过 Vue.js 传递 Post 请求时遇到问题。当我尝试填写表格并单击购买时,它不断收到此错误。我正在做的是我通过一个 api 传递它并尝试将它发送到数据库并将其保存在那里。该页面继续正常工作,但在后台没有任何反应。在控制台中,它显示错误 500,当单击网络时,它会显示所有这些信息。我在构建自己的东西时一直在关注本教程:https://www.youtube.com/watch?v=2Ed3fTYcx-w&list=PLpyspNLjzwBmIDrDOaPkLLuy5YDDNW9SA&index=8&ab_channel=CodeWithStein
我已经解决了这个问题,现在它给了我:JSONDecodeError at /api/checkout/, Expecting value: line 1 column 1 (char 0)
var productapp = new Vue({
el:'#cartapp',
delimiters:['[[', ']]'],
store: store,
data() {
return {
first_name: '',
last_name: '',
birth_date: '',
phone: '',
email: '',
city: '',
region: '',
address: '',
references: '',
products: [{{productsstring|safe}}]
}
},
computed: {
numItems: function() {
return store.state.numItems
},
totalCost: function() {
return store.state.totalCost
}
},
methods: {
submitForm() {
var data = {
'first_name': this.first_name,
'last_name': this.last_name,
'birth_date': this.birth_date,
'phone': this.phone,
'email': this.email,
'city': this.city,
'region': this.region,
'address': this.address,
'references': this.references,
};
fetch('/api/checkout/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': '{{ csrf_token }}'
},
credentials: 'same-origin',
body: JSON.stringify(data),
})
.then((response) => {
console.log('success')
console.log(response)
})
.catch(function (error) {
console.log('Error 2');
})
API.PY FILE:
import json
from django.http import JsonResponse
from cart.models import Cart
from .models import Product
from order.models import Order, OrderItem
from order.utils import checkout
from django.shortcuts import get_object_or_404, redirect
def api_checkout(request):
cart = Cart(request)
data = json.loads(request.body)
jsonresponse = {'success': True}
first_name = data['first_name']
last_name = data['last_name']
birth_date = data['birth_date']
phone = data['phone']
email = data['email']
city = data['city']
region = data['region']
address = data['address']
references = data['references']
orderid = checkout(request, first_name, last_name, birth_date, phone , email, city, region, address, references)
paid = True
if paid == True:
order = Order.objects(pk=orderid)
order.paid = True
order.paid_amount = cart.get_total_cost()
order.save()
cart.clear()
return JsonResponse(jsonresponse)
UTILS.PY FILE:
import datetime
import os
from random import randint
from cart.models import Cart
from .models import Order, OrderItem
def checkout(request, first_name, last_name, birth_date, phone, email, city, region, address, references):
order = Order(first_name=first_name, last_name=last_name, birth_date=birth_date, phone=phone, email=email, city=city, region=region, address=address, references=references)
order.save()
cart = Cart(request)
for item in cart:
OrderItem.objects.create(order=order, product=item['product'], price=item['price'], quantity=item['quantity'])
return order.id
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/api/checkout/
Django Version: 3.1.7
Python Version: 3.9.0
Installed Applications:
['order.apps.OrderConfig',
'cart.apps.CartConfig',
'crispy_forms',
'ckeditor',
'shop.apps.ShopConfig',
'categories.apps.CategoriesConfig',
'pages.apps.PagesConfig',
'blog.apps.BlogConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
答案 0 :(得分:0)
可能发生在这里:order = Order(request...
为什么要将 request
对象传递给 Order
模型?它没想到会有这样的争论。只需在 Order
函数中创建新的 checkout
时将其删除即可修复。
UPD1:请先打印 request.body
中的内容,然后再尝试解析它。我认为那里缺少某些东西。