博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask with gae开发小结
阅读量:7211 次
发布时间:2019-06-29

本文共 1745 字,大约阅读时间需要 5 分钟。

最近因为要重写之前发布在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的范畴,管它呢。因为用的技术栈是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 entrycountquery = cms.Article.query().fetch(projection=['tags'])tags = []for item in query:    tags+=item.tagsctr = 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的,真是一个大乌龙。

暂这些,待更新吧

转载于:https://www.cnblogs.com/walkerwang/p/3753720.html

你可能感兴趣的文章
Java基础-SSM之mybatis快速入门篇
查看>>
error C2220: 警告被视为错误 - 没有生成“object”文件
查看>>
IO is frozen on database xxx, No user action is required
查看>>
执行perl xttdriver.pl报错Can't locate Getopt/Long.pm in @INC
查看>>
log4j的最佳实践(转)
查看>>
linux中 jdk 的卸载和安装[转]
查看>>
Install And Configure ColdFusion MX 6.1 on Windows
查看>>
[转]Error: "SQL BPA command line has encountered a problem and needs to close"
查看>>
objective-C 的内存管理之-引用计数
查看>>
如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
查看>>
通过TextWatcher去观察输入框中输入的内容以及输入字符个数
查看>>
C#窗体控件-单选按钮控件RadioButton
查看>>
[C++]红色波浪线是什么意思
查看>>
tomcat之 JDK8.0安装、tomcat-8.5.15安装
查看>>
Android ADB命令
查看>>
Java调用Lua脚本(热载实现)
查看>>
排除“使用主题 css 文件要求页上有标头控件。(例如 <head runat="server" />)”错误...
查看>>
jdk1.7的新特性
查看>>
关注一下IBM工具
查看>>
JS 英文不截断单词截取
查看>>