• django-两种方式对单表的操作


    单表操作的内容

    我们这里对数据库单表的操作包含增删改查四部分

    具体链接数据库的方式我们是通过pymysql,当然你也可以用其他的。

    两种方式的概念与区别

    1、新url的方式

      主要就是我们每一次向后台提交并访问数据时,后台都会给我们

      跳转到一个新的界面,来完成我们的操作

    2、模态对话框的方式

      就是我们可以在页面不刷新的情况下,完成前后台数据之间的交互

    两者最大的区别就是新url肯定会刷新页面,而模态框可以让页面不刷新进行交互

    新url方式

    新url主要利用render和redirect对浏览器页面进行重新刷新,还有a标签进行页面跳转

      a:相当于重新向

      render:模板引擎渲染新页面

      redirect:重定向跳到另一个页面

    前端html页面

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>新url</title>
        <link rel="stylesheet" href="/static/css/reset.css">
        <link rel="stylesheet" href="/static/css/style.css">
        <style type="text/css">
            {#* { margin:0; padding:0; }#}
            
            li { list-style:none; }
            {#body { background-color: #222222; }#}
            .xs_ul { font-size:0; line-height:0; }
            .xs_ul li {display:inline-block; font-size:20px; line-height:20px; background:#fff;}
            .xs_ul li a {
                display:block;
                width:80px;
                text-align:center;
                padding:15px 30px;
                border:1px solid #000;
                color:#999; text-decoration:none;
            }
            .xs_box{
                position: absolute;
                right: 50px;
                top: 40px;
            }
        </style>
    </head>
    <body>
    <div class="xs_box">
        <ul class="xs_ul">
            <!--点击增加班级跳转到新url中去添加信息-->
        <li class="xs_li_13"><a href="/add_classes/">增加班级</a></li>
    </ul>
    </div>
    
    <section>
      <!--for demo wrap-->
      <h1>班级列表</h1>
      <div class="tbl-header">
        <table cellpadding="0" cellspacing="0" border="0">
          <thead>
            <tr>
              <th>ID</th>
              <th>班级名称</th>
              <th>操作</th>
            </tr>
          </thead>
        </table>
      </div>
      <div class="tbl-content">
        <table cellpadding="0" cellspacing="0" border="0">
          <tbody>
            {% for item in classes %}
                    <tr>
                        <td>{{ item.id }}</td>
                        <td>{{ item.name }}</td>
                        <!--a标签提交数据只能通过GET提交,所以删除或者更新我们想要携带数据只能通过?在后面进行拼接-->
                        <td><a href="/delete_classes/?id={{ item.id }}" onclick="return del()">删除</a>|
                            <a href="/update_classes/?id={{ item.id }}">更新</a>
                        </td>
                    </tr>
                {% endfor %}
          </tbody>
        </table>
      </div>
    </section>
    
    <div class="made-with-love">
      Made with
      <i></i> by
      <a target="_blank" href="#">hesujian</a>
    </div>
    
    </body>
    <script src="/static/js/jquery.min.js"></script>
    <script src="/static/js/index.js"></script>
    <script type="text/javascript" src="/static/js/jq_button.js"></script>
    <script type="text/javascript" src="/static/js/xs.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $(".xs_li_13").xs999(13);
        });
    </script>
    <script>
        function del() {
            let res = window.confirm("确认删除?");
            if (res == false) {
                return false;
            };
    
        }
    </script>
    
    </html>
    html页面

    后端路由管理并处理页面

    def classes(request):
        # 生成一个操作数据库
        sq = Classes()
        classes = sq.select_all()
        # 返回一个页面(html与数据库融合过后的)
        return render(request,"classes.html",{"classes":classes})
    
    def add_classes(request):
        if request.method == 'GET':
            # 如果请求方式是GET,那么说明是第一次按下添加操作
            # 返回一个新的静态页面让他去做添加操作
            return render(request,"add_class.html")
        else:
            # 如果请求方式是POST,那么说明是写好数据提交上来的
            classname = request.POST.get("classname")
    
            sq = Classes()
            sq.add_data(classname)
            # 返回的是一个重定向的页面
            return redirect("/classes/")
    
    def delete_classes(request):
        id = request.GET.get("id")
        sq = Classes()
        sq.delete_data(id)
        return redirect('/classes/')
    
    
    def update_classes(request):
        sq = Classes()
        if request.method == 'GET':
            id = request.GET.get("id")
            classes = sq.select_one(id)
            return render(request,'update_class.html',{'class':classes})
        else:
            id = request.POST.get("id")
            classname = request.POST.get("classname")
            sq.update_data(id,classname)
            return redirect('/classes/')
    
    
    # 写好路由关系映射
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^classes',classes),
        url(r'^add_classes',add_classes),
        url(r'^delete_classes', delete_classes),
        url(r'^update_classes', update_classes),
    
    ]
    后端页面代码

    模态对话框

    主要通过ajax与后台进行信息之间的交互,保证页面不进行刷新

    通过给特定标签绑定click事件,在事件中通过jq对象对页面进行一些简单的修改以及与后台的数据交互

    ajax参数

    $.ajax({
            type: 'post',    //向后台提交数据的方式
            url: "/model_add_classes/",  //提交给后台的url,因为这里是本站跳转,直接写uri就可以
            data: {"classname": $('.classname').val()},
            //data是向后台提交的数据,用字典的方式传送,后台通过key进行取值
            //success是后台成功返回信息的情况,对应函数里的参数就是后台发送的数据
            success: function (data) {
                if (data == 'ok') {
                    //刷新页面通过 window.location.href = '/model_classes';
                    window.location.href = '/model_classes';
                } else {
                    $('.tips').text("用户名不能为空");
                    {#console.log(data);#}
                }
                ;
            },
        });

    后台与ajax对应的代码

    def model_classes(request):
        sq = Classes()
        classes = sq.select_all()
        # 正常访问页面还是通过render渲染一个页面回去
        return render(request, "model_classes.html", {"classes": classes})
    
    def model_add_classes(request):
        # 前台通过ajax传过来的数据返回的是文本,通过 HttpResponse("ok")
        classname = request.POST.get("classname")
        if classname:
            sq = Classes()
            sq.add_data(classname)
            return HttpResponse("ok")
        else:
            return HttpResponse("notok")
    
    def check_classes(request):
        id = request.POST.get("id")
        sq = Classes()
        classes = sq.select_one(id)
        return HttpResponse(classes['name'])
    
    def model_update_classes(request):
        id = request.POST.get("id")
        classname = request.POST.get("classname")
        sq = Classes()
        sq.update_data(id,classname)
        return HttpResponse("ok")
    
    urlpatterns = [
        url(r'^model_classes',model_classes),
        url(r'^model_add_classes',model_add_classes),
        url(r'^check_classes',check_classes),
        url(r'^model_update_classes',model_update_classes)]
    后台代码
  • 相关阅读:
    【Loj146】DFS序3-树链剖分
    【BZOJ3083】遥远的国度- 树剖-换根
    树链剖分-树剖换根
    c++ 随机生成树
    【HAOI2015】树上操作-树链剖分
    centos修改dns
    HttpClient
    aiax跨域问题
    伪静态
    springboot父子项目
  • 原文地址:https://www.cnblogs.com/hesujian/p/11166614.html
Copyright © 2020-2023  润新知