在 Django 中使用 AJAX 更新数据库
Posted
技术标签:
【中文标题】在 Django 中使用 AJAX 更新数据库【英文标题】:Update Database Using AJAX in Django 【发布时间】:2016-12-15 18:47:57 【问题描述】:所以我有一个 AJAX 命令,它将信息传递给 views.py 方法(我已经验证了从 html->urls.py->views.py 传递信息,所以这一切都很好),但是一旦我在“views.py”中有它,我不知道如何让它在数据库中更新。
如果可能,我尽量避免使用 forms.py 文件,但如果这是唯一的选择,我会屈服于它。
AJAX函数如下:
$.ajax(
url : '/perform/acts/update/ act.id /',
type : "POST",
data :
'csrfmiddlewaretoken' : " csrf_token ",
furtherData : furtherData
,
success : function(result)
);
views.py 函数......到目前为止,至少可以说是缺乏,但这是我有点迷失的地方:
def update_act(request, furtherData_id):
if request.method == 'POST':
?
return HttpResponse(?)
这样做的一个重要原因是无需重新加载也无需添加另一个模块即可执行更新。我只用了几周的 Django,所以我可能很容易错过它......
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:def update_act(request,furtherData_id):
from django.http import JsonResponse
if request.method == 'POST':
obj=MyObj.objects.get(pk=furtherData_id)
obj.data=request.POST['furtherData']
obj.save()
return JsonResponse('result':'ok')
else:
return JsonResponse('result':'nok'
【讨论】:
我觉得这是基于 OP 提供的参数的“正确答案”,但这确实会盲目地将输入保存到数据库中。使用 ModelForm 并提供obj
作为该表单的实例将在此处提供一些数据验证。【参考方案2】:
您的视图函数:
def my_view_action(request, any_pk_id):
from django.http import JsonResponse
if request.method=='POST' and request.is_ajax():
try:
obj = MyModel.objects.get(pk=any_pk_id)
obj.data_attr = request.POST['attr_name']
obj.save()
return JsonResponse('status':'Success', 'msg': 'save successfully')
except MyModel.DoesNotExist:
return JsonResponse('status':'Fail', 'msg': 'Object does not exist')
else:
return JsonResponse('status':'Fail', 'msg':'Not a valid request'
此功能直接将数据保存在您的数据库中,为了验证它首先使用表单然后继续保存操作。
---步骤--- - 为模型创建表单。 - 通过请求/对象在此模型上填充数据。 - 在表单上运行验证,然后通过表单或模型保存到数据库。
更多信息 https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#the-save-method
【讨论】:
要访问视图中的表单数据,只需request.POST
以上是关于在 Django 中使用 AJAX 更新数据库的主要内容,如果未能解决你的问题,请参考以下文章
Django 使用来自 Ajax 的成功数据更新模板 div