python-day74--知识总体总结
1. 课程介绍
- 数据类型
- 函数
- 面向对象三大特性:继承,封装,多态
- socket:本质传输字节;所有网络通信都基于socket
- 数据库设计:单表、FK、M2M (自己作业:自己领域设计表,相亲网站)
- 会用:html/css/js/bootstrap
2. Http知识
基于Socket --所有网络通信都基于socket
浏览器(格式一):
Web服务器(格式一):
MySQL客户端(格式二):
MySQL服务端(格式二):
无论是哪种传输格式,本质都是发送的字符串:
socket = socket.socket()
socket.connect((ip,端口))
socket.sendall(b'87ljas9802jlksjdf098jlksdf09')
在python2,和python3中字符串的区别:
-在python2中字符串是以bytes类型存在的,可以直接传输,在字符串前面加 u 才表示 unicode 类型
-在python3中字符串是以unicode类型存在,所有在传输时必须转化成bytes类型
浏览器发送GET请求数据格式:
请求首行; // 请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1
请求头信息; // 请求头名称:请求头内容,即为key:value格式,例如:Host:localhost
空行; // 用来与请求体分隔开
请求体。 // GET没有请求体,只有POST有请求体。
socket = socket.socket()
socket.connect((ip,端口))
socket.sendall(b'GET /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip, deflate\r\nCookie:UM_distinctid=15d274\r\n\r\n')
获取数据:request.GET.get('name')
、 浏览器发送POST请求数据格式:
请求首行; // 请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1
请求头信息; // 请求头名称:请求头内容,即为key:value格式,例如:Host:localhost
空行; // 用来与请求体分隔开
请求体。 // 请求体。
socket = socket.socket()
socket.connect((ip,端口))
socket.sendall(b'POST /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip, deflate\r\nCookie:UM_distinctid=15d274\r\n\r\na1=123&a2=666&a3=xx')
在这里注意:
1- POST请求中在url路径后仍然可以携带数据,同样是用request.GET.get('name')获取
2- POST请求数据是以 a1=123&a2=666&a3=xx 这种形式存在的
Django加工POST请求的数据,
判断用户是否传递的是Django可以向request.POST中解析的数据?读取请求头Content-Type: application/x-www-form-urlencoded,如果判断能够解析,那么就去解析request.body中的值,放置到request.POST中
a1=123&a2=666&a3=xx
request.POST.get('name')
request.body b"a1=123&a2=666&a3=xx"
扩展:
Http Header里的Content-Type一般有这三种:
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。postman软件里标的是RAW。
form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串追加到url后面,用?分割,加载这个新的url。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。
当action为post且Content-Type类型是multipart/form-data,浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
Django加工POST请求的数据:如果判断不能够解析,那么就直接放在request.body ,故取数据就需要到request.body中
{a1:123,a2:567}
request.POST 空
request.body b"{a1:123,a2:567}"
Http协议
- 请求头和请求体分割:\r\n\r\n
- 请求体之间:\r\n
- GET无请求体
- 无状态,短连接(无连接):socket请求响应断开
但是在 HTTP/1.1进行调整,客户端收到数据后会过一段时间再断开连接(避免在短时间内重复连接服务端,对服务端造成压力)
- 请求头代表的意义
- user-agent:来源
- referer: 防盗链
- content-type:请求体是什么格式?
3. Django请求生命周期
wsgiref模块:
函数版本:
from wsgiref.simple_server import make_server def run_server(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__':
httpd = make_server('127.0.0.1', 8000, run_server) # 请求一旦到来:run_server(..)
httpd.serve_forever()
类版本:
from wsgiref.simple_server import make_server class WsgiHandler(object): def __call__(self,environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__':
obj =WsgiHandler()
httpd = make_server('127.0.0.1', 8000, obj) # 请求一旦到来:obj(..)
httpd.serve_forever() # 类() -> 执行__init__方法
# 类()() -> 执行__call__方法
生命周期:
注意:
渲染工作在Django中执行完成后,字符串返回给浏览器。
但是:js,css额外再发一次请求仅获取静态文件,但是这次即使有模板语法也不会替换了
4. Django所有知识点:
知识点:
1. 路由规则
- /index/ func
- /\d+/ func()
- /?P<name(\d+)>/ func()
- include - 反向生成URL:
- {%url ""%}
- reverse('a1',args=(1,))
2. 视图函数:
请求相关:
request:
method
GET.get/.getlist
POST
COOKIES
session
user
body
request.FILES
响应相关:
render
HttpResponse
redirect
3. 模板语言
if for
索引: .
执行:不加括号自动执行函数 自定义标签、过滤器 : filter和simple_tag
4. ORM操作
创建表:
类
字段:INT,CHA,FK,M2M
操作表:(CURD)
13操作
- 补充:
filter
values
vlaues_list all/values/values_list三者区别
only方法:
models.UserInfo.objects.all() - [obj(id,name,pwd,email),obj(id,name,pwd,email),] data_list = models.UserInfo.objects.all().only('name','email') - [obj(id,name,email),obj(id,name,email),] # pwd字段未取值
for item in data_list:
item.id - 直接得到值
item.name -直接得到值
item.pwd - 同样可以得到值,但是效率低,因为是重新向数据库发送请求
defer方法:
data_list = models.UserInfo.objects.all().defer('name','email') - [obj(id,pwd),obj(id,pwd),obj(id,pwd),] #不取某些字段的值
for item in data_list:
item.id
item.pwd 双下划线查询 正向和反向
5.同学们整理知识点:
- 路由对应关系:
- 模板继承
- 模板标记标签:for,if,
- 返回:
- HttpResponse
- render
- redirect - 启动
- Model类的创建,继承Model
- migrate
- 模板自定义函数:filter,sample_tag
- cookie和Session
- 基本配置文件:
- 模板
- 静态文件
- MySQL
和proejct同名的目录的__init__ - Model中自定义方法:__str__ - Model操作:
创建:
create
save
bulk_create
13中操作:
filter(nage='xx")
filter(**{age:18})
values('id')
values(*['id','name'])
values_list
last
first
all
distict
exclude
get
update(age=11)
update(**{age:11})
delete()
- 多对多查询(查询) - URL别名,目的:反向生成URL
/detail/(\d+)/ name = a1 from django.url import reverse url = reverse('a1',args=[6,]) - 分页
- 分组和聚合
python-day74--知识总体总结的更多相关文章
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- python基础知识(二)
以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍
- python 基础知识(一)
python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...
- 适用于 PHP 开发人员的 Python 基础知识
Thomas Myer, 负责人, Triple Dog Dare Media 简介: 您是一名经验丰富的 PHP 开发人员,并且希望学习 Python 吗?本文将从 PHP 开发人员的角度来探索 P ...
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Python数据分析-知识宝藏
0.SQL数据库 1. python基础知识 2. 重点工具掌握:数据解析核心技巧 - Numpy| Pandas| Matplotlib 3. 数据特征分析:分布| 对比| 统计| 帕累托| 正态| ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
- 线程概念( 线程的特点,进程与线程的关系, 线程和python理论知识,线程的创建)
参考博客: https://www.cnblogs.com/xiao987334176/p/9041318.html 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运 ...
随机推荐
- CF375D Tree and Queries(dsu on tree)
思路 dsu on tree的板子,可惜人傻把 for(int i=fir[u];i;i=nxt[i]) 打成 for(int i=fir[u];i<=n;i++) 调了两个小时 这题要求维护& ...
- HDU 6212 Zuma(区间dp)
http://acm.hdu.edu.cn/showproblem.php?pid=6212 题意:有一行的祖玛,只由1和0组成,每次出现连续三个及以上的就会消去,问你最少需要发射多少个球才能消完. ...
- Android RealativeLayout 布局gravity不能居中的解决办法
对于LinerLayout中的gravity发现复制到realativeLayout布局中发现不起作用,后来发现只要在他的每个子组件中使用 android:layout_centerVertical ...
- 远程连接MySQL MySQL的远程连接
在笔记本上安装了mysql, 想测试一下连接池对性能的影响,用了另一台PC来测试一段sql,出现以下错误: jdbc:mysql://10.201.11.128:3306/test Cannot cr ...
- dml语句和ddl语句 区别
delete from user删除所有记录,属于dml语句,一条记录一条记录删除.事务可以作用在dml语句上的 truncate table user;删除所有记录,属于ddl语句,将表删除,然后重 ...
- ts问题处理(2): 'Promise' only refers to a type, but is being used as a value here.
error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to cha ...
- Windows 下使用virtualenv 第一次使用flask
前几天在Windows下virtualenv 了一个名为 venv的目录,然后,今天差点忘了怎么进去虚拟环境. 发现在创建虚拟环境的venv目录下有个Scripts目录,里面有一堆 名为activat ...
- R语言多层绘图
#########################################################第一种实现方法close.screen(all.screens = T)split.s ...
- python模块(2)
1.OS模块 print(os.getcwd()) #获取当前工作目录 os.chdir('E:\python练习\python35学习') #更改目录 print(os.getcwd()) E:\p ...
- (转)C# 的三种序列化方法
序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...