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

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

蓝图

什么是蓝图

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

简而言之,我们可以将蓝图理解为Flask应用中的一个模块。

Continue reading “使用蓝图(Blueprint)组织Flask应用”

记第六届中国软件杯决赛

经过7月份的初赛,我们成功晋级了中国软件杯的决赛。9月4号,我们启程前往南京参加决赛。

关于比赛:大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办
我们的赛题:安全可靠赛题2:分布式爬虫系统 – 六届赛题 – 大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办

第一天 签到

9月4号,正好是学校开学第一天,我们一大早出发前往南京。第一周的课就先翘为敬了。

我们的车次是刚上线运行不久的复兴号,有车载WiFi,看了下ip应该是移动的4G,速度很良心。而且小桌板比和谐号更大,简直是为了车上赶代码量身定制的(误。
Continue reading “记第六届中国软件杯决赛”

Python异步任务队列

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

  • 用户注册时发送认证邮件
  • 带有Web界面的爬虫
  • 定时计划任务

这些任务的共同特点是执行所需的时间较长,但是我们又不希望其阻塞后续的操作。因此我们将这些任务放进任务队列里来运行。

Python常见的异步任务队列实现有功能较丰富的Celery和轻量级的RQ,本文以celery为例。

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统。
Celery经常和RabbitMQ同时提起,但实际上,RabbitMQ和celery并不是同一层面的东西。Celery需要存储介质来存储任务(称为broker),可选的broker有RabbitMQ, redis, mysql, mongodb等。
Continue reading “Python异步任务队列”

使用scrapy构建爬虫

新建一个scrapy项目

scrapy会初始化一个项目,项目文件包括:

  • items.py定制需要储存的文件的域,类似于orm
  • pipelines.py管道
  • settings.py设置相关参数
  • spider文件夹 定制爬虫

scrapy爬虫的组成

scarpy抓取一个页面的大致流程:

  1. 下载器下载HTTP响应内容
  2. 下载器传给执行回调函数进行解析
  3. 解析后调度器进行过滤,查重等等
  4. 将数据传给管道,作进一步处理

Continue reading “使用scrapy构建爬虫”

网易云音乐解析下载器

由于2016年网易云音乐的API变化,由旧API解析出的mp3文件URL全部失效。因此我基于musicbox项目中封装的新版API制作了这个下载器,用于通过歌曲,歌单或专辑id解析及下载mp3文件。

应用地址:http://nem-downloader.nyan.im
源代码:https://github.com/nyanim/nem-downloader
API相关文档:https://github.com/darknessomi/musicbox/wiki/

Continue reading “网易云音乐解析下载器”

Python疑难解答笔记

目录

  1. 格式化输出list, dict等数据结构
  2. 实例方法与类方法
  3. UnicodeEncodeError: ‘ascii’ codec can’t encode

格式化输出list, dict等数据结构

使用pprint模块


Continue reading “Python疑难解答笔记”

Python实现微博与twitter单向同步

关于本项目

我在过去一段时间内都使用的是IFTTT的Recipe进行同步。但是IFTTT的同步有些缺陷:

  1. 不能判断该条微博是原创还是转发,因此转发的微博也会被同步过去,把时间线弄得一团糟
  2. 不能发图,而是将图片以链接的形式替换。访问图片要经过至少两次短连接跳转,体验极差。

为了改善上述两个问题我写了一个简陋的同步程序,用于将新发布的微博同步至twitter。

项目地址:https://github.com/nyanim/weibo-twitter-sync-bot-public

Continue reading “Python实现微博与twitter单向同步”

nginx+uwsgi部署django应用

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

准备工作

项目完成之后首先运行开发服务器测试,确保无误。

安装一些东西

安装supervisor,用来管理uwsgi

安装uwsgi

用uwsgi手动运行项目进行测试

按理说我们应该使用supervisor来管理uwsgi,然而我这里遇到了一些麻烦。在我的ubuntu测试环境上,只要一启动supervisord,内存就会蹭蹭蹭往上涨,直到全部内存都吃掉之后卡死。

Image 055

反正我也没有那么多的项目要管理,所以直接放弃这货。

Continue reading “nginx+uwsgi部署django应用”

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

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

在一年前我做了一个音乐电台==>https://blog.nyan.im/posts/891.html

现在我又把它翻出来了,

有两个目的

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

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

Continue reading “通过python与网易云音乐同步的音乐电台”