-
Notifications
You must be signed in to change notification settings - Fork 8
/
changeLog.txt
348 lines (287 loc) · 10.9 KB
/
changeLog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
################################
project name: txtBlog.py
#dir:G:\xampp\htdocs\txtBlog.py
#$ python3 index.py
#local url:http://127.0.0.1:8000
################################
# 使用flask框架,尽量简化。https://flask.palletsprojects.com/en/1.1.x/
# 顶部关键词,左侧文件名。使用json做配置文件。
# 预计支持html/txt格式的文档。尽量留下扩展。
#quick start: https://flask.palletsprojects.com/en/1.1.x/quickstart/#quickstart
每次改动需要重启服务才能生效,开发模式则会修改后自动重启服务。
################################
1.如何从路由器传入参数
hello.py 最简单服务器
(1)路由器
hello2.py 路由器Routing
@app.route('/hello')
def hello():
return 'Hello, World'
(2)传入参数
from flask import Flask, escape, url_for
#从url传入get参数
@app.route('/index.py')
def hello2():
kw = request.args.get("k", "Python")
id = request.args.get("id", "0_0")
return f'keyword:{escape(kw)}<br> \
id: {escape(id)}'
# http://blog2.163.com:8000/index.py?k=R&id=3_4
# keyword:R
# id: 3_4
(3)使用 url_for() 生成URL
from flask import Flask, escape, url_for
url_for('index', k='Java',id="0_0")
#第一个参数是函数名,不是路由。必须定义过,否则报错。
#输出的路径是按照路由构建的,与函数名无关。
实例
from flask import Flask, escape,request, url_for
app = Flask(__name__)
#生成url
@app.route('/')
def index():
urls=url_for('hello2', k='Java',id="0_0") #第一个参数是函数名,不是路由
return '<a target=_blank href='+urls+'>index</a> '+urls
#1.从url传入get参数:k和id
@app.route('/index.py')
def hello2():
kw = request.args.get("k", "Python")
id = request.args.get("id", "0_0")
return f'keyword:{escape(kw)}<br> \
id: {escape(id)}'
# http://blog2.163.com:8000/index.py?k=Java&id=0_0
# keyword:k:Java
# id: 0_0
#2.直接从url分离参数:k和id
@app.route('/s/<keyword>/<id>')
def profile(keyword,id):
return 'k:{} <br>id:{}'.format(escape(keyword), escape(id))
# http://blog2.163.com:8000/s/Java/0_0
# k:Java
# id:0_0
if __name__ == '__main__':
app.run(host="blog2.163.com",port=8000)
#
################################
2. 如何从关键词读取json文件,找到txt文件,并显示内容
#数据文件
[
{
'title':"前沿与资料",
'data':
[
["项目描述", "R001", "html"],
["参考资料", "R-plot", "txt" ]
]
},
{
'title':"R语法",
'data':
[
["入门", "R002", "txt"],
["ggplot2", "R-ggplot2", "txt" ],
["R高级", "R-adv", "txt" ]
]
}
]
#读取方式
import json,re
import sys
#k="R"
#id="0_0"
k=sys.argv[1]
id=sys.argv[2]
#文本文件阅读器,放到lib中
def txtReader(fpath):
print(fpath)
fr=open(fpath, 'r', encoding="utf8")
tmp=""
for lineR in fr.readlines():
line=lineR.strip()
tmp+=line+"<br>";
print(tmp)
#关闭文件
fr.close()
return tmp;
#
htmlReader=txtReader #todo
def getData(k,id):
#1.解析id为2个数字
arr=re.split("_", id)
n0=int(arr[0])
n1=int(arr[1])
#2.解析json文件获取左侧目录,和文件名字
load_f=open("data/R.json",'r',encoding="utf8")
#读取json
menus = json.load(load_f)
#凑出来文件路径
menuCur = menus[n0]["data"][n1]
filepath="data/"+k+"/"+menuCur[1]+"."+menuCur[2] #路径
suffix=menuCur[2] #后缀
#拼凑出超链接
url_left=""
for i in range(len(menus)):
#print("="*10,menus[i]["title"]);
url_left+="<h5 class=title>"+menus[i]["title"]+"</h5>\n<ul class=submenu>\n";
arr2=menus[i]["data"];
for j in range(len(arr2)):
#print("title=",arr2[j][0], str(i)+"_"+str(j) )
cur=""
if i==n0 and j==n1:
cur=" class=cur"
#
url_left+="<li"+cur+"><a href=" + str(i)+"_"+str(j) +">"+arr2[j][0]+"</a></li>\n"
url_left+="</ul>\n"
#关闭文件
load_f.close();
#根据文件类型,读取文件
content="";
if suffix=="html":
content=htmlReader(filepath)
elif suffix=="txt":
content=txtReader(filepath)
return (url_left, content,filepath)
#rs=getData("R","0_1")
rs=getData(k,id)
print("url_left=",rs[0])
print("="*50)
print('content=',rs[1])
print("="*50)
print('filepath=',rs[2])
运行:
python getDataFrom_k_id.py R 0_1
################################
3. 把step2显示到网页中
添加topMenu
添加bottom link region
################################
4. 装饰上html
v0.0.1 py框架基本可用,有顶部menu和左侧menu,有右侧内容了。
v0.0.2 套用了css格式,支持txt,支持无图html文件
v0.0.3 支持html插入非static/下的图片了
v0.0.4 底部链接搞定。
v0.0.5 添加使用说明 ReadMe.txt
v0.0.6 微调说明文档。
v0.0.7-1 微调txt阅读器函数
v0.0.7-2 txt.js在txt解析器内部引用; 默认是txt解析器; txt解析器转码2个尖括号; 处理文档不存在;
{% if suffix=="txt" %}{% endif %}
开始研究添加md解析器
v0.0.7-3 支持md了
后缀名可以是makdown或md都行。
添加三套皮肤: MarkDown.css, MarkDown2.css(线条形状), MarkDown3.css(现在github的样式表,.markdown-body 替换为 .markdown),
md1 是github原来使用的,现在使用的md3更紧凑,调整了颜色。
v0.0.7-4 fix bug: txt.js 目录单击时锚点错了一行,已经微调.
v0.0.7-5 txt页面默认是纸质书背景
背景图来源: https://www.cnblogs.com/hackpig/p/8215786.html
颜色来源: https://maxiang.io/
v0.0.7-6 为md增加js,自动生成顶部目录。txt.js, base.css
参考效果1 百度百科 https://baike.baidu.com/item/HTML/97049?fr=aladdin
会响应滚动位置
固定显示在侧边
sf也有类似滑动效果 https://segmentfault.com/a/1190000018084098
github https://github.com/dodoroy/side-catalog
参考效果2 马克飞象 https://maxiang.io/
显示到底部,单击时显示出来
v0.0.7-7 md支持代码高亮,使用 highlight.js
https://github.com/andris9/highlight
v0.0.7-8 增加左下角目录,能响应滚动
样式在 base.css中;依赖 startMove.js,代码在markdown.js中;html加载在lib.py中
鼠标滚轮响应?
//添加属性cur,样式确实有变化
oMenu=$("f_content")
aSpan=oMenu.getElementsByTagName("span")
//aSpan[4]
oA=aSpan[2].parentElement.parentElement
oA.setAttribute("class","cur")
//怎么确定各个锚点所在位置?当前窗口所在位置?
有bug1: 目录过长时,左下角目录看不到后半段。
发现bug2: v0.0.7-4 调好的txt页,单击目录到达不起作用了,而且错的更远了。
#
$ git checkout -b bug
v0.0.7-8-1bug: txt锚点点击bug修复
锚点定位被导航栏遮住了 https://blog.csdn.net/weixin_41728561/article/details/86524574
v0.0.7-8-2bug: markdown修正点击锚点错位一行的问题
v0.0.7-8-3bug: markdown修正滚动时左下角菜单定位滞后一段长度问题
v0.0.7-8-4bug: markdown目录过长时,出现垂直滚动条;
调整左下角positon,从fixed改为absolute;
调一行的顺序,修正 static/js/startMove.js 中的timer不清零问题。
#
v0.0.7-9 (merge to master) markdown左下角目录过长时出y进度条;修正txt锚点定位错位
# js实现垂直滚动条 https://blog.csdn.net/qq_36818627/article/details/81608413
v0.0.8 txt皮肤可配置; markdown页面支持LaTex公式显示了。
md: //todo 不完全支持行内LaTex显示$,只支持块状显示$$。显示太慢了,html就先不添加了。
感觉txt页面太花哨,还原回素雅界面。增加了几个txt皮肤,可以配置皮肤config/conf.ini。
v0.0.8-2 config/conf.ini中设置,默认不开启md的LaTex解析,提高速度。
用md写文档。
v0.0.8-3 完善目录.json不存在的主动报错。
v0.0.8-4 为英语页面新增名人名言插件,播放英语句子。
使用插件 motto.js, 依赖 startMove_OOP.js, 模拟了粗糙的定时器暂停功能:
就是在大定时器内微调条件,让大定时器内的if不满足无法执行,套用小定时器内一段时间后改条件,让大定时器能正常执行。
v0.0.8-5 微调目录结构
v0.0.8-6 改文件改名为 changeLog.txt; 带锚点url刷新定位偏下用js矫正/public/js/common.js locateURLAnchor()
v0.0.8-7 修改url路径方式,更像静态化了。同步为txtBlog的灰背景样式表。
以后txtBloglig.py中必须使用绝对路径。
left做了圆角,阴影。
base.css加了媒体查询,响应式布局。
v0.0.8-8 补充了url只1个参数时跳转; 为了静态化,似乎应该使用客户端跳转好于server跳转。
v0.0.8-9 bug:txt页代码没有缩进,已经纠正; 修正左上角logo链接;
txtBloglib.py strip("\n");
v0.0.9-0 微调
v0.0.9-1 用js为markdown代码添加行号
模仿 https://blog.csdn.net/hustqb/article/details/80628721
更新 /highlight.pack.js 以便支持R代码高亮。
v0.0.9-2 更新底部年份、链接等;显示favicon.ico
v0.0.9-3 修正代码行号左侧底下多出的一块
v0.0.9-4 允许markdown更换css文件
v0.0.9-5 设置motto的开关
v0.0.9-6 data/search.sh 单行脚本搜索功能
v0.0.9-7 config中关掉motto; html 支持 LaTex公式;
#
v0.1.0-1 添加底部版本号,在config中设定
####################
# BioMooc/
####################
v0.1.0-2 transfer to BioMooc/
v0.1.0-3 fix: 如果 URL 乱写则报错
v0.1.0-4 数据文件集中到 /data/_config/ 配置文件 和 底部链接文件
v0.1.0-5 fix spell
v0.1.0-6 fix left corner contents of txt/md;
v0.1.0-7 fix spell;
v0.1.0-8 fix spell in ReadMe.txt;
#
v0.1.1@hzBig fix mistune 3.x; default LaTex off; [2023.9.7]
test on
win10 | Python 3.8.0 | mistune-2.0.5
ubutu | Python 3.7.17 | mistune 3.0.1
当前 适配 的 Mathjax 库不跟踪,太大了,不放 git 中。
移除:from flask import escape
v0.1.2@hzBig port 定义在 data/_config/ 中 [2023.9.7]
todo: 支持全文搜索 //todo
#
#--> commit
#--------->push to BioMooc/
todo:
怎么把公式js代码本地化?
http://tool.dawneve.cc/JavaScript/mathJax_demo.html
cdn http://t.zoukankan.com/bobofuns-p-6829920.html
todo:
依赖包 mistune 升级了,怎么升级?怎么适应不同 python 版本?
https://pypi.org/project/mistune/#history
mistune 包从0.84 直接跳到了2.0版本,很多函数的名字改了。最近要发布3.0版本。
对于新版本的 mistune,可以直接使用 mistune.html("*good*")
This plugin is NOT ENABLED by default in mistune.html(). To enable math plugin with your own markdown instance:
markdown = mistune.create_markdown(plugins=['math'])
Another way to create your own Markdown instance:
from mistune.plugins.math import math
renderer = mistune.HTMLRenderer()
markdown = mistune.Markdown(renderer, plugins=[math])
todo:
1.md 不支持代码高亮 [solved v0.0.7-7], 代码行号[solved in v0.0.9-1]
2.md不支持自动生成目录。[solved v0.0.7-6]
3.不支持随意换肤 [solved v0.0.8, txt file]
4.不能随着浏览改变目录的样式。
5.全站静态化如何做?
依赖: flask_frozen:
https://pythonhosted.org/Frozen-Flask/
https://blog.csdn.net/zt_706/article/details/11476527
6.增加不公开内容,就是根据IP地址来源设置可见范围。