zoukankan      html  css  js  c++  java
  • 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 Accept:text/html Accept-Encoding:gzip, deflate Cookie:UM_distinctid=15d274 ')
            
           

            获取数据: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 Accept:text/html Accept-Encoding:gzip, deflate Cookie:UM_distinctid=15d274 a1=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协议

     - 请求头和请求体分割:
    
    
            - 请求体之间:
    
            - 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,])
            
            - 分页
            - 分组和聚合 
  • 相关阅读:
    Vue--vue-Router
    Vue--vue中常用的ECMAScript6语法
    Vue-- vue-preview(图片查看器)的使用步骤:
    Vue--moment时间格式插件安装和使用
    Vue--通过button跳转到其他组件并携带id参数
    css3中的box-sizing属性的使用
    JS-取出字符串中重复次数最多的字符并输出
    JSON.parse()和JSON.stringify()用法
    sql server 获取当前日期前三十天的日期
    SQL SERVER查询本周数据,无数据补0
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/7778779.html
Copyright © 2011-2022 走看看