原创文章

使用蓝图(Blueprint)组织Flask应用

在一些重量级Web框架中(如Laravel/Django),框架中已经预置了整个框架的目录结构,在没有特殊需求的情况下通常不会改变它。在Flask这类轻量级框架中,理论上你可以把一个项目的全部代码都放进一个.py文件中。然而一旦项目规模稍大,就会变得庞大而难以管理。这时,我们需要蓝图(Blueprint)来帮助我们管理代码结构。

蓝图

什么是蓝图

Flask用蓝图(blueprints) 的概念来在一个应用中或跨应用制作应用组件和支持通用的模式。蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。一个 Blueprint 对象与 Flask 应用对象的工作方式很像,但它确实不是一个应用,而是一个描述如何构建或扩展应用的蓝图 。
简而言之,我们可以将蓝图理解为Flask应用中的一个模块。(更多…)

Frank
原创文章

记第六届中国软件杯决赛

经过7月份的初赛,我们成功晋级了中国软件杯的决赛。9月4号,我们启程前往南京参加决赛。
关于比赛:大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办
我们的赛题:安全可靠赛题2:分布式爬虫系统 - 六届赛题 - 大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办

第一天 签到

9月4号,正好是学校开学第一天,我们一大早出发前往南京。第一周的课就先翘为敬了。
我们的车次是刚上线运行不久的复兴号,有车载WiFi,看了下IP应该是移动的4G,速度很良心。而且小桌板比和谐号更大,简直是为了车上赶代码量身定制的(误。 (更多…)

Frank
原创文章

Python异步任务队列

在开发的过程中,有时会需要用到类似下面的这些操作

  • 用户注册时发送认证邮件
  • 带有Web界面的爬虫
  • 定时计划任务
这些任务的共同特点是执行所需的时间较长,但是我们又不希望其阻塞后续的操作。因此我们将这些任务放进任务队列里来运行。Python常见的异步任务队列实现有功能较丰富的Celery和轻量级的RQ,本文以celery为例。Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统。 Celery经常和RabbitMQ同时提起,但实际上,RabbitMQ和celery并不是同一层面的东西。Celery需要存储介质来存储任务(称为broker),可选的broker有RabbitMQ, redis, mysql, mongodb等。 (更多…)

Frank
原创文章

使用scrapy构建爬虫

新建一个scrapy项目

[crayon-5ba1a5b467607824379800/]scrapy会初始化一个项目,项目文件包括:
  • [crayon-5ba1a5b46760c330746611-i/]定制需要储存的文件的域,类似于orm
  • [crayon-5ba1a5b46760d704357523-i/]管道
  • [crayon-5ba1a5b46760e989079153-i/]设置相关参数
  • [crayon-5ba1a5b46760f793517997-i/]文件夹 定制爬虫
scrapy爬虫的组成 scarpy抓取一个页面的大致流程:
  1. 下载器下载HTTP响应内容
  2. 下载器传给执行回调函数进行解析
  3. 解析后调度器进行过滤,查重等等
  4. 将数据传给管道,作进一步处理
(更多…)

Frank
原创文章

Python实现微博与twitter单向同步

关于本项目

我在过去一段时间内都使用的是IFTTT的Recipe进行同步。但是IFTTT的同步有些缺陷:
  1. 不能判断该条微博是原创还是转发,因此转发的微博也会被同步过去,把时间线弄得一团糟
  2. 不能发图,而是将图片以链接的形式替换。访问图片要经过至少两次短连接跳转,体验极差。
为了改善上述两个问题我写了一个简陋的同步程序,用于将新发布的微博同步至twitter。项目地址:https://github.com/nyanim/wb2t(更多…)

Frank
原创文章

nginx+uwsgi部署django应用

几个月之前写了一个django应用,现在记录一下部署过程,不然之后需要的时候就该忘了。

准备工作

项目完成之后首先运行开发服务器测试,确保无误。[crayon-5ba1a5b467e0c479132266/]安装一些东西[crayon-5ba1a5b467e11188777227/]安装supervisor,用来管理uwsgi[crayon-5ba1a5b467e12959489999/]安装uwsgi[crayon-5ba1a5b467e13888286762/]用uwsgi手动运行项目进行测试[crayon-5ba1a5b467e14789714214/]按理说我们应该使用supervisor来管理uwsgi,然而我这里遇到了一些麻烦。在我的ubuntu测试环境上,只要一启动supervisord,内存就会蹭蹭蹭往上涨,直到全部内存都吃掉之后卡死。Image 055反正我也没有那么多的项目要管理,所以直接放弃这货。(更多…)

Frank
原创文章

通过python与网易云音乐同步的音乐电台

传送门请戳页面上方的“音乐电台”

在一年前我做了一个音乐电台==>https://blog.nyan.im/posts/891.html现在我又把它翻出来了,

有两个目的

  1. 之前的背景图片轮播是用modernizr实现的,虽然很漂亮但是性能极差,通常载入时间要长达半分钟,还会莫名其妙的卡死。至于原因我也不清楚,因为不是我写的。
  2. 它的播放列表在一个js中,一首歌的格式是这样的:

[crayon-5ba1a5b4687a2378579178/]

手动添加列表是一件很恐怖的事情,我需要一个方案来将这个过程全自动化,并且与我的网易云音乐歌单同步。(更多…)

Frank