Category: 编程

Web 服务的进程托管

编程

「入门」标签的文章是我写给新手入门者的解疑文章水文,也是给自己的知识有个地方做做梳理。如果本文对你没有帮助,可以不看。

从 Python 的魔法方法说开去

编程

一天我在群里看到这样一个有意思的Python现象:

使用 GitHub Actions 实现博客自动化部署

编程

如果大家以前是用过静态博客,比如Hugo、Hexo,可能配置过自动部署,也就是提交代码到源文件分支,自动生成静态文件提交到静态分支。静态博客的部署都是基于文件,目标只是一个Git仓库,一切都比较自然。那么如果是喜欢折腾,使用了动态博客呢?这里就涉及到服务器远程登录了。下面介绍一下我使用的方法。

PEP 582的开发日志

编程

PEP 582 是Python的一个隔离项目环境的提案。PDM作为现有的唯一一个具有完备PEP 582支持的包管理器,在实现的过程中也并非一帆风顺。本文将介绍一些关键PEP 582特性的实现方法和历程。

浅谈 Python 库的插件系统设计

编程

上一篇文章介绍了可选配型插件的实现的例子,这篇文章继续说说安装即生效的插件原理。

浅谈 Python 库的插件系统设计

编程

插件(Plug-in),扩展(Extension)或增件(Addon),都差不多指的是一个东西:为一个已有软件增添额外功能的组件。给软件设计一个易用和强大的插件系统,能让你的软件寿命更长,让整个社区来共同建设,符合开源的精神。

如何让你的开源项目看上去像那么回事

编程

题按:本文写给那些有志于加入到开源的世界的人们,主要以我的主力语言Python作为例子,但可适用于任何语言。

PDM - 一款新的 Python 包管理器

编程

去年临近跨年的某一天,一个包管理器突然在脑海中形成了蓝图。粗略地估计了一下我的编码能力,我认为这在我的能力范围之内,于是尽管年底非常忙,还要忙着晋升答辩的事情,我还是腾出空(摸鱼)写下了我的第一行代码。

百度低质回答是如何坑了你

编程

昨天某个新手又抛出来个问题:为什么找不到 django-admin 可执行程序?我一看这不是Python高频问题之一吗[^1]。

社区问答中需要避免的行为

编程

我日常会在TG群、QQ群、微信群和知乎上解答新手问题,一贯给人的印象都是态度不是很好,冷嘲热讽。这并不是因为我鄙视菜鸟,我也曾是菜鸟。除了一些我好为人师的性格之外,更多时候我希望提问者能自己意识到问题所在,为什么错了,这比他直接得到一个答案有帮助得多。这么久在社区里摸爬滚打以来,我发现一些问答上不好的行为,不吐不快。提问的方法这个问题,已经老生常谈,我不想再赘述,但必须再强调一次,阅读下面的链接应

Flask 博客接入第三方登录

编程

在上一篇文章中我留了一部分内容,就是如何给评论登录接入第三方登录。我不希望来访问我博客的用户有太大的登录成本,否则本想留下些话的人,就会被挡在这个门槛之外。Flask不像Django一样有各种现成的组件可以选用,Flask的各种扩展也不那么「开箱即用」。在我的博客项目中,我选用的是Authlib,它是国内的一名Python资深开发者@lepture开发的一款全面完善的OAuth认证库。大家可能在别

给你的 Git commit 加上绿勾

编程

今天无事翻看了几个Python开发者的Github,却发现大多数人的Git commit列表都是白茫茫一片。 大家乍一眼可能看不出有什么问题,那么看下面这张图就明白了: 没错,每条commit后面都有一个Verified绿标,我是一个对这些东西有偏执的喜好的人,只要见过别人有,那自己也一定要有。大多数人都会去追求全站HTTPS的那个绿色对勾(虽然新版Chrome变成一把暗淡的锁让人失去许多动力

使用 Flask 做一个评论系统

编程

因为我博客使用的Disqus代理服务下线,博客的评论系统可能有一阵子没有工作了。惭愧的是我竟然最近才发现,我的工作环境一直是没有GFW存在的,发现是因为有个朋友为了留言给我不惜通过赞赏1元钱的方式。赞赏功能也是我最近才上的功能,但我怎么是这么一个无良的博主呢,我认为一个好的评论交流环境还是非常有必要的。但是自建评论还是换用其他墙内友好的评论系统,我还是纠结了一阵的,大致上我有这么几个要求:主要服务

我的Python环境设置

编程

网上看到一篇博文,我突然也想写一下自己正在使用的Python环境设置,以及对应的工具链。众众众所周知,Python环境管理是个很大很大的坑,坑里面有无数新人or老司机的尸体。而Python环境管理的工具又五花八门,所以可能每个人的设置都不尽相同。我列出的我使用的工具链,至少最大地满足了自己的需求,但不一定满足所有人的需求。但我自认为在Python环境管理方面颇有心得,所以有一定的参考价值。我的需求

Flask前后端分离实践:Todo App(3)

编程

前序文章Flask前后端分离实践:Todo App(1)Flask前后端分离实践:Todo App(2)本文项目地址: https://github.com/frostming/flask-vue-todo作者按: 几天前我收到一封邮件,有读者说看了我的前后端分离实践的文章获益很多。然而我却丧尽天良的断更了?不行不行,我不是这样的人,所以一年后,我再补上这个系列最后一篇文章吧。CSRF防护如果你们

让你的Django应用变DRY的几个最佳实践

编程

目前在Python的Web框架中被应用最广泛的就是Django和Django REST Framework. 这两种框架都提供了非常健壮的功能,能满足Web开发的各个方面。DRY是Don't-Repeat-Yourself的缩写,是一种代码编写的原则,即不要重复自己的工作。我个人有些代码洁癖,凡是发现我需要复制粘贴代码的地方,就想着能怎样去除重复的工作。在日常的开发中也总结出了一些个人的实践,分享

Pip trusted_host问题记录

编程

问题定位一日我在Pipenv上收到一个issue: 用户说Pipenv执行的pip命令中--trusted-host缺少了port部分。然后我去扒源码,结果发现有两处同样的函数:[1][2]逻辑不一致。顿时感觉事情没那么简单。于是我本地搞了一个pypi server, 并用自签名支持了https,然后用pip测试1:BASH$ pip install -i https://localtest.me

Pipenv有什么问题

编程

这不是我第一次写Pipenv相关的文章,也相信不是最后一次,前两篇我用的是英文,(浅陋地)分析了Pipenv和Poetry的优劣,至今仍是我博客访问量最高的文章。今天是因为在知乎上看到两位朋友写的两篇文章(链接我放在文末了),吐槽了一通以后推荐大家不要使用Pipenv。说实话,作为核心维护者之一我是有点心酸的,因为他们说的那些问题的确都存在。在本文中我希望从一个核心维护者的角度,总结一下Pipen

使用Flask搭建个人博客

编程

我的个人博客从Hexo迁移到自建主机,主要是为了能自由的增减特性,和随时随地的更新博客(然而并没有)。所以考虑用Python的Web框架来写,由于我最开始是从Flask入门的,对它的源码也最了解,所以就选择了Flask。总的来说,一个个人博客网站,主要包含以下几个功能:文章的保存和展示文章的分类和标签文章的评论管理对于动态博客来说,还有博客的后台部分其中第4部分已经有单独的文章来介绍,使用的是前后

How does it work? -- threading.Condition

编程

继两年前的上一篇文章之后,不靠谱博主终于想起了How does it work这个坑。主要是近期也没有遇到可值得分享的「精巧」的实现。之前其实也过了一遍threading模块的源码,对里面的各种锁也只是有个大概印象,并且它们之前非常像,很容易让人confusing。这次碰到实际需要,于是仔细看了一下源码,发现还是有很多搞头的。当然,你只是使用的话照着例子用就好了不会出错,但还是值得花点工夫弄清里面

全新后台上线

编程

最近几周空余时间都在做博客后台的重构,主要是因为之前匆匆上线的后台略显简陋。这一次重构就是奔着前后端分离去的,也是为了练练自己的前端技能。主体框架使用了国人的Vue Element Admin,框架本身提供了丰富的机制,我做了大量的裁剪,主要保留了文章列表、文章编辑等模块,其他亮点有:主题颜色实时显示更新配置更新立即生效文章配置默认隐藏,更专注于写作全局国际化,选择语言立即生效独立集成工具页面,方

你的 Python 包都装到哪了?

编程

前言写这篇文章是因为最近在Python社区看到,有几个求助频率非常高的问题:我安装了pip为什么运行报找不到可执行文件?import module为什么报ModuleNotFound?为什么我用Pycharm能运行在cmd里运行不了?授人以鱼不如授人以渔,要解决这类问题,你得知道Python是如何找包的。希望看完这篇文章,能有所帮助。(主要还是下次再有人问,我就可以链接甩脸了哈哈)Python是如

A deeper look into Pipenv and Poetry

编程

It is 8 months passed since I posted the article comparing Pipenv with Poetry, which is the most popular article in my blog now. However, it was not a good review of the two tools, I have not even rea

Flask前后端分离实践:Todo App(2)

编程

前序文章Flask前后端分离实践:Todo App(1) 使用Vue.js搭建Todo App本文项目地址: https://github.com/frostming/flask-vue-todo在上一篇文章里我们已经用Flask+Vue搭建了一个可以把数据持久化到服务器的Todo App。那么,为了让多人一起使用这个App,我们需要对数据按用户做隔离,这样就自然需要一个注册/登录界面。在前后端分

Flask前后端分离实践:Todo App(1)

编程

前言:有句老话,叫做「现在都8102年了,你怎么还XXX?」。随着前端工具的越来越完善和好用,现在前端能做的东西,实在太多了。而现在主流的Flask教程,都是基于以往的服务端模板渲染的架构。这在2018年,未免有些过时和笨拙。我曾看过一个用Flask写的Todo项目,每个交互都要向服务端发送AJAX, 甚至连动态添加DOM元素都交由服务端渲染好再用jQuery添加。本系列文章,亦将由一个Todo

Python包管理工作流

编程

凡是一个成熟的软件生态都有它的软件源和对应的包管理工具,Python也不例外,pip就是它的(官方推荐的)包管理工具。可能很多小伙伴都对pip比较熟悉了,那么使用pip会有什么问题呢?使用requirements.txt管理依赖pip最普通的使用方法就是pip install <package_name>,如果要指定版本,可以用pip install <package_name&

Flask+Nginx博客容器化部署

编程

2019.03.05更新内容 0x08 HTTPS2019.08.09更新内容 使用构建好的Docker镜像2019.12.04更新内容 更新.env配置内容2020.05.19更新内容 简化部署步骤我是一个爱折腾的人,2016年才开始学会自建博客,到现在博文没写多少篇却折腾了好几回。经历了Hexo+GitHub Page,再到Flask+Heroku,现在终于用上了国内云服务+Nginx,感觉速

Python packaging war: Pipenv vs. Poetry

编程

This is my second post about Python packaging. In the last post, I regarded npm as my ideal packaging management tool because I had limited experience about other tools in other languages. Honestly sa

新域名!

编程

正式启用新域名,SSL enabled!旧域名已重定向。https://frostming.com折腾好久,disqus迁移,Google迁移。同时也踩了各种坑,heroku build pack的坑,flask-admin的坑。人生在世,哪里没坑。Bug处处存在,就算是大厂。

Codingame本周谜题「折纸曲线」解

编程

Codingame.com Puzzle of the Week: Paper folding curve题目简述一张纸,一直保持向同一个方向对折,然后将折痕展成直角。从侧面看去,纸的折角会构成一个折线。从纸的一端出发到另一端,每碰到一个折角,用1表示向左折,0表示向右折,则所有折角会构成一个1与0组成的序列,称为折叠序列。比如折一次是1,折两次是110,依次类推。给定折叠次数,要求输出折叠序列中

[译]Python正则表达式拾珠

编程

原文作者:Armin Ronacher 原文链接:http://lucumr.pocoo.org/2015/11/18/pythons-hidden-re-gems/Python标准库中有很多非常恶心的模块,但Python的re模块不是其中之一。虽然它已经很老了而且多年未更新,它仍是我认为的众多动态语言中最好的(正则表达式模块)。对这个模块,我经常能发现有趣的东西。Python是少有的几个,本身没

What's the problem about Python packaging?

编程

I have been using Python as my primary programming language for 4 years. It is elegant, easy coding and reading. I didn't notice the discomfort until I came to know about Node.js. All you need to do t

动态博客的后台定制

编程

搭建动态博客的初衷就是想随时随地,只要一个浏览器,就能更新博客。那么就需要一个后台来管理文章,包含文章编辑器,和各种表单控件。编辑器先来解决文本编辑器的问题,CKEditor 功能强大,但只是一个富文本编辑器。对于已经习惯 Markdown 写作的我来说,只管写,排版渲染就交给浏览器去做。找了很多内嵌 Markdown 编辑器,既要外观匹配,还要最好带预览功能。最终我选择了 Simple MDE。

How does it work - with_metaclass

编程

我在看源代码的时候,经常蹦出这一句:How does it work! 竟然有这种操作?本系列文章,试图剖析代码中发生的魔法。顺便作为自己的阅读笔记,以作提高。 先简单介绍下Python中的元类(metaclass)。元类就是创建类的类,对于元类来说,类是它的实例,isinstance(cls, metaclass)将返回True。Python中的所有类,都是type的实例,换句话说,type是元类的基类。使用type创建一个类的方法如下:

一万首的MP3,一万首疯狂的爱

编程

当今的互联网世界,就是腾讯和阿里两大阵营的对抗,音乐领域也不例外。自从版权纠纷尘埃落定以来,腾讯阵营囊括了QQ音乐、网易云音乐、酷狗及酷我,而阿里阵营则为虾米音乐与天天动听。要想能听到所有的歌曲,两个阵营都必须下载至少一个APP。其中用户量最大的当属网易云音乐、QQ音乐和虾米音乐。我获取了三个音乐APP的榜单数据,试着分析其用户喜好、曲库构成的异同。

Flask 实现远程日志实时监控

编程

更新于2019.11.18 去除业务相关逻辑 示例代码仓库在 https://github.com/frostming/flask-webconsole-example 前言 在自动化运维系统中,常常需要监控日志,这些日志是不断更新的。本文提供了一种实时日志监控的 Python 实现。主要实现以下功能: 抓取远程机器的终端输出到服务器上。 将服务器的日志更新实时显示到客户端网页上。 文中示例基于 Python 以及 Flask。 主要依赖: Flask Redis 及其 Python 客户端 paramiko

SQLite 爬坑记

编程

作为从零开始的Web开发人员,在项目开发中总是遇到这样那样的坑,其中数据库的坑最多。由于在功能完善过程中需要变换频繁,不可避免地要更改DB Schema,不过我都是能不改尽量不改。逃不过时,只能硬着头皮刚。 故事是这样的,我要把两个表中的某两列的类型由字符型改成列表。在数据库值类型中就是BLOB,ORM中叫做PickleType。数据库使用SQLite,ORM使用SQLAlchemy,并使用基于Alembic的自动化迁移工具,于是就开始了。

个人网站宣告上线

编程

生命不息,折腾不止。绕了一大圈,还是回到了 NexT 主题,在此特别感谢 IIssNan 做的这么赞的主题。自己也尝试过折腾主题,原先对前端望而却步,但当我真的学进去了,才发现这个世界上有模板语言,前端框架,有 F12,万物都为你准备好了,其实并没有那么难。喏,一个半成品在这里。说好看也好看,但自己的要求太高,而技术水平又跟不上,还是用别人成熟的主题吧,毕竟是第一受欢迎的 Hexo 主题,作者维护

如何编写向前兼容的 Python 代码

编程

本文翻译自 Armin Ronacher 的文章 Writing Forwards Compatible Python Code 对于网络应用来说,目前最安全的做法是仍然坚持使用 Python 2.x,即使是新的项目。一个简单的原因是现在 Python 3 还不支持足够多的库,而将已有的库移植到 Python 3 上是一个巨大的工作。当所有人都在抱怨升级到 Python 3 是如此艰难和痛苦的时候,我们如何才能让这件事变得容易一点呢? 对于一个顶层应用来说,如果它的依赖库移植后行为一致,把它升级到 Python 3 就不难了。其实升级到 Python 3 从来都不应该是一件痛苦的事。因此,本文尝试列举一些编写新的代码时应该和不应该做的事。

Python 有序字典的实现

编程

最近在看 requests 源码的时候看到作者使用了 urllib3 中自己实现的OrderedDict类,收获颇多。自己实现一个数据结构往往是最需要算法和优化的地方,各种语法糖黑科技,相当的 Pythonic,看这种代码实在是一种享受。如果要我自己实现的话,自己会想到用一个有序存储的对象(如列表)去 hack 内部的实现,但这样有几个缺点: 列表的插入、删除操作性能不如字典,复杂度是 O(N) 量级的。 自定义类需要继承于dict,没有利用继承的方法特性。 来看看大神是怎么实现的吧。

Python 列表小技巧

编程

Python中的列表和字典一样,都是可变数据类型,与字符串和整型相比,它具有一些独特的特性。在平常使用中, 也会经常遇到一些坑,本文试着举一些例子并说明。

Requests源码阅读v0.8.0

编程

工作两年了,一直用python写一些API之类的东西,自动化框架也有涉及,却一直感觉对个人技能提升缓慢。决定开这个坑,是之前看到@wangshunping的read requests,生动有趣,可惜0.8.0之后没有更新了。待我稍稍有了一点看源码的动力,就想接着下去写。真是漫漫长路啊,4409个commit,1000多个PR,更何况还有珠玉在前,实在没有把握能把这块硬骨头给啃下来,写一点是一点吧。作为python的小学生,一些错误在所难免,希望大家指出,互相讨论。 下面就开始吧!

在博客与笔记中使用Markdown

编程

博客的搭建 前段时间在 StackOverflow 与 Quora 上我接触到了 Markdown 标记语言,瞬时就被这种易用、美观、高逼格的东西所俘获,顿时深感之前在 QQ 空间之类的平台上写博的体验之差,往往调格式就要耗费很多的时间。于是就有了迁移到另一个博客平台的想法,用过的产品有: