Django框架-Django的影子

本文介绍了如何使用Python的socket创建TCP服务器,处理HTTP请求。同时,通过对比展示了Django框架下如何构建WSGI服务器,以及服务器与应用程序的关系。文中提到了Django中的视图、路由和模板文件夹,解释了静态和动态网页的区别。最后,讨论了WSGI服务器如uwsgi和Gunicorn,以及Python标准库中的wsgiref模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 页面上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WhenXuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值