补全:列表片段

(每道题开头都有同一段:上面那个应用的全部源码——render 把标题和正文塞进页面骨架 PAGE,list_html / form_html 生成列表和表单,STATIC 是静态文件表,handle 是入口。判题机不联网,题里直接调 ha

开始练习 →

补全:带链接的列表

(每道题开头都有同一段:上面那个应用的全部源码——render 把标题和正文塞进页面骨架 PAGE,list_html / form_html 生成列表和表单,STATIC 是静态文件表,handle 是入口。判题机不联网,题里直接调 ha

开始练习 →

补全:模板从文件来

真机上模板放在文件里。补全 render_file(tpl_text, values):tpl_text 是模板文本,values 是 {名: 值};每个 {名} 换成转义后的值;模板里有、values 里没有的占位换成空串。

开始练习 →

表单提交时浏览器做了什么

(每道题开头都有同一段:上面那个应用的全部源码——render 把标题和正文塞进页面骨架 PAGE,list_html / form_html 生成列表和表单,STATIC 是静态文件表,handle 是入口。判题机不联网,题里直接调 ha

开始练习 →

POST 成功之后回什么

贯穿全条的应用(留言板): handle(method, url, body, notes) → (状态码, 头, 正文) / GET 200 首页:留言列表 + 发表表单 /about GE

开始练习 →

解析一份表单正文

浏览器发来的正文长这样。用 parse_qs 解开看: from urllib.parse import parse_qs, quote body = "text=%E4%BD%A0%E5%A5%BD+world&tag

开始练习 →

走一遍提交

(每道题开头都有同一段:上面那个应用的全部源码——render 把标题和正文塞进页面骨架 PAGE,list_html / form_html 生成列表和表单,STATIC 是静态文件表,handle 是入口。判题机不联网,题里直接调 ha

开始练习 →

补全:读表单字段

补全 field(body, name):从表单正文里取 name 的第一个值并去掉两端空白;没有交回空串。

开始练习 →

补全:校验

补全 validate(text):空 → "不能为空";超过 50 个字 → "太长";含换行 → "不能换行";否则 ""(表示通过)。按这个顺序检查。

开始练习 →

补全:把校验接进 /add

(每道题开头都有同一段:上面那个应用的全部源码——render 把标题和正文塞进页面骨架 PAGE,list_html / form_html 生成列表和表单,STATIC 是静态文件表,handle 是入口。判题机不联网,题里直接调 ha

开始练习 →