V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LiuXuFei
V2EX  ›  Python

用 flask 如何做配置不同的子站比较优雅?

  •  
  •   LiuXuFei ·
    liuxufei · 2016-08-01 15:54:17 +08:00 · 3240 次点击
    这是一个创建于 2829 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库(不同子站前缀不同)一样,模板一样,其他也基本相同,只是有些配置不同,可以下不同的配置文件里。

    目前有三个子站,未来随时可能增加子站,只是配置不同,用 flask 如何做比较优雅?
    12 条回复    2016-08-04 09:57:23 +08:00
    honmaple
        1
    honmaple  
       2016-08-01 16:16:15 +08:00
    1.开三个 app
    2.
    a 配置
    app.register_blueprint(site, subdomain='a')
    b 配置
    app.register_blueprint(site, subdomain='b')
    c 配置
    app.register_blueprint(site, subdomain='c')

    site 是一样的,不知道这样行不行
    awanabe
        2
    awanabe  
       2016-08-01 16:20:22 +08:00
    @honmaple blueprint 是不行的, 要写属于自己蓝图的 route 。同样的方法名还会报错呢


    配置不同这种东西, 就是复制一份, 改配置,上线。
    最好就是做一个 generator ,一句命令生成所有相同的结构, 再把 config 丢进去就好了
    LiuXuFei
        3
    LiuXuFei  
    OP
       2016-08-01 16:22:41 +08:00
    @honmaple

    目前我就是用这种方式,但是没用子域名

    app.register_blueprint(site, url_prefix='/aaa')
    app.register_blueprint(site, url_prefix='/bbb')
    app.register_blueprint(site, url_prefix='/ccc')

    我刚入 python 的坑。
    但是还不懂如何只使用一个 models 文件,和调用不同的配置文件。
    LiuXuFei
        4
    LiuXuFei  
    OP
       2016-08-01 16:25:51 +08:00
    @awanabe 就是不想做复制,只用一份代码,增加配置文件就可以上线,也不需要子域名。
    honmaple
        5
    honmaple  
       2016-08-01 16:26:26 +08:00
    @awanabe 谢谢提醒,blueprint 这块现在想想的确是不行的,templates 上的 url_for 不同
    LiuXuFei
        6
    LiuXuFei  
    OP
       2016-08-01 16:36:28 +08:00
    @honmaple url_for('.index') 这样写就行了吧
    honmaple
        7
    honmaple  
       2016-08-01 16:44:06 +08:00
    @LiuXuFei 不对啊,我试了一下,url_for('.index')只能得到 url_prefix='/aaa'的 url,输入 /bbb 会重定向到 /aaa
    honmaple
        8
    honmaple  
       2016-08-01 16:46:41 +08:00
    @LiuXuFei 我目前想到的办法是用 g 保存,url_for(g.prefix + '.index')
    LiuXuFei
        9
    LiuXuFei  
    OP
       2016-08-01 16:46:55 +08:00
    @honmaple 我刚也试了,你说的对,不好意思
    gevin
        10
    gevin  
       2016-08-01 20:23:29 +08:00
    做成 docker image ,分别拉起三个实例就可以
    serial
        11
    serial  
       2016-08-01 21:11:40 +08:00
    从最基本的思想就是错误的。一旦作为站点,就应该算作一个独立的资源。一个资源中套其他资源,天长日久,你的代码完全没有可维护。

    每个站点有一份代码拷贝,和一个独立的 conf 配置文件(该站点的 Ip 、 port 、...)。使用 Nginx 作为前端代理,接入后端的多个子站。

    编写一个自动化脚本,部署各个子站。
    LiuXuFei
        12
    LiuXuFei  
    OP
       2016-08-04 09:57:23 +08:00
    @gevin
    @serial 谢谢,某些原因不想这么使用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2277 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:02 · PVG 14:02 · LAX 23:02 · JFK 02:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.