我正在研究最好的“设计模式”Web API。我目前正在使用Django作为我的Web框架。我创建了一个非ajax接口,导致整个页面在每个请求时重新加载。
现在,我开始将ajax合并到界面中。为了便于讨论,我需要添加API的两个示例功能如下
1)测试版页面:用户提供电子邮件地址。我想对服务器端进行ajax调用,看看它是否已存在于我的数据库中。我对此调用的初始设计是类似于
的视图函数def check_email(request):
if request.method == "POST":
# check db
# return JSON true/false
2)个人资料图片上传,新的个人资料图片已添加到您的网页而不会重新加载整页
据我所知,最好的方法是通过对视图函数的POST调用。然后,响应将返回JSON,然后我可以相应地注入到DOM中。
有人可以告诉我,如果我正在设计这个API吗?
注意:我已经检查了django-piston,它似乎也非常有用。
感谢
答案 0 :(得分:3)
是的,你似乎走在了正确的轨道上。一个狡辩:要检查数据库中是否存在电子邮件地址,理想情况下应该使用GET而不是POST,因为没有更新信息 - 您只是询问是否存在某些内容。
返回JSON的另一种方法是返回预渲染的HTML,您可以在适当的位置将其直接注入DOM。这样做的好处是你可以使用Django的模板机制来渲染现有的模板片段 - 唯一的区别是你单独渲染片段,而不是在整个HTML页面中包含/扩展它。
答案 1 :(得分:2)
你是正确的,但我会使用request.is_ajax()
检查它是否真的是ajax请求,以相应地返回响应。来自django request docs
如果请求是通过XMLHttpRequest发出的,则返回True,方法是检查字符串'XMLHttpRequest'的HTTP_X_REQUESTED_WITH标头。大多数现代JavaScript库都会发送此标头。如果你编写自己的XMLHttpRequest调用(在浏览器端),如果你想让is_ajax()工作,你必须手动设置这个头。
这将允许您为已禁用javascript的用户分隔返回值,从而允许他们仍然正确使用您的网站。如果您没有使用javascript库,请自行设置。