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\r\n
        k1:v1
        k2:v2
        请求数据:
b 服务端往浏览器发送的为响应(response)
    响应的消息格式:
        HTTP:/1.1 状态码 状态描述符\r\n
        k1:v1
        k2:v2
        \r\n
        响应正文
动态的网页:
    本质上都是字符串的替换
    字符串替换发生在什么地方:
    在服务端替换完在返回给浏览器
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"),  # 静态文件存放位置
]



posted @   地铁昌平线  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
Web框架本质自定义web框架Django安装(安装最新LTS版):创建一个django项目:目录介绍:运行Django项目:模板文件配置:静态文件配置:
点击右上角即可分享
微信分享提示