《Flask Web 开发》笔记

《Flask Web 开发》第二版 豆瓣地址:https://book.douban.com/subject/30293851/ 第 1 章 - 安装 Flask 哲学 Flask 自开发伊始就被设计为可扩展的框架,它具有一个包含基本服务的强健核心,其他功能则可通过扩展实现。 Flask 有 3 个主要依赖: 路由、调试和 Web 服务器网关接口(WSGI,Web server gateway interface)子系统由 Werkzeug 提供; 模板系统由 Jinja2 提供; 命令行集成由 Click 提供。 开发者可以任意挑选符合项目需求的扩展,甚至可以自行开发。这和大型框架的做法相反,大型框架往往已经替你做出了大多数决定,难以(有时甚至不允许)使用替代方案。 venv 在 Python 3 中由标准库 venv 创建虚拟环境: $ python3 -m venv virtual-environment-name 激活虚拟环境: $ source venv/bin/activate 取消: $ deactivate 另一种使用虚拟环境的方法: 在终端中执行 $ venv/bin/python 直接激活虚拟环境中的交互模式,退出时直接按下 ctrl + D。 第 2 章 - 应用的基本结构 初始化 所有 Flask 应用都必须创建一个应用实例,通常由下述代码创建: from flask import Flask app = Flask(__name__) Web 服务器使用 WSGI 协议,把接受自客户端的所有请求转发给这个对象处理。...

2020-02-22

用 sleepwatcher 让 Mac 在睡眠及唤醒时自动执行一些脚本

macOS 自带的 Automator.app 并没有给出睡眠及唤醒时的条件变量,不过可以通过 sleepwatcher 来监测并执行一些脚本。 sleepwatcher 安装: brew install sleepwatcher 安装完成后有使用提示,sleepwatcher 会在睡眠和唤醒时自动运行 ~/.sleep 和 ~/.wakeup。 服务由 brew services 管理: brew services -h 创建文件并给予运行权限: touch ~/.sleep && chmod +x ~/.sleep touch ~/.wakeup && chmod +x ~/.wakeup 由于系统限制,睡眠时的操作不能运行超过 15 秒。 可以在 ~/.sleep 写入一个创建文件夹的操作作为测试: #!/bin/zsh mkdir ~/Desktop/test 盒盖、打开,桌面应该就有一个 test/ 目录了。 睡眠时关闭 QQ QQ for Mac 多年以来一直会在合盖状态下不知何时突然响起登录声,真的是让人无语,经常是合盖睡觉了,躺床上刚要睡着的时候 QQ 突然响了。 一个 python 脚本,关闭 QQ 的进程: #!/usr/local/bin/python3 import psutil for pid in psutil.pids(): name = psutil....

2020-02-20 · (updated: 2023-04-07)

解决 pyenv 导致的 brew warning

brew doctor 的错误提示: Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue. If everything you use Homebrew for is working fine: please don't worry or file an issue; just ignore this. Thanks! Warning: "config" scripts exist outside your system or Homebrew directories. `./configure` scripts often look for *-config scripts to determine if software packages are installed, and which additional flags to use when compiling and linking....

2020-01-31

《SQL 必知必会》笔记

《SQL 必知必会》第 4 版 豆瓣:https://book.douban.com/subject/24250054/ SQL 文件下载地址:https://forta.com/books/0672336073/ 1 - 了解 SQL 数据库 保存有组织的数据的容器(通常是一个文件或多个文件)。 数据库软件应称为数据库管理系统(DBMS). 表 某种特定类型数据的结构化清单。 列 表中的一个子段。所有表都是由一个或多个列组成的。 主键: 表中的任何列都可以作为主键,只要它满足以下条件: 任意两行都不具备有相同的主键值; 每一行都必须具有一个主键值(主键列不允许 NULL 值); 主键列中的值不允许修改或更新; 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。 2 - 检索数据 查询语句 SELECT 检索一个或多个列。 SELECT 列名 FROM 表名; SELECT * FROM 表名; 注释 在大多数数据库软件中,支持 # -- /**/ 等单行和多行注释。 结果集去重 DISTINCT SELECT DISTINCT 列名 FROM 表名; DISTINCT 关键字限制所有的列,如果后接多列,除非两列内容完全相同,否则都会被纳入结果集。 限制结果 LIMIT 大多用于分页显示: -- 从第 0 行开始,显示 5 个。第一页: SELECT * FROM 表名 LIMIT 5 OFFSET 0; -- 从第 5 行开始,现实 5 个。第二页: SELECT * FROM 表名 LIMIT 5 OFFSET 5; MySQL、MariaDB、SQLite 简化语法:...

2020-01-29

Git 自总结

虽然用了很久的 Git 了,但基本上只是 add、commit、push、pull,这次系统性的学习了一遍。 整体是按照 Github 官方教程,由牛客网翻译的视频 的顺序排下来的。 内容上外加网上的各种博文总结和补充了一些。 Setup $ brew install git Config Git 希望知道每次提交的作者信息,来说明是谁进行的本次提交,这会随着版本迭代永久纳入历史记录中。 $ git config --global user.name "my name" $ git config --global user.email xxx@example.com user.email 最好与 github 中的邮件地址相同,否则 push 后在 github 上并不会准确显示出是自己。 配置文件: 在 ~/.gitconfig 中同样可以修改和查看上述配置,或修改 Git 全局忽略的位置信息等。 SSH 配合 SSH Key 在 Github 中可以免去输入密码的环节。 生成密钥: $ ssh-keygen -t rsa -C "youremail@example.com" 在 ~/.ssh/id_rsa.pub 中取得公钥并上传 GitHub。 Init 创建本地仓库: $ git init Github 上创建仓库,可遵循 Github 的提示: create a new repository on the command line: echo "# test" >> README....

2019-04-07 · (updated: 2021-11-21)

Python 异步 IO 笔记

协程初探 协程 - 廖雪峰 Python 教程 多进程与多线程均由操作系统调度,不过协程由程序员在协程的代码里显式调度。 协程没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 yield/send() 刚看廖老师协程一章的代码时是一脸懵逼,那么从 0 开始,了解 yield。 10 年前的好文章: 深入理解 yield 看完再回顾廖老师的 [生产者-消费者] 模型: def c(): ... n = yield r ... def p(c): ... r = c.send(n) ... 终于理解 yield 表达式与send() 函数两者皆可发送与反馈,协同工作,相辅相成。 send(n),p 发送了 n 给 c,c 怎么接收,yield 的返回值即是。 yield r,c 反馈了 r 给 p,p 怎么接收,send() 的返回值即是。 @asyncio.coroutine/yield from yield from 语法由 Python 3.3 引进。 附:深入理解Python的yield from语法 ,摘抄部分代码: # 子生成器 def average_gen(): total = 0 count = 0 average = 0 while True: new_num = yield average count += 1 total += new_num average = total/count # 委托生成器 def proxy_gen(): while True: yield from average_gen() # 调用方 def main(): calc_average = proxy_gen() next(calc_average) # 预激下生成器 print(calc_average....

2019-01-03

再见,双点医院!

终于肝完了主题医院的精神续作——双点医院。。。 太肝了。。。 这一代的病人依然没有摒弃「请病人不要死在走廊上」的优良传统,如果你把一个病人治死了,他会坚持换完衣服走出病房,然后再在走廊死掉,再化为鬼魂,为周围的病人启动一个「加速行走」的Buff。。。 因为这个加速行走的Buff,我甚至都不招聘有抓鬼技能的员工了。 游戏进程 入场 接待 诊断 治疗 离场 中途可能包含「愤怒离开」「治疗效果不佳」「死亡」。 在接受治疗前就死亡,是因为排队排太久,健康值降为 0。 愤怒离开的主要原因是心情降为 0。 诊断流程 (妈的智障) → 全科 → 诊断 → 全科 → 诊断 → 全科 → 治疗 如果第一次全科就100%,直接治疗。 即便到诊断室已经100%了,病人也会再次返回全科。(大夫可能是说你去照个X光回来给我看看) 如果已有的诊断室已经用完,仍没到100%,会发出消息,问你是送回家、等待、治疗? 在后期基本只有这两种情况: 进场 → 全科 → 治疗 → 离场或死亡 进场 → 全科 → 某个诊断室 → 全科 → 治疗 → 离场或死亡 全科技能跟上的话,很少有第三次复诊。 科室 设施 护士 医生 接待处 药房 3 x 3 【全科】 3 x 3 休息室 【综合诊断】 3 x 3 【精神病学】 3 x 3 精神学 厕所 【心脏病科】 3 x 3 脱光诊所 3 x 3 培训 注射室 3 x 3 研究 【体液分析】 3 x 3 【DNA实验室】 4 x 3 遗传学 营销学 咖啡厅 【病房】 4 x 3 流行锅实验室 4 x 4 骨科病房 4 x 3 拔头室 4 x 4 色疗室 4 x 3 电疗 4 x 4 木乃伊 4 x 3 分辨率 4 x 4 【X 光】 4 x 4 有害动物 4 x 4 【超级磁力共振】 4 x 4 放射学 小丑诊所 4 x 4 折疗室 5 x 3 手术室(医+护) 4 x 3 外科学 上表【 】中为具有诊断功能的科室。...

2018-09-09

用 CloudXNS 解决 CNAME 与 MX 记录冲突

需求 需求是这样的: 我的博客是 dvel.me,已经部署在 Coding Pages 或 Github Pages 上,域名解析用的是 CNAME 记录。 我希望我的域名邮箱是后缀是 @dvel.me,域名解析用的是 MX 记录。 冲突了。。。 @ CNAME - pages.coding.me @ MX 1 aspmx.l.google.com 因为都用了裸域,如果要放弃裸域,采用 www.dvel.me 又觉得强迫症,Coding 又不提供 A 解析。 用 CloudXNS 快速解决 CloudXNS 有一个 LINK 记录: LINK:CloudXNS的私有类型,可将用户配置的CNAME隐藏。 别名链接记录,隐式将解析权委托给目标域名。 官方详解:CloudXNS之详解LINK记录 需要额外使用一个域名,假设这个域名为 another.com。 将裸域的 CNAME 记录改成 LINK,记录值为 @another.com: @ LINK - @another.com @ MX 1 aspmx.l.google.com 进入 another.com 的解析设置页面正常设置: @ CNAME - pages.coding.me 以上,相当于绕了个弯。 我用的是 Coding Pages 与 G Suite,博客访问与邮件收发均无问题。

2018-08-01

你好,Hugo!

曾经升级完 Node 后对 Hexo 一顿折腾,感觉有点麻烦,新 MBP 入手后懒得再折腾一遍,想换到 Hugo 试试。 Quick Start 安装: $ brew install hugo 查看: $ hugo version 建站: $ hugo new site site-name 快速添加主题: (以我正在使用的 Jane 为例) $ cd site-name $ git init $ git clone https://github.com/xianmin/hugo-theme-jane.git --depth=1 themes/jane $ echo 'theme = "jane"' >> config.toml 写博客: 页面: $ hugo new page-name.md 文章: $ hugo new posts/post-name.md 预览、调试: $ hugo server $ hugo server -D # 将标记为 draft: true 的草稿也生成预览 浏览器打开 http://localhost:1313/ 即可预览。...

2018-07-31

为 Mac 打造 zsh command line 环境

折腾完,做个备忘 样图: iTerm 2 主题 Tomorrow Night - Tomorrow Night Eighties Hotkey Window 我习惯只保留一个窗口,并使用 shift+空格 来从左侧或上侧呼出,在 Profiles - Window - Style 可以设置。 呼出的快捷键在 Profiles → Keys → Hotkey Window 设置。 Natural Text Editing Profiles → Keys → Presets → Natural Text Editing 这个可以让你在输入时使用 command/option + ←/→ 来移动光标 zsh: zsh 有很多优点,比如兼容 !#/bin/bash,更强大的 tab 补全功能,大小写自动更正,丰富的主题,命令智能纠错等等。 现在 macOS 默认就是 zsh 而不是 bash 了,不过我习惯不使用系统自带的东西,可以用 brew 自己装一个。 $ brew install zsh 查看当前已经安装的 shell: $ cat /etc/shells 将 /usr/local/bin/zsh 加入到 /etc/shells 中:...

2018-07-30 · (updated: 2020-10-23)