首页 > 编程问答 >有人可以检查我的 Django 代码有什么问题吗?

有人可以检查我的 Django 代码有什么问题吗?

时间:2024-07-21 04:52:03浏览次数:7  
标签:python django database curl backend

所以,我刚刚在 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 中执行的正确命令以进行测试。先感谢您!


你的代码存在一些问题:

  1. URL 配置中的路由重复: 你为 delete_user view_user update_user 定义了相同的路由模式 ( user/<username>/ )。这会导致 Django 无法确定要使用哪个视图函数。
  2. 更新用户时的错误: 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

相关文章

  • 除了curses之外,是否有一个python包可以轻松控制终端的输出?
    我现在正在处理一些小项目,我对GUI的偏好是终端中漂亮的文本界面。我宁愿不强迫用户处理Windowscurses二进制文件,所以我正在寻找不同的选项。我已经发现了asciimatics,但我想考虑所有可能的选择。如果有人有任何经验或知道解决此用例的包,我将不胜感激。谢谢你说的没错......
  • Django makemessages 重复翻译
    我有现有的.po文件,但我仍在构建我的项目,因此添加了新的翻译字符串,并且一些已添加的翻译字符串正在更改位置。要更新我正在运行的.po文件django-adminmakemessages-len当我打开文件时我发现相同的翻译重复了很多次:#:_templates/admin-users/base/partials/sid......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • 使用 python print 和 gdb 时出现 BrokenPipeError
    我正在尝试在Linux中运行应用程序并使用Python生成输入:python3-c'print(".....")'|./someapp但出现下一个错误:Exceptionignoredin:<_io.TextIOWrappername='<stdout>'mode='w'encoding='utf-8'>BrokenPipeError:......
  • python 舰队容器
    我正在尝试使用容器在flet中制作一个菜单,它应该是半透明的,但其中的项目不是。我尝试将opacity=1分配给元素,但没有成功-它们与容器一样透明感谢任何帮助我的代码:nickname=ft.TextField(label="xxx",hint_text="xxx")column=ft.Column(controls=[nickname......
  • Python应用程序跨子包共享的配置文件
    我正在构建一个应用程序来控制一些硬件。我在包中实现了不同类型的硬件:电机和测量设备。我的文件结构如下:name_of_my_app/__init__.pymain.pyconfig.iniCONFIG.pymotors/__init__.pyone_kind_of_motor.pymeasurement_devices/......
  • python中时间序列数据的梯度计算
    我正在尝试编写一个函数,它可以从最适合下面的线返回梯度dataframe在浏览了谷歌的几个资源之后,我仍然不确定这是如何完成的。我明白最佳拟合线的计算公式为:y=mx+b将因变量(y)设置为foos,将自变量(x)设置为DateTimeDatafram......
  • 调试用 C 编写的 Python 扩展
    我非常熟悉编写C代码,并且很擅长编写Python代码。我正在尝试学习如何用C编写可以从OSX10.15.7上的Python-3.9.X调用的模块。我已经得到了几个“helloworld”类型的示例,但是对于复杂的示例,我正在努力弄清楚如何调试我编写的C扩展。MWE:src/add.c//......
  • 具有块大小选项的 Python pandas read_sas 因索引不匹配而失败并出现值错误
    我有一个非常大的SAS文件,无法容纳在我的服务器内存中。我只需要转换为镶木地板格式的文件。为此,我使用pandas中chunksize方法的read_sas选项分块读取它。它主要是在工作/做它的工作。除此之外,一段时间后它会失败并出现以下错误。此特定SAS文件有794......
  • 使用 requests 包 python 时打开文件太多
    我正在使用Pythonrequests包向API发出大量请求。然而,在某些时候,我的程序由于“打开的文件太多”而崩溃。当我明确关闭我的会话时,我真的不知道这是怎么回事。我使用以下代码:importrequestsimportmultiprocessingimportnumpyasnps=requests.session()s.keep......