设为首页 收藏本站
查看: 416|回复: 0

[经验分享] 自己在VPS上使用 Flask + sqlalchemy + jinja2 + nginx + mysql 架一个小站

[复制链接]

尚未签到

发表于 2016-10-23 06:15:21 | 显示全部楼层 |阅读模式
  转自我的邮件列表分享。
  
  学python断断续续,算是初学,一直在组内潜水。
10年末自己尝试写了2个微型网站,一个还扎在手里,
还有一个就是这个篱笆网(http://liba.co)。
liba.co使用的python实现,前端我是白痴级别(囧)。

有些东西,我是一边学一边用,简要罗列一下使用的一些东东!


  • 一、web框架
经常看到邮件列表里有人询问使用什么框架,推荐五花八门(说明python还是很精彩),甚至是些无意义的互掐。
之前接触过django,再转到web.py,再到Flask(http://flask.pocoo.org/),现在再也不想回头了。

在测试中发现django以及web.py的url匹配不是最长匹配原则,差点晕倒(是我错了吗?!,谁可以解答一下)。

不太喜欢单独使用一个文件去配置url与方法的映射,还是Flask来得直接,不用把url和url绑定方法分在2个文件中:
@app.route('/')
@app.route('/index.htm')
def index():
    return 'index'

@app.route('/user/login.htm', methods=['GET', 'POST'])
def login():
    form = LoginForm(request.form, csrf_enabled=True)
    return render_template('login.htm', form=form)
在模板和代码中可以很优雅的这样引用这个url,不用再硬编码和拼凑url:
url_for('login')

对于Flask还有很多扩展的组件(http://flask.pocoo.org/extensions/, 这网站上有不少精品),很好使。
我使用到的是:Flask-WTF(form)、Flask-sqlalchemy 、Flask-csrf

Flask非常容易上手使用,介于djiango和web.py之间。
列表中似乎没人推荐Flask,觉得有点怪,难道我口味特别?!

以前还用了一下limodou的Uliweb,结果报了异常,没继续下去,呵呵。


  • 二、jinja2
看到网上有个渲染性能的对比,jinja2要远远优于django,比mako还要好,甚至比Java velocity还要好(网址一时找不到,有找到的可以贴一下)。
在使用django-template写前端时,一次想把2个变量相加,折腾了半天没整出来(理解太浅,我太菜了)。
还有在模板中使用宏,也把我折腾的够呛(没捣鼓出来,囧),甚是恼火,立即抛弃,所以转到mako。
mako不错,写模版与写python差不多,也挺好。
由于我使用Flask,默认使用jinja2,看了一下jinja2后,发现并不比mako差,也是python风格,写起来很顺手。
jinja2知识点比较多但不难,模板继承、引入、宏等等,其他就是和写python没啥区别了,自己扫扫吧。


  • 三、ORM
sqlalchemy与django-orm就没有太多的必要了,我想在django-orm执行一个复杂的raw sql,那个费劲,受到多次打击,身心疲惫,无心继续下去。
sqlalchemy很强大,目前也只是使用到部分功能,对于关联关系这块更本就没使用到,牛刀小试。
这也符合一个规则,网站的应用一般关系都很很简单,或由应用保证关系。
一般用法也就是:
carpools  = db_session.query(CarpoolExt).order_by(CarpoolExt.pub_date.desc()).offset((cpage-1)*PAGE_SIZE).limit(PAGE_SIZE).all()
carpool = db_session.query(CarPool).filter(CarPool.id == id).first()
没有了SQL,虽然只是用到部分功能,但也省了不少事。也可以执行自定义的raw sql。

稍微复杂点的(复合条件):
        start_conds = None
        end_conds = None
        route_conds = None
        for kw in fkws_list:
            start_conds = or_(start_conds, or_(CarpoolExt.start_city.like('%'+kw+'%')))
            start_conds = or_(start_conds, or_(CarpoolExt.start_addr.like('%'+kw+'%')))
        for kw in tkws_list:
            end_conds = or_(end_conds, or_(CarpoolExt.end_city.like('%'+kw+'%')))
            end_conds = or_(end_conds, or_(CarpoolExt.end_addr.like('%'+kw+'%')))
            route_conds = or_(route_conds, or_(CarpoolExt.route.like('%'+kw+'%')))
        conds = start_conds
        if end_conds is not None:
            conds = and_(conds, or_(end_conds, route_conds))
        carpools = db_session.query(CarpoolExt).filter(conds).order_by(CarpoolExt.pub_date.desc()).offset((pn-1)*PAGE_SIZE).limit(PAGE_SIZE).all()


  • 四、http
发现nginx太适合了,只占用2-3M内存,且很稳定,在小内存的VPS很难有超过的,apache占了近20M,nginx表现太好了,没搞lighttpd。
看附件性能图片。


  • 五、mysql
mysql数据库, 只要9M内存就跑起来了,需要优化,不要使用默认配置。
mysql不需要支持InnoDB的存储(默认是支持的),很耗,注释掉,这个点相差巨大。
数据量在50W内,mysql表现还是相当不错的(只占用9M还能咋样),量再大,可以考虑使用Sphinx+mysql实现实时索引(目前没整这点)。

  • 六、VPS
Run在Debian5-64bit 256M 的VPS上,可能有同学怀疑跑不起来,看张附件图吧,内存只使用了120M。
每月花费7$,基本与共享空间查不多了,推荐使用VPS,喜欢python的基本属于折腾类型。


参观访问请移步至篱笆网: http://liba.co

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-289923-1-1.html 上篇帖子: Windows下PHP5、Apache及mysql的的安装与配置 下篇帖子: 用jsp备份MYSQL数据库的方法(mysqldump: Got error: 1045)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表