python40-ajax请求实例

1.配置静态变量

STATICFILES_DIRS=(
    os.path.join(BASE_DIR,'static'),
)
复制代码

2.url.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('students/', views.students),
    path('add_student/', views.add_student),
    path('del_student/', views.del_student),
    path('edit_student/', views.edit_student),
]
复制代码

3.表结构

from django.db import models
from django.db import models

class Classes(models.Model):
    """
    班级表,男
    """
    title = models.CharField(max_length=32)
    m = models.ManyToManyField("Teachers")

class Teachers(models.Model):
    """
    老师表,女
    """
    name = models.CharField (max_length=32)

class Student(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    gender = models.BooleanField()
    cs = models.ForeignKey(Classes,on_delete=models.CASCADE,)
复制代码

4.views.py

from django.shortcuts import render,HttpResponse
from app01 import  models
import json
# Create your views here.
def students(req):
    cls_list=models.Classes.objects.all()
    stu_list=models.Student.objects.all()
    # models.Student.objects.create(username="峰峰",age=15,gender=True,cs_id=3)
    # models.Student.objects.create(username="小明",age=19,gender=False,cs_id=2)
    # models.Student.objects.create(username="蓉蓉",age=22,gender=True,cs_id=1)
    return render(req,"students.html",{"stu_list":stu_list,"cls_list":cls_list})
def add_student(req):
    response={"status":True,"message":None,'data':None}
    try:
        print(req.POST)
        u = req.POST.get('username')
        a = req.POST.get('age')
        g = req.POST.get('gender')
        c = req.POST.get('cls_id')
        obj=models.Student.objects.create(
            username=u,
            age=a,
            gender=g,
            cs_id=c
        )
        response["data"]=obj.id
    except Exception as e:
        response["status"]=False
        response["message"]="用户输入错误"

    reuslt=json.dumps(response,ensure_ascii=False)
    return HttpResponse(reuslt)

def del_student(req):
    ret={'status':True}
    try:
        nid=req.GET.get("nid")
        models.Student.objects.filter(id=nid).delete();
    except Exception as e:
        ret['status']=False
    return HttpResponse(json.dumps(ret))
def edit_student(req):
    response={'code':1000,'message':None}
    try:
        nid= req.POST.get('nid')
        user=req.POST.get('user')
        age=req.POST.get('age')
        gender=req.POST.get('gender')
        cls_id=req.POST.get('cls_id')
        models.Student.objects.filter(id=nid).update(
            username=user,
            age=age,
            gender=gender,
            cs_id=cls_id
        )
    except Exception as e:
        response['code']=1001
        response['message']=str(e)
    return HttpResponse(json.dumps(response))
复制代码

5.student.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>students</title>
    {#   <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">#}
    <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
    <link rel="stylesheet" href="/static/plugins/font-awesome/css/font-awesome.css">
    <style>
        .icon {
            padding: 0 5px;
        }
    </style>
</head>
<body>
<div class="container">
    <div style="padding: 20px 0px">
        <a class="btn btn-primary" id="addBtn">添加</a>
        <a class="btn btn-danger">删除</a>
    </div>
    <div>
        <table class="table table-bordered table-striped">
            <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>班级</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody id="tb">

            {% for row in stu_list %}
                <tr nid="{{ row.id }}">
                    <td na="nid">{{ row.id }}</td>
                    <td na="user">{{ row.username }}</td>
                    <td na="age">{{ row.age }}</td>
                    <td na="gender">{{ row.gender }}
{#                        {% if row.gender %}#}
{#                            男#}
{#                        {% else %}#}
{#                            女#}
{#                        {% endif %}#}
                    </td>
                    <td na="cls_id" cid="{{ row.cs_id }}">{{ row.cs.title }}</td>
                    <td>
                        <a class="glyphicon glyphicon-remove icon delrow"></a>
                        <a class="fa fa-pencil-square-o icon editrow"></a>
                    </td>
                </tr>
            {% endfor %}


            </tbody>
        </table>
    </div>

</div>

<!-- Modal -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
                </button>
                <h4 class="modal-title" id="myModalLabel">创建学生</h4>
            </div>
            <div class="modal-body">

                <form id="fm" class="form-horizontal">
                    <div class="form-group">
                        <label for="username" class="col-sm-2 control-label">姓名</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="username" placeholder="姓名">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">年龄</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="age" placeholder="年龄">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">性别</label>
                        <div class="col-sm-10">
                            <label class="radio-inline">
                                <input type="radio" name="gender" value="1"> 男
                            </label>
                            <label class="radio-inline">
                                <input type="radio" name="gender" value="0"> 女
                            </label>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">班级</label>
                        <div class="col-sm-10">
                            <select class="form-control" name="cls_id">
                                {% for row in cls_list %}
                                    <option value="{{ row.id }}">{{ row.title }}</option>
                                {% endfor %}
                            </select>
                        </div>
                    </div>
                </form>

            </div>
            <div class="modal-footer">
                <span id="errorMsg" style="color: red"></span>
                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                <button type="button" class="btn btn-primary" id="btnSave">保存</button>
            </div>
        </div>
    </div>
</div>

<div class="modal fade" id="delModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="alert alert-danger" role="alert">
            <h3>删除学生信息?</h3>
            <div>...<input style="display: none;" type="text" id="delNid"/></div>
            <div>
                <button id="cancelConfirm" type="button" class="btn btn-default">取消</button>
                <button id="delConfirm" type="button" class="btn btn-danger">确定</button>
            </div>
        </div>
    </div>
</div>

<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
                </button>
                <h4 class="modal-title" id="myModalLabel">编辑学生</h4>
            </div>
            <div class="modal-body">

                <form id="fm" class="form-horizontal">
                    <input type="text" name="nid" style="display: none">

                    <div class="form-group">
                        <label for="username" class="col-sm-2 control-label">姓名</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="user" placeholder="姓名">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">年龄</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="age" placeholder="年龄">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">性别</label>
                        <div class="col-sm-10">
                            <label class="radio-inline">
                                <input type="radio" name="gender" value="1"> 男
                            </label>
                            <label class="radio-inline">
                                <input type="radio" name="gender" value="0"> 女
                            </label>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">班级</label>
                        <div class="col-sm-10">
                            <select class="form-control" name="cls_id">
                                {% for row in cls_list %}
                                    <option value="{{ row.id }}">{{ row.title }}</option>
                                {% endfor %}
                            </select>
                        </div>
                    </div>
                </form>

            </div>
            <div class="modal-footer">
                <span id="errorMsg" style="color: red"></span>
                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                <button type="button" class="btn btn-primary" id="btnEditSave">保存</button>
            </div>
        </div>
    </div>
</div>


<script src="/static/js/jquery-3.1.1.js"></script>
<script src="/static/plugins/bootstrap-3.3.7-dist/js/bootstrap.js"></script>

<script>
    $(function () {
        bindEvent();
        bindSave();
        bindDel();
        bindDeldelConfirm();
        bindcancelConfirm();

        bindEdit();
        bindEditConfirm();


    });
    function bindEditConfirm(){
        var postData={};
        $("#btnEditSave").click(function(){
            $("#editModal").find('input,select').each(function () {
                var v = $(this).val();
                var n = $(this).attr("name");
                if (n == "gender") {
                    if ($(this).prop("checked")) {
                        postData[n] = v;
                    }
                } else {
                    postData[n] = v;
                }

            });
            console.log(postData);
            $.ajax({
                url:'/edit_student/',
                type:'POST',
                data:postData,
                dataType:'JSON',
                success:function(arg){
                    if(arg.code==1000){
                        window.location.reload();
                    }else{
                        alert(arg.message);
                    }
                }
            })
        })
    }
    //编辑绑定事件
    function bindEdit(){
        $('#tb').on('click','.editrow',function(){
            $('#editModal').modal('show');
            //获取当前行的数据
            //将数据赋值到对应的对话框的指定位置

            $(this).parent().prevAll().each(function(){
                var v =$(this).text();
                var n = $(this).attr('na');

                if(n=='cls_id'){
                    var cid=$(this).attr('cid');
                    $('#editModal select[name="cls_id"]').val(cid);
                } else if(n=='gender'){
                    // v=True
                    if(v=='True'){
                        $('#editModal :radio[value="1"]').prop('checked',true);
                    }else{

                        $('#editModal :radio[value="0"]').prop('checked',true);
                    }
                } else{

                    $("#editModal input[name='"+n+"']").val(v);
                }
            })


        })
    }
    function bindcancelConfirm(){
        $('#cancelConfirm').click(function(){
            $('#delModal').modal('hide');
        })
    }
    function bindDeldelConfirm(){
        $('#delConfirm').click(function(){
            var rowId=$('#delNid').val();
            $.ajax({
                url:'/del_student/',
                type:'GET',
                data:{'nid':rowId},
                success:function(arg){
                    var dict=JSON.parse(arg);
                    if(dict.status){
                        $('tr[nid="'+rowId+'"]').remove();
                    }
                    $('#delModal').modal('hide');
                }
            })
        })
    }
    /*
        事件委托........
     */
    function bindDel(){
        $('#tb').on('click','.delrow',function(){
            $('#delModal').modal('show');
            //获取当前行的id
            var rowId=$(this).parent().parent().attr("nid");
            //
            $('#delNid').val(rowId);
        })
    }

    function bindEvent() {
        $('#addBtn').click(function () {
            $('#addModal').modal('show');
        })
    }

    function bindSave() {
        var postData = {};
        $("#btnSave").click(function () {
            $("#addModal").find('input,select').each(function () {
                var v = $(this).val();
                var n = $(this).attr("name");
                if (n == "gender") {
                    if ($(this).prop("checked")) {
                        postData[n] = v;
                    }
                } else {
                    postData[n] = v;
                }

            });
            {#console.log(postData);#}
            $.ajax({
                url: '/add_student/',
                type: 'POST',
                data: postData,
                success: function (arg) {
                    //arg是字符串
                    //转为字典对象
                    var dict = JSON.parse(arg);
                    //将字典对象转为字符串
                    {#var str_dict=JSON.stringify(dict);#}
                    if (dict.status) {
                        /*
                        postData = {
                            username:'fengfeng',
                            age:18,
                            gender:1
                            cls_id:2
                        }
                        自增id
                        dict.data
                         */

                        createRow(postData,dict.data);
                        $('#addModal').modal('hide');
                        {#window.location.reload();#}
                    } else {
                        $("#errorMsg").text(dict.message);
                    }
                }
            })
        })

    }
    //通过生成的方式
    function createRow(postData,nid){
        var tr=document.createElement('tr');
        $(tr).attr('nid',nid);

        var tdid=document.createElement('td');
        tdid.innerHTML=nid;
        $(tr).append(tdid);

        var tdUser=document.createElement('td');
        tdUser.innerHTML=postData.username;
        $(tr).append(tdUser);

        var tdAge=document.createElement('td');
        tdAge.innerHTML=postData.age;
        $(tr).append(tdAge);

        var tdGender=document.createElement('td');
        if(postData.gender =="0"){
            tdGender.innerHTML="女";
        } else{
            tdGender.innerHTML="男";
        }
        $(tr).append(tdGender);

         var tdClass=document.createElement('td');
         var text =$('select[name="cls_id"]').find('option[value="'+postData.cls_id+'"]').text();
         tdClass.innerHTML=text;
         $(tr).append(tdClass);

         var tdHandle='<td>\n' +
             '                        <a class="glyphicon glyphicon-remove icon delrow"></a>\n' +
             '                        <a class="fa fa-pencil-square-o icon editrow"></a>\n' +
             '                    </td>';
         $(tr).append(tdHandle);



         $('#tb').append(tr);

    }



</script>

</body>
</html>
复制代码

注意

(1) ajax中的参数 traditional,当数据中value为数组,需要设置这个参数. 用传统的方式来序列化数据,那么就设置为true。 (2) ajax中的dataType参数可以设置为JSON.此时直接返回的数据为对象。

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值