Django之学员管理三

Django之学员管理三

  web框架的本质:

    本质是客户端和服务端的交互。用socket实现。

    socket客户端(浏览器)

      2、发送ip和端口,http://www.baidu.com:80/index/   (http://www.baidu.com:80) 为ip和端口,(/index/ )是url。客户端往服务端发送请求时,是要分post和get两种请求方式。

      4、接受响应,普通的响应就是正常的拿到响应体浏览器是处理呈现,而重定向是要再发一次http请求,进行一次跳转才可以。

    socket服务端(服务器)

      1、服务端socket先运行起来进行监听 while循环来持续监听ip和端口,等待客户连接。

      3、接受请求,处理并返回相应的结果,返回的本质是一堆字符串。返回的有响应头和响应体。还有一种响应方式,是重定向返回,在重定向返回里是没有响应体的,只有响应头。在响应头里有一区别是多了一个location,在location里定义要响应跳转的url。

  django的web框架:

    a、创建project:django-admin startproject mysite

    b、配置:模板,静态文件,csrf

    c、路由关系:url-》函数

    d、视图函数:

        def index(request):

      获取的:request.method

          request.POST 

          request.GET

      返回的:return redirect("url")

          return render(request, "模板路径", { } )

          return HttpResponse("字符串")

    e、模板渲染:{% for %} 和 {% if %}

  Ajax的本质流程

    基于jQuery实现的ajax,

    $.ajax({

      url:"",

      type:"",

      data:{k1:"v1"},

      success:function(arg){

      }

    })

    小知识点:在onclick的前面加一个href的url,是先执行onclick的事件,在跳转到href的url。但是如何在ajax里的对应事件执行完,返回return False,那么在href里的url就不在执行啦。这个方法用在form表单中。

  对班级表实现ajax方式的编辑删除操作(对话框的单表的编辑操作):

    注意点:一定要注意前后端的标签id是否一致,和$(#' ') 里面要拿取的标签id前的#符号,否则会找不到值,并且前端不会有报错。

    前端操作代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>classes</title>
    <style>
        .hide{
            display: none;
        }
        .shadow{
            position: fixed;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            background-color: black;
            opacity: 0.4;
            z-index: 999;
        }
        .modal{
            z-index: 1000;
            position: fixed;
            left: 50%;
            top: 50%;
            height: 300px;
            width: 400px;
            background-color: white;
            margin-left: -200px;
            margin-top: -150px;
        }
    </style>
</head>
<body>
    <h1>classes_list</h1>
    <div>
        <a href="/add_class/">添加</a>
        |
        <a οnclick="showModal();">对话框添加</a>
    </div>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>班级名称</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            {% for item in class_lsit %}
                <tr>
                    <td>{{ item.nid }}</td>
                    <td>{{ item.title }}</td>
                    <td>
                        <a href="/del_class/?nid={{ item.nid }}">删除</a>
                        |
                        <a οnclick="modelEdit(this);">对话框编辑</a>
                        |
                        <a href="/edit_class/?nid={{ item.nid }}">编辑</a>
                    </td>
                </tr>
            {% endfor %}
        </tbody>
    </table>

    <div id="shadow" class="shadow hide"></div>

    <div id="modal" class="modal hide">
        <p>添加班级:<input id="title" type="text" name="title" placeholder="班级名称"></p>
        <input type="button" value="submit" οnclick="AjaxSend();"/>
        <input type="button" value="cancel" οnclick="cancleModal();"/><span id="errormsg"></span>
    </div>

    <div id="editModel" class="modal hide">
        <h3>编辑框</h3>
        <p>
            <input id="editId" type="text" name="nid" style="display: none" />
            <input id="editTitle" type="text" name="title" />
        </p>
        <input type="button" value="submit" οnclick="editAjaxSend();" /><span id="errormsg"></span>
        <input type="button" value="cancel" οnclick="cancleModal();" />
    </div>
    <script src="/static/jquery-1.12.4.js"></script>
    <script>
        function showModal() {
            document.getElementById("shadow").classList.remove("hide");   //找到遮罩层,并去挑遮罩层
            document.getElementById("modal").classList.remove("hide");
        }

        function cancleModal() {
            document.getElementById('shadow').classList.add('hide');
            document.getElementById('modal').classList.add('hide');
            document.getElementById('editModel').classList.add('hide');
        }

        function AjaxSend(){
            $.ajax({
                url:'/modal_add_classes_ajax/',   //往哪里提交
                type:'POST',                      //以什么方式提交
                data:{"title":$("#title").val()},  //拿到全段输入的值
                success:function (data) {
                    //当服务端处理完成后,返回数据时,该函数自动调用
                    //data是服务端返回的值
                    console.log(data);
                    if(data=="ok"){
                        location.href='/classes/'; //指定提交成功后跳转到哪里
                    }else {
                        $('#errormsg').text(data);
                    }
                }
            })
        }

        function modelEdit(ths) {
            document.getElementById("shadow").classList.remove("hide");   //找到遮罩层,并去挑遮罩层
            document.getElementById("editModel").classList.remove("hide");
            /*
            1、获取当前点击标签
            2、获取当前标签的父标签,再找其上方标签
            3、获取当前行班级名称,赋值到编辑对话框中
            */
            var row = $(ths).parent().prevAll()   //$(ths)是获取当前标签。  .parent是当前父标签。  .prevAll是当前级标签的上面所有的标签。
            console.log(row);
            var content = $(row[0]).text();        //用列表取值的方式获取title。 .text是转成文本信息。
            $('#editTitle').val(content);           //找到title给他赋值给val里。

            var contentId = $(row[1]).text();
            $('#editId').val(contentId);
        }

        function editAjaxSend() {
            var nid = $('#editId').val();      //提交操作里前端获取id
            var content = $('#editTitle').val();     // 提交操作,前端获取新输入的值
            console.log(nid,content);
            $.ajax({
                url:'/modal_edit_classes_ajax/',
                type:"POST",
                data:{"nid":nid,"content":content},
                success:function (arg) {
                    // arg字符串类型
                    // JSON.parse(字符串) => 对象
                    // JSON.stringify(对象) => 字符串
                    arg = JSON.parse(arg);
                    if(arg.status){
                        //location.href="/classes/"     //这个是跳转
                        location.reload();      //这个是刷新
                    }else{
                        alert(arg.message);
                    }
                }
            })
        }

    </script>
</body>
</html>

  views.py 的对应函数:

  

def modal_edit_classes_ajax(request):
    ret = {"status":True,"message":None}   #当try代码块出现问题,可以用这种方式收集错误信息
    try:
        nid = request.POST.get("nid") # 拿id
        print(nid)
        content = request.POST.get("content") #拿内容
        print(content)
        sqlheper.modify("update classes set title=%s where nid=%s",[content,nid,])
        print("1")
    except Exception as e:
        ret['status'] = False
        ret['message'] = "处理异常"
        # ret['message'] = str(e)   #异常对象的内容,用字符串的形式拿到。
    return HttpResponse(json.dumps(ret)) #用json.dumps的方法使的json将数据转成字符串,在发给前端

  

 

转载于:https://www.cnblogs.com/george92/p/11010697.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值