最近在用flask+mongodb做一个论坛,做了很久。有些体会和大家分享下。
- 学东西一定要仔细看文档,多看几遍;很多东西其实在文档里已经说明了的,
不需要在去搜,而且不一定能搜到。 - 有些事去做的时候一定要专注。
- 有些时候人很容易钻牛角尖,可以试试放段时间再去解决。
Flask-MongoEngine
文档在http://flask-mongoengine.readthedocs.org/en/latest/。
使用分页的时候报 xrange 错误,是因为在python3里面已经没有这个内置函数了,
可以把python里面的site-packages/flask_mongoengine/pagination.py里面的109行
的xrange改为range就可以了。
Flask-Login
文档在http://flask-login.readthedocs.org/en/latest/,
这里有个中文翻译https://github.com/yinian1992/flask-login-docs-cn/blob/master/index.rst。
在登录限制里和mongodb用时可以这样用,放在了models.py里
1 |
|
User是用户类,继承了flask.ext.login.UserMixin和flask.ext.mongoengine.MongoEngine的Document。
在视图里
1 | from flask.ext.login import login_user |
函数里的user就是一个User类的实例。
jinja
flask默认的模板引擎是jinja。
我有个回复的list列表,要在模板里列出他的楼数。
python里可以这样:
1 | l = ['a', 's'] |
就会输出
1 | 0 s |
但是在模板里不方便这样。可以看jinja的文档 for
http://jinja.pocoo.org/docs/templates/#for。
用 variable
里的 loop.index
实现 以 1
开始的索引数。
flask-mail
官方文档:http://pythonhosted.org/flask-mail/
下面是用126邮箱的例子,
1 | # email server |
是用app.config来配置,app=Flask(name)
文档有的就不说了,我来说说我碰到的问题。
1.说不在上下文中
需要 @copy_current_request_context
,
从 from flask import copy_current_request_context
引入。 而且还必须在路由视图里才有效,不然还会报其他错误。
2.smtplib报encode(‘ascii’)错
把764行的 msg = _fix_eols(msg).encode('ascii')
改为msg = _fix_eols(msg).encode()
, 他在python安装目录里面。
具体看他报错的信息吧。