gpt4 book ai didi

jquery - Django 和 Ajax 安全问题

转载 作者:行者123 更新时间:2023-12-01 05:58:45 25 4
gpt4 key购买 nike

我有这个“模型”

class messages(models.Model):
status_choices = (
(u'read',u'read'),
(u'unread',u'unread')
)
user = models.ForeignKey(User)
message = models.TextField()
status = models.CharField(max_length=6,choices=status_choices,default='unread')
sender = models.ForeignKey(User,related_name="sender")

这是我的 View ,它获取用户消息并将其传递给 JavaScript。

@login_required
def ajax_fetch_messages(request):
if request.is_ajax():
print(request.POST['user'])
# first check that user himself asked for his/her messages
requested_user = get_object_or_404(User,id=request.POST['user'])
if requested_user == request.user:
# do processing of messages
user_messages = messages.objects.filter(user=requested_user,status='unread')
'''try:
response = dumps(messages)
except:
print("Unable to dump messages")'''
return HttpResponse(user_messages)
else:
return HttpResponse("You're not authorised to do that")
else:
return HttpResponse("This method can't be called this way")

现在我有以下担忧

  1. 我无法对上述 View 返回的对象进行 jsonify。因此我必须将 View 返回的“消息”对象发送给 JavaScript。
  2. 将 python 对象传递给 javascript 而不在 django 端对对象进行 jsonfing 是否安全?如果不安全,那么可能会出现哪些问题?

那么,对于我的问题,你有什么要说的吗?

最佳答案

为什么你不能 jsonify 你的对象?如果你发送对象(我怀疑你可以,除非有一些中间件处理转换),它会腌制它并将其作为字符串发送,所以无论如何你总是可以 jsonify 任何对象。

例如,如果我想发送名为“Company”的对象的所有信息:

comp = Company.objects.all()[0]
info = {"name": comp.name, "url": comp.url, "created_on": datetime.strftime(comp.created_on, "%d-%m-%Y")}
return HttpResponse(json.dumps(info))

请考虑到您发送的所有内容都应该是字符串(或将自动转换为字符串的整数)。

在 JavaScript 中发送 json 后,您只需要获取对象并解析它:

obj = JSON.parse(响应)

就是这样!现在关于安全问题,我想到的唯一问题是您发送的信息可能不会像对象 ID 一样使用,除此之外不存在真正的安全风险。

现在,如果您想要发送渲染 View ,以便可以使用模板的强大功能,您可以这样做:

from django.template import Context, loader

context = Context({'user': UserObject, 'company': CompanyObject})
html_t = loader.get_template(HTML_TEMPLATE_PATH)
html = html_t.render(context)

return HttpResponse(html)

现在在你的ajax中你将收到渲染的模板,你可以立即使用它而不需要json。

关于jquery - Django 和 Ajax 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11419454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com