day19 Models补充+缓存+信号+序列化+分析抽屉页面
参考链接:
http://www.cnblogs.com/wupeiqi/articles/5237704.html
http://www.cnblogs.com/wupeiqi/articles/5246483.html
s16day19课堂笔记:
上节回顾:
    1. 分页
        - Django内置
        - 自定义分页
    2. Form验证
        - 对用户请求数据验证(Ajax,Form)
Ajax        -> Form验证(上次提交内容保留)(验证)
        Form表单    -> Form验证(验证,保留上次内容)
- 类
              class Foo(forms.Form):
                  xx1 = xx(定制插件)
                  xx2 = xx()
                  xx3 = xx()
        - 使用:
   obj = Foo()  -> 用于生成HTML(内容为空)
              obj = Foo(request.POST)
              if obj.is_valid():
                  obj.cleaned_data
                  # models.XX.objects.create(**obj.cleaned_data)
              else:
                  obj.errors['xx1'][0]
3. 中间件
4. Models补充
          单表操作:
              curd
          多表操作:
              ...
          selete_realated()
user_list = Models.UserInfo.objects.all()
  for row in user_list: 10
                  print(row.username,row.email,row.part_id,row.part.title)
==》 11次
user_list = Models.UserInfo.objects.all().selete_realated('part',‘usertype’) # FK字段名称
  for row in user_list: 10
                  print(row.username,row.email,row.part_id,row.part.title)
              ==> 1次跨表操作
          prefetch_realated()
              user_list = Models.UserInfo.objects.filter(id=1).prefetch_realated('part',‘usertype’,"group__xxx") # FK字段名称
  # 第一句:Models.UserInfo.objects.all()[0:10]
              # part_id = [1,]
              # 第二句:Models.Part.objects.filter(id__in=part_id)
              # usertype_id = [2,]
              # 第三句:Models.UserType.objects.filter(id__in=usertype_id)
  for row in user_list: 10
                  print(row.username,row.email,row.part_id,row.part.title)
==> 2次单表操作
1. Models补充
    性能相关:
          selete_realated
          prefetch_realated
    其他:
          models.UserInfo.objects.all()
          u = models.UserInfo.objects.all().only('id','name')
          u = models.UserInfo.objects.all().defer('name')
  models.UserInfo.objects.values('id')
          models.UserInfo.objects.values_list('id')
2. 缓存
    配置:
        文件: 路径
        内存: 变量名称
        数据库: 表明
        缓存:IP端口
使用:
          a. 全站缓存
          b. 单独试图函数
          c. 局部模板
      **自定义:利用中间件/装饰器/simple_tag/自定义操作**
3. 退钱
    def test(request):
    return render(request,'test.html',{'n1': 123,'n2': "root"})
<h1>{{ n1 }}</h1>
    <h1>{{ n2 }}</h1>
<script>
        alert({{ n1 }});
        alert("{{ n2 }}");
    </script>
3. 信号
        Model signals
            pre_init                    # django的modal执行其构造方法前,自动触发
            post_init                   # django的modal执行其构造方法后,自动触发
            pre_save                    # django的modal对象保存前,自动触发
            post_save                   # django的modal对象保存后,自动触发
            pre_delete                  # django的modal对象删除前,自动触发
            post_delete                 # django的modal对象删除后,自动触发
            m2m_changed                 # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
            class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
        Management signals
            pre_migrate                 # 执行migrate命令前,自动触发
            post_migrate                # 执行migrate命令后,自动触发
        Request/response signals
            request_started             # 请求到来前,自动触发
            request_finished            # 请求结束后,自动触发
            got_request_exception       # 请求异常后,自动触发
        Test signals
            setting_changed             # 使用test测试修改配置文件时,自动触发
            template_rendered           # 使用test测试渲染模板时,自动触发
        Database Wrappers
            connection_created          # 创建数据库连接时,自动触发
# 内置信号(自动触发)
          def fffffff(sender, **kwargs):
              print("信号被触发",sender,kwargs)
          def fffffff1(sender, **kwargs):
              print("信号被触发",sender,kwargs)
  pre_delete.connect(fffffff)
          pre_delete.connect(fffffff1)
4. 序列化
普通请求 -> render渲染
      Ajax     -> render生成局部HTML     ***局部数据:应用单一
      Ajax     -> HttpResponse('数据')   ***接口:为别人提供数据***
1. render和HttpResponse的关系?
        render返回:
              a. 模板+数据进行替换
              b. HttpResponse(数据)
          HttpResponse:
              a. HttpResponse(数据)
    2. Ajax请求时,响应内容只能用HttpResponse吗?
***********
# Models获取数据时,序列化方式一
    # from django.core import serializers
    # user_list = models.UserInfo.objects.all()
    # data = serializers.serialize("json", user_list)
    # return HttpResponse(data)
    # Models获取数据时,序列化方式二 *****************
    # user_list = models.UserInfo.objects.values('id','username')
    # user_list = list(user_list)
    # import json
    # return HttpResponse(json.dumps(user_list))
    # Models获取数据时,序列化方式三
    # user_list = models.UserInfo.objects.values_list('id', 'username')
    # user_list = list(user_list)
    # import json
    # return HttpResponse(json.dumps(user_list))
===》 Django中Ajax方式获取ORM获取数据数据时,涉及序列化操作
************
    import json
    ret = {'status': False,'data': None, 'error': None}
    try:
        user_list = models.UserInfo.objects.values('id','urname')
        user_list = list(user_list)
        ret['status'] = True
        ret['data'] = user_list
    except Exception as e:
        ret['error'] = "获取数据失败"
    data = json.dumps(ret)
    return HttpResponse(data)
************
class BaseReponse:
        def __init__(self):
            self.status = False
            self.data = None
            self.error = None
import json
    ret = BaseReponse()
    try:
        user_list = models.UserInfo.objects.values('id','urname')
        user_list = list(user_list)
        ret.status = True
        ret.data = user_list
    except Exception as e:
        ret.error = "获取数据失败"
    data = json.dumps(ret.__dict__)
    return HttpResponse(data)
5. 分析抽屉页面
    - Ajax操作
        a. 发送数据,Form验证错误信息,全部展示
           PS: 添加,编辑
b. 登录状态
                {% if request.session.uuu %}
                    <a>{{ request.session.uuu }}</a>
{% else %}
                    <a id="btn">登录</a>
                {% endif %}
        c. Ajax -> CSRF
            1. 手动找到并携带
            2. 
                - HTML中创建Form表单将标签包含在内
                - data: $('#f11').serialize(),
            3. 
                - cookie中获取csrftoken的值
                - 将值携带到请求头中
$.ajax({
                    header: {"X-CSRFToken": $.cookie('csrftoken')},
                })
            4. 注释
- 上传文件(偷偷)
        a. Form表单上传,页面刷新
        b. Ajax方式:
            $(function () {
                $('#btn1').click(function () {
                    var fm = new FormData();
                    fm.append('fffff', document.getElementById('ggggg').files[0]);
                    fm.append('usernmae','root');
$.ajax({
                        url: "/ajax-upload/",
                        type: 'POST',
                        data: fm,
                        processData: false,  // tell jQuery not to process the data
                        contentType: false,  // tell jQuery not to set contentType
                        success:function (arg) {
                            console.log(arg);
                        }
                    })
                })
            })
注:兼容性不好
         c. "伪"Ajax操作
            1. iframe + Form表单
            2. iframe onload
            3. $('#ifr').contents().
            4. 上传按钮透明度
- 创建数据库表
class UserInfo:
            username
            pwd
class News:
            title
            summary
            href
            news_type_choices = [
                (1, '42区')
                (1, '42区')
                (1, '42区')
            ]
            nt_id = Interager(choices=news_type_choices) # 新闻类型
            u = FK(UserInfo) # 发布者 
            ctime = models.DateTimeField(auto_now_add=True)
            # time模块
favor = models.M2m("UserInfo")
            """ 第三那张表
            1  1 
            1  2
            1  3
            2  3
            2  2
            """
q1
         class Comment:
            id 自增: 评论ID
            content = 评论内容
            user = FK(UserInfo,related_name='q1') = 评论者ID
            new = Fk(News,related_name='q2') = 评论的文章ID
            ctime =评论时间
            parent_id = FK(Comment,related_name='q3')
1  嗯,不像我们还要担心内部打架伤了背部  10  11  null
            2  突破重围,结果被KGB大佬亲手格杀.....  10  12  null
            3  这几个肉会玩                          10  13  null
            4  asdfasdfasdf                          10  11  null
            5  开门,你的快递到了                    10  19  1
news_list = News.objects.all()
    for row in news_list:
        print(row.title,summary,row.favor.all().count())
作业:
    1. 数据表创建
    2. 手动添加用户(用户登录Ajax+Form验证)
    3. 新闻列表(分页)
    4. 发布新闻
    5. 【可选】点赞
    PS: 页面无要求
6. 后台管理
7. 聊天室(WebSocket,长轮询)
day19 Models补充+缓存+信号+序列化+分析抽屉页面的更多相关文章
- Django  分页器 缓存 信号 序列化
		阅读目录 分页器 缓存 信号 序列化 Django分页器 (paginator) 导入 from django.core.paginator import Paginator, EmptyPage, ... 
- django的缓存,信号,序列化
		一 Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的 ... 
- Django组件补充(缓存,信号,序列化)
		Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ... 
- .net缓存应用与分析
		在 ASP.NET 提供的许多特性中,相比 ASP.NET 的所有其他特性,缓存对应用程序的性能具有最大的潜在影响,利用缓存和其他机制,ASP.NET 开发人员可以接受使用开销很大的控件(例如,Dat ... 
- 10.hibernate缓存机制详细分析(转自xiaoluo501395377)
		hibernate缓存机制详细分析 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论 ... 
- PCB板信号完整性分析的操作步骤及设置方法
		AD16的主要功能是画电路原理图和根据电路原理图设计PCB板.为了使设计的电路.画完的电路原理图,从电路原理上不存在错误,从电路逻辑上不存在混乱,AD16专门开发了电路原理图的仿真程序.这样可以把设计 ... 
- Mybatis的缓存——一级缓存和源码分析
		目录 什么是缓存? 一级缓存 测试一. 测试二. 总结: 一级缓存源码分析: 1. 一级缓存到底是什么? 得出结论: 2. 一级缓存什么时候被创建? 3. 一级缓存的执行流程 结论: 一级缓存源码分析 ... 
- 再谈DOMContentLoaded与渲染阻塞—分析html页面事件与资源加载
		浏览器的多线程中,有的线程负责加载资源,有的线程负责执行脚本,有的线程负责渲染界面,有的线程负责轮询.监听用户事件. 这些线程,根据浏览器自身特点以及web标准等等,有的会被浏览器特意的阻塞.两个很明 ... 
- ASP.NET缓存全解析3:页面局部缓存  转自网络原文作者李天平
		有时缓存整个页面是不现实的,因为页的某些部分可能在每次请求时都需要变化.在这些情况下,只能缓存页的一部分.顾名思义,页面部分缓存是将页面部分内容保存在内存中以便响应用户请求,而页面其他部分内容则为动态 ... 
随机推荐
- Netty资料
			netty 资料 转自 http://calvin1978.blogcn.com/articles/netty-info.html Netty资料皆阵列在前 Posted on 2016-08- ... 
- STM32 HAL库详解 及 手动移植
			源: STM32 HAL库详解 及 手动移植 
- WCF可靠性会话之服务分流
			可靠性绘画答条件: (1)服务绑定支持可靠性绘画:特别是netTcpBinding.wsHttpBinding及wsDualHttpBinding. wsDualHtttpBinding可靠性绘画始终 ... 
- hadoop yarn HA集群搭建
			可先完成hadoop namenode HA的搭建:http://www.cnblogs.com/kisf/p/7458519.html 搭建yarnde HA只需要在namenode HA配置基础上 ... 
- 20145331实验四 "Android开发基础"
			20145331实验四 "Android开发基础" 程序设计过程 实验内容 ·安装Android Studio ·运行安卓AVD模拟器 ·使用安卓运行出虚拟手机并显示HelloWo ... 
- 【读书笔记】《深入浅出nodejs》第五章 内存控制
			海量请求+长时间运行 -> 内存控制 -> 一切资源高效循环利用 1. V8的垃圾回收机制与内存限制 在Node中通过JavaScript使用内存时,只能使用部分内存(64位系统下约1.4 ... 
- javaWeb中JNDI的使用,为什么要加java:comp/env前缀
			转载自(http://blog.csdn.net/guodongsoft/article/details/52399527) 我们在使用JNDI调用某个对象时,会有下述两种方式 context.loo ... 
- BZOJ 2761: [JLOI2011]不重复数字 hash哈希
			题目就不贴了 点我看题 题意:这题题意很简明,就是给一个序列,把序列里相同的删掉,然后输出,按原数列顺序. 思路:这题之前QZZ和ZN大神犇叫我去做,辣时还不会hash,就留着了.最近某夏令营学会了h ... 
- Vue中使用百度地图——设置地图标注
			知识点:创建Map实例,为指定的位置设置标注 参考博客:https://www.cnblogs.com/liuswi/p/3994757.html 1.效果图:初始化地图,设置指定经纬度为地图中心点坐 ... 
- LeetCode——Unique Binary Search Trees
			Question Given n, how many structurally unique BST's (binary search trees) that store values 1...n? ... 
