django用jquery的ajax提交表单,中间件的CsrfViewMiddleware问题

 

首先要引入jquery文件。

 

<script src={% static 'jquery/jquery.min.js' %}></script>

注意这句是要添加到自己写的jquery脚本前边。

 

 

 

 

 

然后写一个简单的表单

<form method="post" id="formadd">
        {% csrf_token %}
        <label for="id_name">用户名</label>
        <input type="text" id="id_name"/>
        <label for = "id_password">密码</label>
        <input type="password" id="id_password"/>
        <button type="submit" id="submit" >提交</button>
    </form>


只有一个用户名和密码以及一个提交按钮的的简单表单 注意我这里的form的id是formadd  看起来非常简陋~

 

 

 

然后再添加我们的表单处理的jquery

如果你在settings里边没有注释掉

 

'django.middleware.csrf.CsrfViewMiddleware',


你的jquery里边需要添加上这句,详情参照自强学堂django ajax csrf

 

 

$.ajaxSetup({
                 data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
            });

然后整个jquery脚本,这里写的比较就简单主要突出与django的通信

<script src={% static 'jquery/jquery.min.js' %}></script>
    <script>
        $(document).ready(function(){
            $.ajaxSetup({
                 data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
            });
        $('#formadd').submit(function(){
                var name = $("#id_name").val();    //获得form中用户输入的name 注意这里的id_name 与你html中的id一致
                var password = $("#id_password").val();    //同上
               
                $.ajax({
                    type:"POST",
                    data: {name:name, password:password},
                    url: "{% url 'blog:comments_upload' %}", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致
                    cache: false,
                    dataType: "html",
                    success: function(result, statues, xml){
                        alert(result);      //成功时弹出view传回来的结果
                    },
                    error: function(){
                        alert("false");
                    }
                });
                return false;
            });

        });
    </script>


接下来写我们后端的view.py 中的后端处理函数

def comments_upload(request):
    if request.method == 'POST':
        print "it's a test"     #用于测试
        print request.POST['name']        #测试是否能够接收到前端发来的name字段
        print request.POST['password']     #用途同上

        return HttpResponse("表单测试成功")   #最后返会给前端的数据,如果能在前端弹出框中显示我们就成功了
    else:
        return HttpResponse("<h1>test</h1>")

由于有中文所以views.py 开头加上

 

 

 

 

#coding=utf8

最后urls.py中加一条,(注意这是我的app中的urls.py)

 

 

url(r'^comments_upload/$', comments_upload, name='comments_upload'),

然后fire your server

 

测试

 

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
it's a test
test
testpassword

后端console成功打印出我们的name和password字段

 

其实我们在这个views.py 中可以做许多事情,比如把这个name和password字段进行验证了,或者存入数据库,然后返回一段真正的html代码,局部替换前端的页面,达到异步传输的效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值