Django框架-Django的影子

Django框架:

报文头:

报文请求:

通过 socket 建立 TCP 服务器,绑定 IP 与端口号,设置客户端监听:

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind(('127.0.0.1', 8080))
server.listen()

while True:
    conn, addr = server.accept()
    data = conn.recv(1024)
    print(data)
    conn.send(b'HTTP/1.1 200 OK \r\n\r\nhello, world!\nnice to meet you!')
    conn.close()

通过函数请求报文头:

import socket

server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen()


def index(u):
    return (str(u) + ' index').encode('utf-8')


def home(u):
    return (str(u) + ' home').encode('utf-8')


lst = [
    ('/index/', index),
    ('/home/', home)
]

while True:
    conn, addr = server.accept()
    data = conn.recv(1024)
    data = str(data, encoding='utf-8')
    url = data.split(' ')[1]

    conn.send(b'HTTP/1.1 200 OK \r\n\r\n')

    fun = None
    for i in lst:
        if i[0] == url:
            fun = i[1]
            break
    if fun:
        response = fun(url)
    else:
        response = b'404 Not Found'
    conn.send(response)
    conn.close()

服务器程序和应用程序:

服务器程序:

负责对 socket 服务器进行封装,并在请求到来时,对请求的各种数据进行整理。

应用程序:

负责具体的逻辑处理,要去满足服务器程序、框架的需求。

框架与服务器:

WSGI(web服务器网关接口)就是一种规范。

服务器有:uwsgi, Gunicorn,

python 标准库提供的独立的 WSGI 服务器:wsgiref —> django 服务器

可以利用这个框架去写 socket 部分 —> 利用模块去实现 socket 服务器部分:

import socket

server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen()

这一部分可以省略。

import time
from wsgiref.simple_server import make_server
"""封装 socket 服务器"""


def index(url):
    s = f'这是{
      
      url} index页面'
    return bytes(s, encoding='utf-8')


def home(url):
    s = f'这是{
      
      url} home页面'
    return bytes(s, encoding='utf-8')


lst = [
    ('/index/', index),
    ('/home/', home)
]


def run_server(environ, start_response):
    """有两个参数:"""
    # environ: 请求相关的所有数据:是一个字典键值对的形式 --> 通过字典的键 'PATH_INFO' 获取 url
    # start_response: 相应相关的所有数据
    # return: 返回给浏览器的数据
    start_response('200 OK', [])  # 设置 http 响应状态码和头信息
    print(environ)
    url = environ['PATH_INFO']
    print(url)

    fun = None
    for i in lst:
        if i[0] == url:
            fun = i[1]
            break
    if fun:
        response = fun(url)
    else:
        response = b'404 Not Found'
        
    return [response, ]


if __name__ == '__main__':
    httd = make_server('127.0.0.1', 8080, run_server)
    # 会实时监听 127.0.0.1:8080 地址,只要客户端来了就交给 run_server 函数
    # run_server 函数处理具体任务
    print('8080')
    httd.serve_forever()  # 启动服务端

Django 的影子:

views.py —> 视图函数(后端业务逻辑)

urls.py —> 路由和视图函数的对应关系

templates 文件夹 —> 专门用来储存 html 文件

动静态网页:

静态网页:

页面上的数据都是直接写死的,不会发生改变的。

动态网页:

数据是实时获取的,通过后端获取数据再展示的 html 页面上。

eg:

  1. 数据是从数据库中获取的展示到 html 页面上
  2. 后端获取当前时间展示到 html 页面上

猜你喜欢

转载自blog.csdn.net/wwx1239021388/article/details/126492619