• day-59Django


    项目跟进

    服务端:

    ## 模态对话框修改班级
    def ajax_up_classes(request):
        classname = request.POST.get('classname')
        classid   = request.POST.get('classid')
        res = {"code":None, "data":None}
        try:
            import pymysql
            conn = pymysql.connect(host='127.0.0.1', user='root', password='123', db='s8day58', charset='utf8')
            cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
            sql = "update classes set name = %s where id=%s"
            cursor.execute(sql, (classname,classid))
            conn.commit()
            res["code"] = 10000
            res['data'] = "success"
    
            # return HttpResponse(json.dumps(res))                              序列化字典发送
            return JsonResponse(res)
    
        except Exception as e:
            res['code'] = 10001
            res['data'] = str(e)
            # return HttpResponse(json.dumps(res))
            return JsonResponse(res)
    
    
    
    ### 查看学生列表
    sqlhelper = SqlHelper()
    def students(request):
        sql = "select students.id, students.name as sname, students.class_id as cid, classes.name as cname from students left join classes on students.class_id = classes.id"
        students = sqlhelper.getAll(sql)                            #学生id  学生name  学生关联班级cid(班级id)  班级的name
    
        return render(request, "students.html", {"students": students})
    
    ## 增加学生
    def add_student(request):
        if request.method == 'GET':                                 #分流之数据发往html  
            sql = "select * from classes"
            classes = sqlhelper.getAll(sql)
            return render(request, "add_student.html", {"classes": classes})
        else:
            sname = request.POST.get('sname')
            classid = request.POST.get('classid')
            sql =  "insert into students (name, class_id) values (%s, %s)"
            sqlhelper.insert(sql, (sname, classid))
    
            return redirect('/students/')
    
    
    def up_student(request):
    
        if request.method == 'GET':
            id = request.GET.get('id')
            sql = "select students.id as sid, students.name as sname, students.class_id as cid, classes.name as cname from students left join classes on students.class_id = classes.id where students.id=%s"
            student = sqlhelper.getOne(sql, (id))
            sql = "select * from classes"
            classes = sqlhelper.getAll(sql)
    
            return render(request, 'up_student.html', {"student":student, "classes":classes})
    
        else:
            classid = request.POST.get('classid')
            stuname = request.POST.get('stuname')
            stuid = request.POST.get('stuid')
    
            sql = "update students set class_id = %s, name = %s where id=%s"
    
            sqlhelper.update(sql, (classid, stuname, stuid))
    
            return redirect('/students/')
    
    
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^classes/', classes),
        url(r'^add_class/', add_class),
        url(r'^modal_add_class/', modal_add_class),
        url(r'^del_class/', del_class),
        url(r'^up_class/', up_class),
        url(r'^ajax_up_classes/', ajax_up_classes),
    
    
        url(r'^students/', students),
        url(r'^add_student/', add_student),
        url(r'^up_student/', up_student),
    
    ]

    class.html:

    <div class="editshadow"></div>
    <div class="editcontent">
            <input type="hidden" id="clasid">
            班级名: <input type="text" name="ajaxclassname" id="ajaxclassname">
            <input type="button" value="提交" id="ajaxtijiao">
            <input type="button" id="cancel" value="取消">
            <span id="error"></span>
    </div>
    
    
    </body>
    <script
      src="http://code.jquery.com/jquery-1.12.4.js"
      integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
      crossorigin="anonymous"></script>
    
    <script>
        function xxxxx(){
            res = window.confirm("是否确定删除?");
            return res;
        }
        $('#btn').click(function () {
            $(".shadow").show();
            $(".content").show();
        });
        $('#cancel').click(function () {
            $(".shadow").hide();
            $(".content").hide();
        });
    
        $('.ajax_class_modal').click(function () {
            $('.editshadow, .editcontent').show();
           
            var tds = $(this).parent().prevAll();        #1. 获取当前的标签 $(this) 2. 获取他爹 $(this).parent() 3. 找 大爷和二爷  $(this).parent().prevAll()
            var classname = $(tds[0]).text();            #注:班级是0 id 是1
            var classid = $(tds[1]).text();
    
            $('#ajaxclassname').val(classname);
            $('#clasid').val(classid);                    #创建一个长链接储存的容器(存放id)
    
        });
    
        $('#tijiao').click(function () {
            $.ajax({
                type: "POST",
                url : "/modal_add_class/",
                data:  {"classname":$('#classname').val()},
                success: function (data) {
                    if(data == 'ok'){
                        alert('添加成功!');
                        window.location.href = '/classes/';
                    }else{
                        alert('添加失败!');
                        $('#error').text(data)
                    }
    
                }
            })
        });
    
        $('#ajaxtijiao').click(function () {
            var classname = $('#ajaxclassname').val();
            var clasid = $('#clasid').val();
    
            $.ajax({
                type : "POST",
                url : '/ajax_up_classes/',
                data: {"classname":classname, "classid":clasid},
                success : function (data) {
                  
                    res = JSON.parse(data);                            #js反序列化:
                    if (res['code'] == 10000){
                        //widnow.location.href = '/classes/';
                        window.location.reload();
                    }*/
                    console.log(data);
                    //console.log(data['code']);
    
                }
            })
    
        })
    
    </script>
    </html>

    add_student.html:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
    </head>
    <body>
    <h2>添加学生</h2>
    <form action="/add_student/" method="post">
        学生名称: <input type="text" name="sname"><br>
        班级名称:
        <select name="classid" id="">
           {% for item in classes %}
               <option value="{{ item.id }}">{{ item.name }}</option>        发往服务器的是id,方便数据库添加
           {% endfor %}
        </select>
        <input type="submit"  value="提交">
    </form>
    
    </body>
    </html>

    up_students.html:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
    </head>
    <body>
    <h2>更新班级</h2>
    <form action="/up_student/" method="post">
        <input type="hidden" name="stuid" value="{{ student.sid }}">    # 服务器发来的学生id(get请求)再次返回服务器,方便数据库的更改(post请求)
        
        学生名称: <input type="text" name="sname" value="{{ students.sname }}">
        选择班级:
        学生姓名: <input type="text" name="stuname" value="{{ student.sname }}" > <br>
        选择班级:
        <select name="classid" id="">                                {#如果学生的班级cid等于班级的id,表示找到,展现出来,只是为了将选中的学生的班级展现到输入框(option之selected的选中),
                                                                      如果不是,就正常将id添加到name,方便返回服务器#}
                                                                    
            {% for item in classes %}
                {% if item.id == student.cid %}
                    <option value="{{ item.id }}" selected>{{ item.name }}</option>
                {%else%}
                     <option value="{{ item.id }}" >{{ item.name }}</option>
                {% endif %}
            {% endfor %}
        </select>
        <input type="submit"  value="提交">
    </form>
    
    </body>
    </html>

    补充常见表单

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
    </head>
    <body>
    
    <form action="http://127.0.0.1:8888/" method="post">
        姓名:<input type="text" name="username"> <br>                      #没有name url没有显示,后台也无法拿到数据
        密码:<input type="password" name="pwd"> <br>
        爱好: <input  type="checkbox" name="hobby" value="football"> 足球
        <input  type="checkbox" name="hobby" value="basetball"> 蓝球            #复选框必须要有value,服务器取值的依据
         <input  type="checkbox" name="hobby" value="yumaoqiu"> 羽毛球 <br>
        性别: <input type="radio" name="gender" value="male" checked>男         #checked默认选中
        <input type="radio" name="gender" value="female">女 <br>                #复选框必须要有value,且name值必须一样,复选框也一样
    
        <select name="city">
              <option value="bj">北京</option>
            <option value="tj" selected>天津</option>
            <option value="hb">河北</option>
            <option value="sd">山东</option>
            <option value="nm">内蒙</option>
        </select><br>
    
        <textarea cols="30" rows="50" name="mytext">
    
        </textarea>
    
    
    
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>

    补充

    json:

    第一种方式交互:
      后台返回的格式:

        return HttpResponse(json.dumps(res))

      前台js反序列化:
        res = JSON.parse(data);

      前台js的序列化:
        JSON.stringify(res)


    第二种方式:

      后台返回的格式:
        return JsonResponse((res))        # 相当于使用了json.dumps()

      前台:
        console.log(data)            # data 已经反序列化好的字典

    页面跳转两种方式:
      widnow.location.href = '/classes/';        # 跳转页面
      window.location.reload();           # 刷新当前页面

    if..else模板:
      {% if item.id == student.cid %}
        <option value="{{ item.id }}" selected>{{ item.name }}</option>
      {%else%}
        <option value="{{ item.id }}" >{{ item.name }}</option>
      {% endif %}

    DOM
      DOM0:

         js事件绑定到标签里面
        <a href="https://www.baidu.com" onclick="return del();">点击</a>

        function del(){
          res = window.confirm('是否确认删除?');          confiem返回的是ture或flase
          return res;       
        }

        onclick依据收到的true或flase,来判断是否执行(比如阻止a标签的页面跳转)

      DOM1:
        <a href="https://www.baidu.com" id="mya">点击</a>
      原生js:
        var a = document.getElementById('mya') ;         获取到a标签
        a.onclick = function () {
          res = window.confirm('是否确认删除?');
          return res;
        }
      jquery方法:
        $('#mya').click(fucntion(){
          res = window.confirm('是否确认删除?');
          return res;
        })

     注:如果想要绑定多个相同的标签的时候, 不要用id选择器, 要用class类别选择器

      否则发生第一个生效,其他不生效

  • 相关阅读:
    Go微服务全链路跟踪详解
    让Windows加入域的PowerShell
    关掉Windows Firewall的PowerShell
    修改IP地址的PowerShell
    如何得知当前机器上安装的PowerShell是什么版本的?
    如何在Vblock里配置Boot from SAN
    使用MDS Switch基本命令的一个例子
    [转贴]SSL工作原理
    [转贴] 数字证书及 CA 的扫盲介绍
    什么是Copy-Only Backup? 为什么要用它?
  • 原文地址:https://www.cnblogs.com/klw1/p/11172423.html
Copyright © 2020-2023  润新知