zoukankan      html  css  js  c++  java
  • Web框架

    Web框架本质

    我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。

    自定义web框架

    import socket


    #生成socke实例对象
    sk = socket.socket()

    #绑定IP和端口
    sk.bind(("127.0.0.1",8001))

    #监听
    sk.listen()

    #死循环,等待用户链接
    while 1:
    #获取客户端链接
    conn, addr =sk.accept() #系统没有用的变量以_保存
    #接受客户端发来的消息
    data = conn.recv(8096)
    print(data)


    #回复
    conn.send(b'qnmd')
    #关闭
    conn.close()
    sk.close()

    HTTP协议主要规定了客户端和服务器之间的通信格式,那HTTP协议是怎么规定消息格式的呢?

    让我们首先打印下我们在服务端接收到的消息是什么,浏览器和服务端通信都必须遵循一个HTTP协议(消息的格式要求)

    import socket


    #生成socke实例对象
    sk = socket.socket()

    #绑定IP和端口
    sk.bind(("127.0.0.1",8001))

    #监听
    sk.listen()

    #死循环,等待用户链接
    while 1:
    #获取客户端链接
    conn, addr =sk.accept() #系统没有用的变量以_保存
    #接受客户端发来的消息
    data = conn.recv(8096)
    print(data)# 将浏览器发来的消息打印出来


    #回复
    conn.send(b'qnmd')
    #关闭
    conn.close()
    sk.close()
    输出

    'GET / HTTP/1.1 《---请求行

    Host: 127.0.0.1:8001 《--请求头部onnection: keep-alive

    Upgrade-Insecure-Requests: 1

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 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,en;q=0.8

    ' 《--没有请求数据

    关于HTTP协议:
    a 浏览器往服务端发送的为请求(request)
    请求的消息格式:
            请求方法: 路径 HTTP/1.1
            k1:v1
            k2:v2
            请求数据:
    b 服务端往浏览器发送的为响应(response)
        响应的消息格式:
            HTTP:/1.1 状态码 状态描述符
            k1:v1
            k2:v2
            
            响应正文
    动态的网页:
        本质上都是字符串的替换
        字符串替换发生在什么地方:
        在服务端替换完在返回给浏览器
    web框架的本质:
        socket服务端与浏览器的通信
        socket服务端和功能划分
          a 负责与浏览器收发消息(socket)
          b 根据用户访问不同的路径执行不同的函数
          c 从HTML读取出内容,并且完成字符串的替换

    Django

    Django官网下载页面

    安装(安装最新LTS版):

    pip3 install django==1.11.9

    创建一个django项目:

    下面的命令创建了一个名为"mysite"的Django 项目:

    django-admin startproject mysite
        

    目录介绍:

     
    mysite/
    ├── manage.py  # 管理文件
    └── mysite  # 项目目录
        ├── __init__.py
        ├── settings.py  # 配置
        ├── urls.py  # 路由 --> URL和函数的对应关系
        └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server
     

    运行Django项目:

    python manage.py runserver 127.0.0.1:8000

    模板文件配置:

     
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, "template")],  # template文件夹位置
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
     

    静态文件配置:

    STATIC_URL = '/static/'  # HTML中使用的静态文件夹前缀
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),  # 静态文件存放位置
    ]



  • 相关阅读:
    【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
    【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
    【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】
    【Java EE 学习 34】【struts2学习第一天】
    【JavaScript中的正则表达式】
    【Java EE 学习 33 下】【validate表单验证插件】
    【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
    【Java EE 学习 32 下】【JQuery】【JQuey中的DOM操作】
    【Java EE 学习 32 上】【JQuery】【选择器】
    【Java EE 学习 31】【JavaScript基础增强】【Ajax基础】【Json基础】
  • 原文地址:https://www.cnblogs.com/sseban/p/10310683.html
Copyright © 2011-2022 走看看