Python进阶系列
Python进阶-网络编程-01
Python进阶-网络编程-02
Python进阶-网络编程-03
Python进阶-多任务编程-01
Python进阶-多任务编程-02
Python进阶-多任务编程-03
Python进阶-正则表达式
Python进阶-数据库编程-01
Python进阶-数据库编程-02
Python进阶-数据库编程-03
Python进阶-数据库编程-04
Python进阶-数据拷贝问题
Python进阶-模块导入问题
Python进阶-miniWeb框架
文章目录
16.1. 框架概念
- 静态资源:不是经常变化的资源,往往是固定不变的资源
- 动态资源:经常变化的资源
- 模板文件:提供一个显示的模板,显示的的内容不同,但是结构是一样的
- 服务器的作用:
- 接受客户端请求
- 响应客户端请求
- 调用应用框架获取
16.2. miniWeb框架基本构建
-
思路:
- 判断请求的资源路径是否是.py结尾
- 如果是.py结尾 显示动态内容
- 如果是.html结尾 显示静态内容
-
核心代码:
# 改进动态显示 # 1.判断后缀 if file_path.endswith(".py"): # 2.让.py显示的内容和.html显示的内容区别分开 response_body = "This is index Show! %s" % time.ctime() response_data = utils.create_http_response("200 OK", response_body.encode())
16.3. mimiWeb框架构建-动态显示
-
思路:
- 首先必须是.py结尾的文件
- 判断请求的资源路径,并且根据资源路径不同设置不同的response_body
- 当请求资源路径不存在,返回404错误
-
核心代码:
if file_path == "/index.py": response_body = "This is index Show!" response_data = utils.create_http_response("200 OK", response_body.encode()) elif file_path == "/center.py": response_body = "This is center Show!" response_data = utils.create_http_response("200 OK", response_body.encode()) elif file_path == "/gettime.py": response_body = "helloworld %s" % time.ctime() response_data = utils.create_http_response("200 OK", response_body.encode()) else: response_body = "Sorry Page Not Found! 404".encode() response_data = utils.create_http_response("404 Not Found", response_body)
16.4. 路由列表(django)
-
实现步骤:
-
创建urls模块,提供一个路由字典
字典保存路径和函数的对应关系
-
导入函数的模块 from application import funs
-
route_dict
# 定义路由字典 route_dict = { '/index.py' : funs.index, '/center.py' : funs.center, '/gettime.py' : funs.gettime }
-
-
创建funs模块,提供具体功能对应的函数
定义路径对应的函数
def index(): return "This is index show!" def center(): return "This is center show!" def gettime(): return "This is gettime show! %s" % time.ctime()
-
修改app文件中动态显示的判断部分
- 判断路径是否在路由字典中
- 如果在字典中,根据key(请求路径)取出对应的函数的引用
- 执行函数,获取函数的返回值,然后赋值给response_body
if file_path in urls.route_dict: # 根据key值,去urls.route_dict中获取值 func = urls.route_dict[file_path] # 根据路由字典,获取函数的引用,执行该函数,返回执行的结果,保存到respon_body变量中 response_body = func() # 调用 utils 模块的create_http_response函数,拼接响应协议 response_data = utils.create_http_response("200 OK", response_body.encode())
-
16.5. 路由装饰器(flask)
-
修改urls模块
route_dict = { }
-
修改funs模块
-
导入 from application import urls
-
创建装饰器工厂
def route(path): # 装饰器 def function_out(func): urls.route_dict[path] = func print("装饰[%s]" % path) def function_in(): return func() return function_in return function_out
-
装饰函数
@route("/center.py") def center(): return "This is center show!"
-
-
在app模块中导入funs模块
此时funs模块中的函数被加载,加载的同时被装饰(就会向字典中添加路由信息)
16.6. 模板替换
-
思路
-
拷贝资源(templates)到工程下
-
修改funs模块中的index和center函数
-
在函数中读取对应的文件
with open("templates/center.html", "r", encoding='UTF-8') as file: # 2.读取文件内容 content = file.read()
-
使用正则替换网页中的内容 {%content%} --> helloworld
-
返回替换后的内容
return content
-
16.7. <选股系统-股票信息>数据加载_1
-
创建并导入数据到数据库
- 创建数据库 create database stock_db charset = utf-8
- 使用数据库 use stock_db
- 导入数据库 (先客户端登录)
- 准备脚本文件
- 导入脚本 source stock_db.sql
-
修改index函数
-
连接数据库,获取数据
- 导入模块
- 建立连接
- 创建游标
- 使用游标执行sql
- 获取查询的结果 : data_from_mysql = str(cur.fetchall())
- 关闭资源:游标,连接
-
替换为查询的数据
content = re.sub("{%content%}", data_from_mysql, content)
-
16.8. <选股系统-股票信息>数据加载_2
-
思路:
-
把查询的数据进行遍历,并且拼接html格式的文本
表示一行 表示一列
-
替换为拼接后的字符串
content = re.sub(“{%content%}”, data_from_mysql, content)
-
注意:
%s %s %s ----> line # line是一个元组
-