所以,我刚刚在 Django 中做了一个 CRUD,现在我想测试它,创建和删除测试正在 cmd 中使用这些命令: 创造 curl -X POST http://localhost:8000/user/ -H "Content-Type: application/json" -d "{"用户名": "john_doe", "电子邮件": "[email protected]", "名字”:“约翰”,“姓氏”:“Doe”}”
删除 curl -X DELETE http://localhost:8000/user/john_doe/
但问题是当我尝试这些时: 得到 curl -X GET http://localhost:8000/user/john_doe/
PUT curl -X PUT http://localhost:8000/user/john_doe/ -H "Content-Type: application/json" -d "{"email": "[email protected]"}"
I得到一个巨大的错误。
所以首先这是我的views.py代码:
import json
import pymongo
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
client = pymongo.MongoClient('mongodb://localhost:27017/')
database = client['PoseTrack_Database']
users = database['users']
@csrf_exempt
def create_user(request):
if request.method == 'POST':
user_data = json.loads(request.body)
users.insert_one(user_data)
return JsonResponse({'status': 'success', 'message': 'User created successfully!'}, status=201)
@csrf_exempt
def delete_user(request, username):
if request.method == 'DELETE':
users.delete_one({'username': username})
return JsonResponse({'status': 'success', 'message': 'User deleted successfully!'}, status=200)
@csrf_exempt
def view_user(request, username):
if request.method == 'GET':
data = users.find_one({'username': username})
return JsonResponse(data)
@csrf_exempt
def update_user(request, username):
if request.method == 'PUT':
new_data = json.loads(request.body)
users.update_one(username, {'$set': new_data})
这是我的urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('user/', views.create_user),
path('user/<username>/', views.delete_user),
path('user/<username>/', views.view_user),
path('user/<username>/', views.update_user),
]
所以我尝试更改命令中的内容或尝试将错误捕获器放入程序中,但这对于这么小的 CRUD 来说并没有真正起作用。我希望有人要么告诉我代码中出了什么问题,要么向我展示在 cmd 中执行的正确命令以进行测试。先感谢您!
你的代码存在一些问题:
-
URL 配置中的路由重复:
你为
delete_user
、view_user
和update_user
定义了相同的路由模式 (user/<username>/
)。这会导致 Django 无法确定要使用哪个视图函数。 -
更新用户时的错误:
在
update_user
函数中,你没有为update_one
方法提供正确的过滤器。你应该传递一个字典来识别要更新的文档,类似于你在delete_user
中所做的那样。
以下是修复后的代码:
urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('user/', views.create_user),
path('user/<username>/', views.delete_user, name='delete_user'),
path('user/<username>/', views.view_user, name='view_user'),
path('user/<username>/', views.update_user, name='update_user'),
]
views.py:
import json
import pymongo
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
client = pymongo.MongoClient('mongodb://localhost:27017/')
database = client['PoseTrack_Database']
users = database['users']
@csrf_exempt
def create_user(request):
if request.method == 'POST':
user_data = json.loads(request.body)
users.insert_one(user_data)
return JsonResponse({'status': 'success', 'message': 'User created successfully!'}, status=201)
@csrf_exempt
def delete_user(request, username):
if request.method == 'DELETE':
users.delete_one({'username': username})
return JsonResponse({'status': 'success', 'message': 'User deleted successfully!'}, status=200)
@csrf_exempt
def view_user(request, username):
if request.method == 'GET':
data = users.find_one({'username': username})
return JsonResponse(data, safe=False)
@csrf_exempt
def update_user(request, username):
if request.method == 'PUT':
new_data = json.loads(request.body)
users.update_one({'username': username}, {'$set': new_data})
return JsonResponse({'status': 'success', 'message': 'User updated successfully!'}, status=200)
说明:
-
我们为每个 URL 模式添加了唯一的
name
属性,以避免冲突。 -
在
update_user
函数中,我们将username
参数用于update_one
方法的过滤器中,以确保只更新具有指定用户名的文档。 -
在
view_user
函数中,我们将safe=False
传递给JsonResponse
,以便它可以序列化 MongoDB 文档。
进行这些更改后,你的 cURL 命令应该可以正常工作。请记住,你还需要在 Django 项目中包含这些 URL 模式。
标签:python,django,database,curl,backend From: 78773846