最近因为要重写之前发布在GAE上的一个博客,又回顾了一下python,同时,因为用的flask,gae等等,一道写一些小总结,供日后查阅。

1, slugify

其实这个问题可以不考虑,只要你愿意用中文做url的话(seo也挺友好哦)。我最终选择了如下方案,注意,需要pip install unidecode

from unidecode import unidecode

_punct_re = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+')

def slugify(text, delim=u'-'):
"""Generates an ASCII-only slug."""
result = []
for word in _punct_re.split(text.lower()):
result.extend(unidecode(word).split())
return unicode(delim.join(result))

这样就可以在去掉特殊字符的基础上,以汉语拼音来取代中文了。

2,coffee script默认return最后一个变量

在coffee script中,总是有return的,你不指定的话,那就是你的最后一句话,这对你要写一些jquery代码,注册事件反而有错误。要想生成的代码没有return,你可以在不需要return的地方自己return一下,或者return undefined
是的,这不属于python, flask或gae的范畴,管它呢。因为gae-init用的技术栈是python, flask, gae, ndb,jinja2, flask-wtf, coffeescript, less, bootstrip, font-awsome, bower, grunt...我其实是总结的用gae-init开发的经验

3, ndb查询关联表字段

在其它orm式的语法中,我们往往可以用entry.user.name这种写法来取得关联表user的字段信息,但在ndb中不行(你只往user往存key的情况下),但其实也非常简单,继续把这个对象取出来即可:entry.user.get().name.

  • 如果你的user不是一个KeyProperty,而是一个StructedProperty,那么就没这个问题,但这种情况下,user已经不是一个引用了;
  • 当然你也可以考虑建一个ComputeredProperty,避免频繁的get,但其实原理其实跟get是一回事了。

4,枚举列表元素出现的次数

这在任何语言都是一个经典场景,此次在我转移数据过程中,当然会碰到(比如每个tag下面有多少个文章),结果发现在python2.7下,已经相当简单了:

from collections import Counter

# recoculate tag and cate's entrycount
query = cms.Article.query().fetch(projection=['tags'])
tags = []
for item in query:
tags+=item.tags
ctr = Counter(tags)
ts = []
for k,v in ctr.items():
tag = cms.Tag(name = k, entrycount = v)
ts.append(tag)
ndb.put_multi(ts)

上例中,Counter()将每个元素作为键名,出现次数作为键值形成一个字典,用items()取出即可

5,使用memcache

网站更新后,才放上一天,datastore的免费指标就被跑光了,看样子,我错误地理解了“ndb默认使用缓存”这句话。

其实ndb只会在key.get()和model.get_by_id()的时候才会默认缓存,其它情况下都是需要自行使用memcache的,真是一个大乌龙。

暂这些,待更新吧

flask with gae开发小结的更多相关文章

  1. vue开发小结(下)

    前言 继前几天总结了vue开发小结(上)后,发现还有很多的点没有能列举出来,于是还是打算新建一个下篇,再补充一些vue开发中需要注意的细节,确实还是都是细节的问题,我只是在这里强调下,希望对大家有帮助 ...

  2. 运用flask、flask-restful开发rest风格的接口,并使用蓝图增加代码的延展性和可扩展性。

    本人做为一个测试人员,之前也有写过,想要测试好接口,那必须要知道如何开发一个接口的重要性. 之前也写过通flask或者flask-retful开发接口,但那些只是一些最简单的demo,不具有很好延展性 ...

  3. pdfjs viewer 开发小结

    此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...

  4. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  5. Android 即时通讯开发小结(一)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  6. python——flask常见接口开发(简单案例)

    python——flask常见接口开发(简单案例)原创 大蛇王 发布于2019-01-24 11:34:06 阅读数 5208 收藏展开 版本:python3.5+ 模块:flask 目标:开发一个只 ...

  7. 5Spring动态代理开发小结

    5Spring动态代理开发小结 1.为什么要有动态代理? 好处 1.利于程序维护 2.利于原始类功能的增强 3.得益于JDK或者CGlib等动态代理技术使得程序扩展性很强 为什么说使得程序扩展性很强? ...

  8. 移动Web开发小结

    以下是做移动端Web开发过程中小结的几个事项:希望能够帮助到大家,同时也方便自己查看: 1,在移动开发页面中,主体盒子的max-width与min-width的设置原因: ①设置max-width是为 ...

  9. flask 之定时任务开发

    最近开发我的接口测试平台 ,但是遇到了一个需求,需要开发定时任务,于是百度搜索,找到了这么一个叫 pFlask-APScheduler然后开始了我的第一次的学习,于是乎, 需求是这么的: 1.添加定时 ...

随机推荐

  1. DeepNLP的核心关键/NLP词的表示方法类型/NLP语言模型 /词的分布式表示/word embedding/word2vec

    DeepNLP的核心关键/NLP语言模型 /word embedding/word2vec Indexing: 〇.序 一.DeepNLP的核心关键:语言表示(Representation) 二.NL ...

  2. 轻松学习JavaScript二十七:DOM编程学习之事件模型

    在介绍事件模型之前,我们先来看什么是事件和什么是event对象. 一事件介绍 JavaScript事件是由訪问Web页面的用户引起的一系列操作,使我们有能力创建动态页面.事件是能够被 JavaScri ...

  3. am335x SPI spi_d0, spi_d1 out, in 模式设定

    AM335x SPI DO DI 的模式 参考: https://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/13826 ...

  4. 小米手机刷机工具MiFlash怎么用

    刷机包的获取:直接登陆MIUI系统官网(miui.com),在其“下载”栏目中根据手机类型找到对应的刷机包进行下载.   接下来就需要下载“小米手机刷机工具MiFlash”程序,可以直接从以下地址中获 ...

  5. Hibernate 查询说明

    1.Criteria setFetchSize实际上与分页操作并没有关系,它的作用是在查询中进行分批数据返回,其中的值就是每次分批查询的记录数,主要是为了提高查询性能的. 举个例子来说:如果你这次查询 ...

  6. hdfs清空回收站

    1. 直接删除目录(不放入回收站) hdfs dfs -rm -skipTrash /usr/tmp/log/ 2. 清空回收站 hdfs dfs -expunge

  7. 在controller中无法通过注解@Value获取到配置文件中定义的值

    1. 默认的我们通常只在dao层用到jdbc的配置,然后使用到@Value注解获取到值. 这时候会在spring-dao扫描中加入下面配置 <context:property-placehold ...

  8. 跨域通信--Window.postMessage()

    一.跨源通信概述 源:协议.端口号(https默认值433).主机域名(document.domain) 作用:向目标窗口派发MessageEvent消息(四个属性) 兼容参考 MessageEven ...

  9. Hibernate执行原生SQL

    1.查询指定字段 public List<Object[]> getUseList( Integer index, Integer offset, String state, String ...

  10. 使用 Gearman 实现分布式处理

    因为近来在研究 Mogilefs 的分布文件系统,在读读这个的源码,另外,为公司新设计了一个下载的系统,所以更加要深入研究一下,因为这个好东西是 Perl 写的,真不容易,在读这个的时间发现了几个好东 ...