IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> django 学习笔记(1)—— python和web开发框架 -> 正文阅读

[Python知识库]django 学习笔记(1)—— python和web开发框架

1. python和web开发框架

1.1 Web开发基本知识

Web开发框架:是用于Web开发的成套软件架构。Web开发框架会为Web应用提供成套的功能支持,即一套开发和部署网站的方案。

Web服务本质上是由socket(socket是一种通信机制,通过绑定IP地址和端口产生一个通信链,实现计算机间的通信)
Django本身是一个Web开发框架,它连接socket两端(服务端、客户端)进行数据交换,当然这种交换按照指定的协议进行,也就是HTTP

1.2.1 Web应用的本质

网络中不同的计算机间进行通信必须经过IP地址和端口。为了降低网络通信开发的复杂度,人们在TCP/IP 4层结构中的应用层与传输层之间加了一层,这个层就是socket层。它把复杂的TCP/IP进行了封装,并提供了一组服务的接口。
网络中服务器主机会提供一种或多种服务,每一种服务打开一个socket,并绑定到一个端口上,也就是说不同的端口对应于不同的服务(如Web服务一般用到80端口)
Web 开发框架的运行方式

#导入socket模块
import socket
#建立socket服务
sk=socket.socket()
#绑定IP和端口号,这时绑定本机端口
sk.bind(('127.0.0.1',8000))
#进行监听
sk.listen()
print('socket服务开始运行...')
while True:
# 接收socket客户端连接
 conn,addr=sk.accept()
# 接受socket客户端数据
 data=conn.recv(1024)
 print(data)
#向客户端发送消息,字符串前加字母b表示以字节形式传递
 conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
#向客户端发送消息,bytes() 函数将字符串转换为字节形式
 conn.send(bytes("你好,i am the socket server, i have received your request!",encoding='utf-8'))

在这里插入图片描述

1.2.2 Web框架开发核心功能

import socket
def index(url):
# 读取文件,并对占位符进行替换# with用法:在退出with代码块后自动关闭with打开的文件
    with open('index.html', 'r',encoding='utf-8') as f:
        rd= f.read()
        rd = rd.replace("$@index$@", "首页")
        # 替换后的文本以字节形式返回
    return bytes(rd,encoding='utf-8')

def test(url):
    with open('test.html', 'r',encoding='utf-8') as f:
        rd = f.read()
        rd = rd.replace("$@test$@", "测试")
    return bytes(rd, encoding='utf-8')

def fun404(url):
    ret = "<h1>not found!</h1>"
    return bytes(ret, encoding='utf-8')

# 定义变量url_func,建立了URL与函数名的对应关系
url_func=[("/index/",index),("/test/",test),]
# 建立socket服务
sk=socket.socket()
# 绑定IP与端口号,这里是绑定本机端口
sk.bind(('127.0.0.1',8000))
# 进行监听
sk.listen()
print('socket服务开始运行……')
while True:# 接收socket客户端连接
    conn, addr = sk.accept()
    '''
    下面语句中data变量接收socket客户端(浏览器)数据,
    这个数据有固定格式数据是HTTP请求数据格式,
    第一行格式为GET/index/ HTTP/1.1\r\n该行以\r\n结尾,各字符串以空格分隔
    '''
    data=conn.recv(1024)
    #输出socket服务端接收的浏览器发出来的消息格式
    print(data)
    if not data:
    # 如果客户端没有发送新的数据,就重新开始,不再向下执行
    # 防止后面语句对空字符进行操作而抛出异常
        continue
    # 把收到的数据由字节形式转换成字符串,一般用到的编码格式为utf-8
    data_str = str(data, encoding='utf-8')# 以\r\n分隔每一行
    # 以\r\n分隔每一行
    line = data_str.split("\r\n")
    print(line[0])
    # 取出第一行字符串(line[0]),然后用空格再次分隔字符串
    # 提示:在Django中的索引从0开始
    v1 = line[0].split()
    # 取出路径,路径字符串在第2个位置上(以空格分隔)
    url = v1[1]
    #向客户端发消息,字符串前加字母b表示以字节形式传递在HTTP/1.1 200 OK\r\n\r\n之后的内容以HTTP格式显示在浏览器中
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
    func = None
    """用for循环取出url_func中的每一项,它是由URL和函数名组成的元组向客户端发消息"""
    for i in url_func:
        if i[0] == url:
        # 取出对应函数名
            func = i[1]
            break
    if func:
        func = func
    else:
        func = fun404
    # 函数名加上括号,表示执行函数
    rep = func(url)
        # 把函数返回的值向客户端发送
    conn.send(rep)
    conn.close()

(1)以上代码定义了两个函数——index()和test(),还定义了一个列表类型的变量,列表中每项都是元组,其列出URL与函数名的对应关系。程序流程主要是:根据传入的参数(URL),读取相应的HTML文件,并根据占位符(本例中用两个$@包含一个变量名表示一个占位符,形如$@index$@)进行替换实现网页动态显示。
(2)index()函数和test()函数读取相应的HTML文件并进行占位符替换,同时以字节形式返回替换后的文本,进行替换的HTML文件index.html所含代码如下,请注意占位符$@index$@的位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index页面</title>
</head>
<body>
    <h1>$@index$@</h1>
</body>
</html>

test.html的代码与index.html的代码相似,此处不再列举。
(3)代码还增加了一个fun404()函数来处理无对应关系的路径。(4)在while True代码块中增加了对浏览器(socket客户端)传来的消息的处理,解析出浏览器地址栏中URL的路径,要正确解析路径必须了解浏览器传给socket服务端的消息格式。这里以在浏览器地址栏中输入http://127.0.0.1:8000/index/为例,通过print语句可以看到socket服务端收到的消息格式如下。

GET /index/ HTTP/1.1\r\n
Host: 127.0.0.1:8000\r\n
Connection: keep-alive\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, likeGecko)
Chrome/63.0.3239.132 Safari/537.36\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\

在这里插入图片描述
在这里插入图片描述

1.3 python web 开发框架

Web开发框架的本质就是用HTTP实现socket服务端与浏览器的通信功能。这些功能可以概括为三部:

  1. socket服务端与客户端收/发socket 信息,按照http来解析消息。
  2. 建立URL与要执行函数的对应关系,这里的函数包括业务逻辑代码
  3. 载入HTML文件当作模板,对其中特殊符号标识的字符串进行替换并发送给浏览器显示。

python中的web框架一般实现三种核心功能

  1. 收发消息
  2. 根据用户不同的路径执行不同的函数
  3. 从HTML中取出内容,并且完成字符串的替换
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:49:10  更:2021-11-26 08:50:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:29:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码