zoukankan      html  css  js  c++  java
  • web框架和Django框架的初识

     1,web框架的原理

    1.1>c/s架构和b/s架构

      1>c/s客户端模式

      2>B/S浏览器模式-----web开发(web开发开的是B/S架构)

    1.2>web开发的本质

      1.2.1>互联网上两台机器之间的通信:(1)IP,(2)端口,(3)协议

      1.2.2>协议:(1)HTTP默认端口是80,(2)HTTPS默认端口是443

      1.2.3>HTTP get请求格式

      1.2.4>HTTP相应格式

    1.3>浏览器输入URL回车返回页面,这之间都经历了什么?

      (1)域名 ->DNS解析 ->IP地址 ->服务端 ->返回消息 ->浏览器

      (2)浏览器  <==> 服务器

      (3)服务器吧写好的HTML页面,返回给;浏览器按照HTML格式进行渲染(显示)

    2,python中的web框架的分类

      2.1>收发socket消息,按照HTTP协议解析消息 

      2.2>字符串替换

      2.3>业务逻辑处理

      自己实现2.1,2.2,2.3的是tornado框架

      自己实现2.2,2.3使用别人的2.1是Django框架

      自己实现2.3使用别人的2.1,2.2是flask

      另一个维度 的框架分类:1,Django  2,其他

    3,Django的安装

      3.1>django注意版本LTS

      3.2>安装命令:pip install Django == 1.11.11(卸载Django:pip uninstall django)

      3.3>创建第一个Django项目

        3.3.1>命令行创建:django-admin startproject 项目名

        3.3.2>在pycharm:File ->new Project ->左侧选第二项,右侧第一项是路径,第二页是python版本,在新的pycharm窗口打开新建的Django项目

      3.4>启动django项目

        3.4.1>在命令行启动:在django项目的跟目录下,执行下面的命令

          python manage.py runserver

          python manage.py runserver 8080

          停止:Ctrl + c

        3.402>pycharm启动:点绿色的三角,注意左侧框中的名字一定钥匙项目名称!

     

     4,模拟web服务器

    4.1>普通版本

    import socket
    sk = socket.socket()
    
    sk.bind(("127.0.0.1",8080))
    sk.listen()
    
    while 1:
    
        conn,addr = sk.accept()
    
        data = conn.recv(1024)
    
        #接收到的是一个byte类型的数据需要转化成字符串,注意编码
    
        data_str = str(data,encoding="utf-8")
    
        #对字符串进行切割操作
    
        first_line = data_str.split("
    ")[0]
        #对请求按空格切割
    
        url = first_line.split(" ")[1]
        
        if url == "/xuexue/":
             msg = b"hello"
        elif url == "/xiaoxue/":
              msg = b"miss"
        else:
            msg = b"404 not found !"
        conn.send(b"HTTP/1.1 200 Ok
    
    ")
        conn.send(msg)
        conn.close()

    客户端fade是个啥

    '''GET /yingying/ HTTP/1.1
    Host: 127.0.0.1:8080
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    
    '''

    4.2>模拟web服务器的函数版本

    import socket
    sk = socket.socket()
    sk.bind(("127.0.0.1",8080))
    sk.listen()
    def xuexue(url):   #这个哪吒说必须传url参数,但是不传参数也可以啊
         data = b"hello"
         return data
    
    def xiaoxue(url):
    
        data = "miss"
    
         return bytes(data,encoding="utf-8")
    
    while 1:
    
        conn,addr = sk.accept()
    
        data = conn.recv(1024)
    
        data_str = str(data,encoding="utf-8")
    
        first_line = data_str.split("
    ")[0]
    
        url = first_line.split(" ")[1]
    
        if url == "/xuexue/":
    
            msg = xuexue(url)
    
         elif url == "/xiaoxue/":
    
            msg = xiaoxue()
    
          else:
    
            msg = b"404 not found !"
    
        conn.send(b"HTTP/1.1 200 ok
    
    ")
    
        conn.send(msg)
    
        conn.close()

    4.3>模拟web服务器的反射进阶版

    import socket
    sk = socket.socket()
    sk.bind(("127.0.0.1",8080))
    sk.listen()
    
    def xuexue(url):
    
        return b"hello"
    
    def xiaoxue(url):
    
        data = "miss"
    
        return bytes(data,encoding="utf-8")
    
    url_func = [
    
        ("/xuexue/",xuexue),
        ("/xiaoxue/",xiaoxue)   
    ]
    
    while 1:
    
        conn,addr = sk.accept()
    
        data = conn.recv(1024)
    
        data_str = str(data,encoding="utf-8")
    
        first_line = data_str.split("
    ")[0]
    
        url = first_line.split(" ")[1]
    
        for el in url_func:
    
                if el[0] == url
    
                    msg = el[1](url)
    
        else:
    
                msg = b"404 not found"
    
        conn.send(b"HTTP/1.1 200 ok\r
    
    ")
    
        conn.send(msg)
    
        sonn.close()

    4.4> 静态网页版本

    import socket
    sk = socket.socket()
    sk.bind(("127.0.0.1",8080))
    sk.listen()
    def xuexue(url):
        data = "hello"
        return bytes(data,encoding="utf-8")
    
    def xiaoxue(url):
    
        data = "miss"
    
        return bytes(data,encoding="utf-8")
    
    def login(url):
    
        with open("login.html","rb") as f:
    
            data = f.read()
    
        return data
    
    url_func = [
        ("/xuexue/",xuexue),
        ("/xiaoxue/",xiaoxue),           
        ("/login/",login)
    ]
    
    while 1:
    
        conn,addr = sk.accept()
        
        data = conn.recv(8192)
        data_str = str(data,encoding="utf-8")#bytes类型转化成字符串可以直接转化,并且加一个编码.
        first_line = data_str.split("
    ")[0]
    
        url = first_line.split(" ")[1]
    
        for el in url_func:
    
             if el[0] ==url:
    
                msg = el[1](url)
    
        else:
    
        
            msg = b"404 not found !"
    
        conn.send(b"HTTP/1.1 200 ok
    
    ")
    
        conn.send(msg)
    
        conn.close()

    4.5>动态网页版本

    import socket
    import time
    sk = socket,socket()
    sk.bind(("127.0.0.1",8080))
    sk.listen()
    def xuexue(url):
        data = "hello"
        return bytes(data,encoding="utf-8")
    def xiaoxue(url):
        data = "miss"
        return bytes(data,encoding="utf-8")
    def login(url):
        with open("login.html","r") as f:
            data = f.read()
        now = str(time.time())
        data = data.replace("@@xx@@",now)
        return bytes(data,encoding="utf-8")
    url_func = [
        ("/xuexue/",xuexue),       
        ("/xiaoxue/",xiaoxue),
        ("/login/",login)
    ]
    while 1:
        
        conn,addr = sk.accept()
        data = conn.recv(8192)
    
        data_str = bytes(data,encoding="utf-8")
        
        first_line = data_str.split("
    ")[0]
        url = first_ine.split(" ")[1]
        for el in url_func:
            if el[0] == url:
                    msg = el[1](url)
        else:
            msg = b"404 not found !"
        conn.send(b"HTTP/1.1 200 ok
    
    ")
        conn.send(msg)

     

  • 相关阅读:
    SpringMVC拦截器
    SpringMVC异常
    SpringMVC文件上传
    SpringMVC返回值类型
    JVM字节码
    使用Apache JMeter进行测试
    Tomcat优化
    垃圾收集器
    GC常见算法
    VisualVM远程连接Tomcat
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/9801321.html
Copyright © 2011-2022 走看看