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:页面局部缓存 转自网络原文作者李天平
有时缓存整个页面是不现实的,因为页的某些部分可能在每次请求时都需要变化.在这些情况下,只能缓存页的一部分.顾名思义,页面部分缓存是将页面部分内容保存在内存中以便响应用户请求,而页面其他部分内容则为动态 ...
随机推荐
- Java分布式:消息队列(Message Queue)
Java分布式:消息队列(Message Queue) 引入消息队列 消息,是服务间通信的一种数据单位,消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.队列,是一种常见的数据结 ...
- LINQ查询中的IEnumerable<T>和IQueryable<T>
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...
- PKU 1035 Spell checker(Vector+String应用)
题目大意:原题链接 1输入一个字符串,如果字典中存在该字符串,直接输出,否则; 2.删除,替换,或插入一个字母.如果使得输入字符串==字典中已经有的单词,输出该单词,否则. 3.直接输入下一个字符串, ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) E Underground Lab
地址:http://codeforces.com/contest/782/problem/E 题目: E. Underground Lab time limit per test 1 second m ...
- HDU 3416 Marriage Match IV (Dijkstra+最大流)
题意:N个点M条边的有向图,给定起点S和终点T,求每条边都不重复的S-->T的最短路有多少条. 分析:首先第一步需要找出所有可能最短路上的边.怎么高效地求出呢?可以这样:先对起点S,跑出最短路: ...
- [pixhawk笔记]6-uORB流程及关键函数解析
本文中将结合代码.文档及注释,给出uORB执行流程及关键函数的解析,由于uORB的机制实现较为复杂,所以本文主要学习如何使用uORB的接口来实现通信.回到上一篇笔记中的代码: #include < ...
- 20145329 《Java程序设计》第三周学习总结
教材学习内容总结 java并非完整的面向对象程序语言 定义 1:class:定义类 2.char:类型声明变量 3.new:新建对象 4.名称 X:参考 5.=:可用于指定参考至新建变量 6.构造函数 ...
- Activiti工作流与spring集成
一.前言 前面Activiti工作流的学习,说明了Activiti的基本应用,在我们开发中可以根据实际的业务参考Activiti的API去更好的理解以及巩固.我们实际的开发中我们基本上都使用sprin ...
- Mac中MacPorts安装和使用 MacPorts简介
MacPorts,曾经叫做DarwinPorts,是一个软件包管理系统,用来简化Mac OS X和Darwin操作系统上软件的安装.它是一个用来简化自由软件/开放源代码软件的安装的自由/开放源代码项目 ...
- RedHat5.4 使用 centOS5源更新
1.卸载HedHat5.4的yum命令 先查看RedHat上是否安装yum 删除所有的yum软件 rpm -qa | grep yum | xargs rpm - ...