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--知识总体总结的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  3. python基础知识(二)

    以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍

  4. python 基础知识(一)

    python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...

  5. 适用于 PHP 开发人员的 Python 基础知识

    Thomas Myer, 负责人, Triple Dog Dare Media 简介: 您是一名经验丰富的 PHP 开发人员,并且希望学习 Python 吗?本文将从 PHP 开发人员的角度来探索 P ...

  6. python基础知识讲解——@classmethod和@staticmethod的作用

    python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...

  7. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  8. Python数据分析-知识宝藏

    0.SQL数据库 1. python基础知识 2. 重点工具掌握:数据解析核心技巧 - Numpy| Pandas| Matplotlib 3. 数据特征分析:分布| 对比| 统计| 帕累托| 正态| ...

  9. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  10. 线程概念( 线程的特点,进程与线程的关系, 线程和python理论知识,线程的创建)

    参考博客: https://www.cnblogs.com/xiao987334176/p/9041318.html 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运 ...

随机推荐

  1. 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++) 调了两个小时 这题要求维护& ...

  2. HDU 6212 Zuma(区间dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=6212 题意:有一行的祖玛,只由1和0组成,每次出现连续三个及以上的就会消去,问你最少需要发射多少个球才能消完. ...

  3. Android RealativeLayout 布局gravity不能居中的解决办法

    对于LinerLayout中的gravity发现复制到realativeLayout布局中发现不起作用,后来发现只要在他的每个子组件中使用  android:layout_centerVertical ...

  4. 远程连接MySQL MySQL的远程连接

    在笔记本上安装了mysql, 想测试一下连接池对性能的影响,用了另一台PC来测试一段sql,出现以下错误: jdbc:mysql://10.201.11.128:3306/test Cannot cr ...

  5. dml语句和ddl语句 区别

    delete from user删除所有记录,属于dml语句,一条记录一条记录删除.事务可以作用在dml语句上的 truncate table user;删除所有记录,属于ddl语句,将表删除,然后重 ...

  6. 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 ...

  7. Windows 下使用virtualenv 第一次使用flask

    前几天在Windows下virtualenv 了一个名为 venv的目录,然后,今天差点忘了怎么进去虚拟环境. 发现在创建虚拟环境的venv目录下有个Scripts目录,里面有一堆 名为activat ...

  8. R语言多层绘图

    #########################################################第一种实现方法close.screen(all.screens = T)split.s ...

  9. python模块(2)

    1.OS模块 print(os.getcwd()) #获取当前工作目录 os.chdir('E:\python练习\python35学习') #更改目录 print(os.getcwd()) E:\p ...

  10. (转)C# 的三种序列化方法

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...