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"),  # 静态文件存放位置
]



原文地址:https://www.cnblogs.com/sseban/p/10310683.html