zoukankan      html  css  js  c++  java
  • day-58Django

    项目

    做一个小型的学员管理系统


    班级表(classes):

    id name
    1 脱产8期
    2 脱产9期


    学生表(students):

    id name class_id (外键关联班级ID)

    1    李晨       1
    2    woge     1
    3   刘伟        2


    老师表(teacher):

    id   name
    1    zekai
    2    lxx
    3    eagon


    teacher2class(对应关系表):

    id tid(外键teacher) cid (外键classes)
    1      1     1
    2      1      2
    3      2      1

    单表(班级和老师表):

    - 查
    - 增

    - 删
    - 改

    一对多(学生表):

    - 增
    - 删
    - 改
    - 查


    多对多(teacher2class):

    - 增
    - 删
    - 改
    - 查

    服务端主逻辑

    from django.conf.urls import url
    from django.contrib import admin
    from django.shortcuts import HttpResponse, render, redirect
    
    ==================新url方式,增删改查================
    ### 查看
    def classes(request):
        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 = "select * from classes"
        cursor.execute(sql)
        classes = cursor.fetchall()
    
        return render(request, "classes.html", {"classes":classes})
    
    ### 添加  
    def add_class(request):                                             #分流获取
        if request.method == 'GET':
            return render(request, "add_class.html")
        else:
            classname = request.POST.get('classname')
            print(classname)
            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 = "insert into classes (name) values (%s)"
            cursor.execute(sql, (classname,))
            conn.commit()
    
            return redirect("/classes/")                                 #重定向
    
    ## 删除
    def del_class(request):
    
        id = request.GET.get('id')                                      # html拼接url,获取id方法
        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 = "delete from classes where id=%s"
        cursor.execute(sql, (id,))
        conn.commit()
    
        return redirect('/classes/')
    
    ## 修改
    def up_class(request):                                              #分流获取
        if request.method == 'GET':                
            id = request.GET.get('id')
            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 = "select * from classes where id=%s"
            cursor.execute(sql, (id,))
            classes = cursor.fetchone()
            print(classes)
    
            return render(request, "up_class.html", {"classid":classes['id'], "classname":classes['name']})
            
                                                      #往html传id和name  1.传id是为了,返回服务器的时候知道改哪个    2.传name为了让输入框有要修改之前的数据
                                                      #html那边建立一个隐藏的输入框,将id存放在里面,输入框就相当一个容器
            
            
        else:                                                       
            classname = request.POST.get('classname')
            id        = request.POST.get('classid')
            print(classname, id)
            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,id))
            conn.commit()
    
            return redirect('/classes/')
    
    =======================模态框==================================
    def modal_add_class(request):
        classname = request.POST.get('classname')
        print(classname)
    
        if not classname:
            return HttpResponse('nook')               #HttpResponse :浏览器走的http协议,所以可以往浏览器发数据
        else:
            ## 廉价数据库
            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 = "insert into classes (name) values (%s)"
            cursor.execute(sql, (classname,))
            conn.commit()
            return HttpResponse('ok')
    
    
    
    
    urlpatterns = [
     
        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),
    ]

    HTML主逻辑

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
        <style>
     .shadow {
                background-color: black;
                height: 1000px;
                position: fixed;                                #定位
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                opacity: 0.4;                                    #透明度
                z-index: 999;
                display:none
            }
            .content{
                background-color: white;
                width:500px;
                height: 300px;
                position: fixed;
                top: 100px;
                left: 500px;
                right: 200px;
                z-index: 1000;                                    #内容层调到上面
                display:none                                    #隐藏在页面中
            }
            #error{
                color: red;
            }
        </style>
    
    </head>
    <body>
        <h2>班级列表</h2>
        <a href="/add_class/">增加班级</a>                                            #跳转到路由对应关系(a标签跳转的是get方式)
        <button id="btn">模态对话框添加班级</button>
        <table border="1px">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>班级名称</th>
                    <th>操作</th>            
                </tr>
            </thead>
            <tbody>
                {% for item in classes %}                                            #遍历添加列表行数
                    <tr>
                        <td>{{ item.id }}</td>
                        <td>{{ item.name }}</td>
                        <td>
                            <a href="/del_class/?id={{ item.id }}">删除</a>|          #a标签将id数据传到后台的方法
                            <a href="/up_class/?id={{ item.id }}">更新</a>
                        </td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>
    
    <div class="shadow"></div>                                                        #遮罩层
    
    <div class="content">                                                            #内容层
    
            班级名: <input type="text" name="classname" id="classname">                #模态框局部刷新,必须用ajax
            <input type="button" value="提交" id="tijiao">
            <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>
        $('#btn').click(function () {                                                #显示模态框
            $(".shadow").show();
            $(".content").show();
        });
        $('#cancel').click(function () {                                            #隐藏模态框
            $(".shadow").hide();
            $(".content").hide();
        });
    
        $('#tijiao').click(function () {
            $.ajax({
                type: "POST",
                url : "/modal_add_class/",
                data:  {"classname":$('#classname').val()},                            #发往服务器的数据
                success: function (data) {                                            #data,服务器返回的数据
                    if(data == 'ok'){
                        alert('添加成功!');                                            #弹出提示信息
                        window.location.href = '/classes/';                            #浏览器的重定向
                    }else{
                        alert('添加失败!');
                        $('#error').text(data)                                        #往标签插入一条数据
                    }
    
                }
            })
        });
    
    
    </script>
    </html>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
    </head>
    <body>
    <h2>添加班级</h2>
    <form action="/add_class/" method="post">            输入框提交的方式是post
        班级名称: <input type="text" name="classname">    name=''是url查询的唯一依据
        <input type="submit"  value="提交">
    </form>
    
    </body>
    </html>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
    </head>
    <body>
    <h2>更新班级</h2>
    <form action="/up_class/" method="post">
        <input type="hidden" name="classid" value="{{ classid }}">
        班级名称: <input type="text" name="classname" value="{{ classname }}">
        <input type="submit"  value="提交">
    </form>
    
    </body>
    </html>

     

    补充:

    浏览器可以自定制请求头(比如验证)


    搜索hexo可以搭建博客


  • 相关阅读:
    GPS授时服务器(卫星同步时钟)科普小知识
    GPS和北斗卫星授时技术在时频领域的应用和发展
    NTP时间同步服务器(NTP时间服务器)在北京邮电大学的应用案例
    北斗时钟源(GPS网络时钟源)在校园网络应用
    NTP时钟源(GPS时间源)介绍与分析 安徽京准电子科技
    搭建ntp时间服务器并配置集群自动时钟同步
    GPS北斗网络时间源在内网域控制器上的设置方法
    肺炎疫情过后最想干的几件事
    提升苏州城市地位的几个建议
    江苏省如要打造一线城市,很简单!
  • 原文地址:https://www.cnblogs.com/klw1/p/11167563.html
Copyright © 2011-2022 走看看