#学生管理系统迭代三

前面版本完成了
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

 

posted on 2019-07-15 15:47  Icon-Liang  阅读(239)  评论(1编辑  收藏  举报