zoukankan      html  css  js  c++  java
  • Python Day 57 Django框架、学生管理系统迭代三、json数据处理方式、前台布局管理(资源链接地址)、母版和子板、Django初识cookie

      #学生管理系统迭代三

    前面版本完成了
    1、学生表:
            新url方式增删改查
            模态对话框ajax方式完成增更
    2、教师表:
            新url方式增删改查
            模态对话框ajax方式完成增更
    3、学生表:
            新url方式增删改查
    
    这个版本:
    1、学生表:
            模态对话框ajax方式完成增改
    2、教师表:
            教师表从新做,因为之前教师表只是显示教师id和name,所以查询教师表时要看到班级列表,要连表查询了
         查询功能:
            获取多个值: classid = request.POST.getlist('classid')
         增加功能:
            ### 1. tname需要添加到teacher表中 最后一个lastrowid
              ### 2. teacher2class (lastrowid,  2), (lastrowid, 3), (lastrowid, 7)  ====> executeMany()
            核心代码:
             
    sql = "insert into teacher(name) values(%s)"
             teacherlastid =Sqlmanager().add_num(sql, (teachername,))
             for cid in classid:
                sql = "insert into teacher2class(tid,cid) values(%s,%s)“
                sqlmanager.add_num(sql,(teacherlastid,cid))
          更新:
            更新教师所教的班级,也要罗列出所有班级,select选用
            
    <form action="/up_teacher/" method="post">
              
    <input type="hidden" name="teacher_id" value={{ teacher_id }}>
              
    教师名称:<input type="text" name="teachername" value={{ teachername }}><br>
              
    班级名称:
                  
    <select name="classid" id="" multiple>
                    
    {% for item in classes %}
                    
    <option value="{{ item.id }}">{{ item.name }}</option>
                    
    {% endfor %}
                  
    </select>
                  
    <input type="submit" value="提交">
          
            </form>
    3、后台管理页面布局
        这里涉及Django中母版和子板、继承关系、bootstrap框架的运用、
    4、Django框架中cookie使用
        参数、

      ##前端对后端传过来的json数据处理方式

    #json数据处理三种方式(前面说了两种)
    1、直接对数据进行反序列化得到字符串
        json.dumps(data)
    2、后端直接使用Django提供的JsonResponse,自动处理序列化的数据
    
    3、在ajax中:
        dataType : "json",   作用相当于  JSON.parse()
        查询网址:http://jquery.cuishifeng.cn/jQuery.Ajax.html
    
    
    #在更新学生表时,班级下拉框默认选中当前所在班级
    方法1:通过判断 核心代码如下
        选择班级:
        <select name="classid" id="">
        {% for item in classes %}
            {% if student.cid == item.id  %}
                    <option value="{{ item.id }}" selected>{{ item.name }}</option>
            {% else %}
                    <option value="{{ item.id }}">{{ item.name }}</option>
            {% endif %}
    
        {% endfor %}
    方法2:通过后台传到前台的数据中获取到班级的id,然后根据id直接拿到默认的当前班级名(核心代码)
    自定义一个属性
    <td classid="{{ item.cid }}">{{ item.cname }}</td>
    {#得到班级id#}
            var clsid = $(stu[0]).attr('classid');
    固定默认班级对应的名称
     $('.classid').val(clsid)

       ##前端布局管理(资源链接地址)

    #前端设计资源库(常用)
    1、http://webcolor.chrafz.com/  取色库
    2、http://www.fontawesome.com.cn/faicons/ 图标库
        图标库的话,要下载到本地,拷贝到项目中引用即可
    3、https://www.bootcss.com/    bootstrap框架
        前端设计中可使用该框架中提供的诸多资源,直接拷贝
    4、https://www.runoob.com/bootstrap/bootstrap-forms.html  bootstrap框架
    
    5、http://jquery.cuishifeng.cn/   jquery框架中文版

    6、https://www.layui.com/demo/ 前端设计

    7、分页工具资源链接:dataTables (https://datatables.net)
    #注意 jquery文件必须放置在bootstrap.js之上

       ##Django模板语言中的母版和子板

    #传统做法:把所有代码拷贝到布局页面中
        缺点:
        1. 如果改某一块文字, 所有的页面都要点开改一遍
    
    母版:
        布局页面:layout.html
        三个占位符:
                内容占位符:
                {% block mycontent %}
    
                {% endblock %}
                css占位符:
                {% block mycss %}
    
                {% endblock %}
                js占位符:
                {% block myjs %}
    
                {% endblock %}      
    
    子板:
         继承母版: {% extends "layout.html" %}
         替换三个占位符:
                内容占位符:
               {% block mycontent %}
    
               {% endblock %}
                css占位符:
               {% block mycss %}
    
               {% endblock %}
               js占位符:
              {% block myjs %}
    
              {% endblock %}

      ##Django中操作cookie

    #cookie作用
    1. cookie是存在 客户端的 
    2. cookie用来验证用户登录验证的信息的
    3. cookie是可以被禁用掉
    
    #登陆成功之后, 设置cookie:
        obj = redirect('/classes/')
        obj.set_cookie("k1", "ndsjandjsanjdsanjdknsajdnsajndjsad")
        return obj
      
      后台获取cookie并判断:
        
    cookie = request.COOKIES.get('k1')
        
    if not cookie:
      
          return redirect("/login/")
    #cookie参数介绍  set_cookie(): key: cookie的key value: cookie的 key对应的值 max_age: cookie的失效时间 expires: 失效时间 path : cookie在哪个路径下生效 domain:域名
       secure=False: https httponly=False  : 只能在http中传递, 不能使用js获取cookie
    #补充加密的cookie set_signed_cookie(key, val, salt)
      js获取cookie:document.cookie
  • 相关阅读:
    python学习笔记(十五)-异常处理
    python学习笔记(十四)python实现发邮件
    python学习笔记(十三)-python对Excel进行读写修改操作
    python学习笔记(十二)-网络编程
    python学习笔记(十一)-python程序目录工程化
    python学习笔记(九)-函数2
    python学习笔记(八)-模块
    勿忘初心,勇往前行
    【tp6】解决Driver [Think] not supported.
    【Linux】LNMP1.6 环境报500错误解决方法
  • 原文地址:https://www.cnblogs.com/liangzhenghong/p/11189334.html
Copyright © 2011-2022 走看看