【问题标题】:Live value availability checking using ajax in django在 Django 中使用 ajax 检查实时值可用性
【发布时间】:2015-10-20 09:07:21
【问题描述】:

我正在尝试使用 Django 表单中的 ajax 对数据库中值的可用性进行实时检查。我发现了许多 ajax 和 PHP 示例来检查用户名或电子邮件的可用性,但找不到纯 python 示例。有没有办法可以将元素的值传递给 python 脚本,然后查询数据库的可用性?

【问题讨论】:

  • 在服务器上接收 ajax 与不重定向的表单提交没有任何不同。具体问题是什么?
  • 如果服务器是 Python 的,Ajax 端不会有任何不同,那么为什么不能直接使用已有的示例呢?
  • 没有具体的问题,我只是想知道是否可以使用 python 脚本代替 PHP,仅此而已。

标签: jquery ajax django


【解决方案1】:

听起来这个问题更像是“什么是 ajax?”。这意味着它将使用 javascript 异步执行 POST 或 GET,而不是重新加载页面。您需要做的就是在 python 中创建一个页面,该页面将返回您要求的值并查询该页面。下面是一个使用 Flask 的例子:

from flask import Flask, jsonify
app = Flask(__name__)

@app.route('username-availability/')
def username-availability():
    return jsonify(available=True)

if __name__ == '__main__':
    app.run()

将其保存为 service.py 或其他内容并运行它。然后你可以,例如 jQuery 要求这个服务返回值(我们知道它永远是 True):

$.get( "localhost:5000/username-availability/", function( data ) {
  alert( data );
});

【讨论】:

    【解决方案2】:

    使用Django Rest Framework 创建一个 API 端点,然后使用 jQuery 访问它,例如 $.get(url)。手工编写自己的 api 端点是疯狂之路。

    【讨论】:

      【解决方案3】:

      感谢大家的建议。我决定尝试jquery validate 插件,使用远程选项传递 csrf 令牌以及 ajax 请求,它成功了!

      我希望有人觉得这很有用。
      注意:没有传递 csrf 令牌,我得到了一个禁止的错误!

      var token = $('input[name="csrfmiddlewaretoken"]').prop('value');  
      $('#inputform').validate({
          rules:{
             lots_name :{
                required:true,
                remote:{
                    url: 'check_lots', //django view 
                    type: 'post',
                    data: {'csrfmiddlewaretoken':token},
                }, // remote ends here
              }, // lots_name ends here
           }, // rules end here
           messages:{
               remote: jQuery.validator.format('{0} exists, pick another!') //custom message
          },// messages end here
      }) // validate ends here
      

      【讨论】:

      • 是的,如果您使用 django,您将不得不传递令牌或关闭该视图的 CSRF 检查(不推荐)。
      猜你喜欢
      • 2015-01-22
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多