V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
lavande
V2EX  ›  Flask

flask 开发的正确姿势是什么?

  •  
  •   lavande · Aug 12, 2016 · 10989 views
    This topic created in 3546 days ago, the information mentioned may be changed or developed.

    我在搞一个小项目,现学现卖,基于 flask 写的,但是感觉做法很不专业,应该怎样提高效率呢? 现在的做法是: ssh 登录服务器, nano 打开一个 py 文件,敲代码,保存退出, flask 运行代码,打开网页观察,出错之后重复以上步骤修改…… 感觉很不对!

    Supplement 1  ·  Aug 12, 2016
    多谢大家回复!
    我有个地方没说清楚,没来在想能不能本地开发的,但是因为做的是微信公众平台相关的东西,然后一上来就要我绑定一个服务器,然后我就去买了腾讯云,而且不是买了给它 IP 地址就行,而是要接住微信 POST 过来的参数,然后验证之后返回给它……
    于是我就在服务器上直接开始写了,然后发现后面接收公众号消息啊之类的功能也是直接推到服务器的,我在本地开发的话,没法接受微信服务器过来的信息啊,已经绑定了 IP ,而且我自己本地的 IP 是不确定的……
    Supplement 2  ·  Aug 15, 2016
    感谢大家回复,学习了!
    50 replies    2017-04-06 10:10:53 +08:00
    Hyponet
        1
    Hyponet  
       Aug 12, 2016
    你是问 flask 怎么用还是怎么开发- -

    最简单的就是用 ide 比如 pycharm ,然后本地 debug ,本地搞得差不多再发布

    不过话说少年你很有线上 debug 的潜质啊
    wbolor
        2
    wbolor  
       Aug 12, 2016
    简单点就使用 git , 本地在一个分支开发, 线上 master 分支,部署的时候拉 master 分支代码就好了。。。
    yh7gdiaYW
        3
    yh7gdiaYW  
       Aug 12, 2016
    推荐先本地用 pycharm ,自带 flask 支持(比如进入 templates 的 html 页可以提示你传进来的变量)。然后 push 到 git 上,例如 github&coding 。最后 ssh 到你的服务器里 checkout&pull
    yh7gdiaYW
        4
    yh7gdiaYW  
       Aug 12, 2016
    (不过我更喜欢本地写完后, xftp 直接复制过去)
    Em5O7B1JGfjQnBry
        5
    Em5O7B1JGfjQnBry  
       Aug 12, 2016 via Android
    先本地开发,觉得可行之后,然后发布上服务器,另,学学 vim/Emacs ,在服务器端其实挺方便的
    incesa
        6
    incesa  
       Aug 12, 2016
    @yh7gdiaYW 开是我也这样 后代代码修改的次数多了 就乱套了
    Kilerd
        7
    Kilerd  
       Aug 12, 2016
    兄弟,你的姿势很优雅。

    讲道理,你的开发姿势完全错了吧。

    首先你要有一个编辑器 /ide 。 本地用 virtualenv 隔离 python 包(可有可无,建议用上)

    本地创建 flask 工程。 用 `app.run(debug=True)` 启动内置调试服务器(当你修改 py 文件,工程会自动重新加载。)

    在本地 修改 /编写 /调试 好项目之后, 再推送到服务器上去

    推送方式 git / ftp / 手动复制 随便选。

    服务器部署的话,可以用上 docker. 不会的话可以直接用 nginx + flask + gunicorn
    troywinter
        8
    troywinter  
       Aug 12, 2016
    在服务器上开发的话,多开几个 ssh session 就行了,这边改代码保存,那边运行,不用这么麻烦的来回切换。
    cxh116
        9
    cxh116  
       Aug 12, 2016
    你再只需要一个 tmux 就可以了
    zhuangzhuang1988
        10
    zhuangzhuang1988  
       Aug 12, 2016
    服务器上开发
    大哥, 你牛..
    g0thic
        11
    g0thic  
       Aug 12, 2016
    大兄弟你是运维出身的吧
    akring
        12
    akring  
       Aug 12, 2016
    搭车同问 Scrapy 爬虫如何部署到 VPS 上?
    vinan143
        13
    vinan143  
       Aug 12, 2016
    服务器上还用 nano 的都是高手中的高手
    masterzh01
        14
    masterzh01  
       Aug 12, 2016
    vim + git
    SlipStupig
        15
    SlipStupig  
       Aug 12, 2016
    @akring web hook+corntab
    akring
        16
    akring  
       Aug 12, 2016
    @SlipStupig 多谢!
    alittletrain
        17
    alittletrain  
       Aug 12, 2016
    pycharm 可以直接在远程服务器上获取 /拉取文件, 你修改后可以自动上传到服务器上,注意(这是非 GIT 的方式),不过好在 pycharm 在本地有历史记录。
    同理 phpstorm
    guyskk
        18
    guyskk  
       Aug 12, 2016
    7 楼正解
    likuku
        19
    likuku  
       Aug 12, 2016
    nano 。。。第一次登录服务器就是卸载 nano
    ericls
        20
    ericls  
       Aug 12, 2016
    第一步 git init
    第二步 vim tests.py
    wbt
        21
    wbt  
       Aug 12, 2016
    一般不是在本地开发然后部署到远程么?直接在远程开发不便于调试以及多人协作。
    lavande
        22
    lavande  
    OP
       Aug 12, 2016
    多谢大家!等下我来搞个 git ,再搞个 IDE ,不过我之前没说清楚,现在在主贴更新了,就是微信公众平台的开发……特别矛盾,似乎没法在本地搞
    RealLiuSha
        23
    RealLiuSha  
       Aug 12, 2016
    首先, 我不管你怎么管理代码

    开发微信? 把域名解析到公网 对的, 微信需要验证域名的所有权, 你解析完后,公网服务器把流量转发到内网你的机器上?

    能理解吗? 代理..

    OK, 这个时候你该整个 sublime 了 它能帮助你比较搞笑的开发, 当然 pycharm 也是个好选择..

    好的. 差不多了.
    Allianzcortex
        24
    Allianzcortex  
       Aug 12, 2016
    @akring scp 上传本地文件到远程服务器

    用 pycharm+IDEAvim , yeah!!!
    RealLiuSha
        25
    RealLiuSha  
       Aug 12, 2016   ❤️ 1
    啪啪打脸了 不是搞笑 是高效>..
    lxy
        26
    lxy  
       Aug 12, 2016
    搞个 git 私有仓库,开个 dev 分支,本地开发测试完成一个功能就推送到远程 master 分支。服务器拉取 master 。
    部署 nginx+gunicorn+gevent+virtualenv+supervisor 。
    本地模拟测试的话,有很多测试提交工具,比如 fiddler ,或者直接用 requests 库手写也可以。
    MARCH0
        27
    MARCH0  
       Aug 12, 2016
    我用 winscp+sublimetext
    lavande
        28
    lavande  
    OP
       Aug 12, 2016
    @lgpqdwjh 对哦!我忘了还可以代理
    ooo000
        29
    ooo000  
       Aug 12, 2016
    你在做这个项目吗?[基于 Flask 及爬虫实现微信“讲笑话”机器人]( https://zhuanlan.zhihu.com/p/21921164)
    tagtag
        30
    tagtag  
       Aug 12, 2016
    坐着开发,能站得住也行
    Losses
        31
    Losses  
       Aug 12, 2016
    又开始折腾了?这次搞的是什么 =w=?
    lavande
        32
    lavande  
    OP
       Aug 12, 2016
    @Losses 惊现螺丝!!!
    lavande
        33
    lavande  
    OP
       Aug 12, 2016
    @ooo000 并不是,不过你发的这个挺有意思,我来瞧瞧!
    armoni
        34
    armoni  
       Aug 12, 2016
    微信公众号有个测试账号的,你可以直接把 IP 映射到你的个人电脑上调试开发
    lavande
        35
    lavande  
    OP
       Aug 12, 2016
    @armoni 我现在就是用的测试帐号,不过一开始没多想,觉得自己 IP 一直变,就去绑定了腾讯云。。。。
    nisekoi
        36
    nisekoi  
       Aug 12, 2016 via iPhone
    QQ 浏览器有个扩展,配合官方调试工具可以本地开发
    xq5he
        37
    xq5he  
       Aug 12, 2016
    你可以试一下 localtunnel https://localtunnel.github.io/www/ 注册一个微信的测试账号,服务器地址填 localtunnel 生成的地址,这样你就可以在本地开发了。
    huijian222
        38
    huijian222  
       Aug 12, 2016
    本地开发 然后推送到 CODING 或者 GITHUB 然后 设计 WEBHOOK 然后本地更新完后推送到代码托管平台 服务器自动 GIT PULL 齐活
    flyingnn
        39
    flyingnn  
       Aug 12, 2016 via Android
    ssh 到服务器,可以把本地端口映射到远程服务器,让外部访问本地端口
    unifier
        40
    unifier  
       Aug 12, 2016
    话说 pycharm 也可以通过 sftp 来直接改线上代码吧
    9hills
        41
    9hills  
       Aug 12, 2016
    1.本地编辑,本地测试
    2.debug=True
    limbo0
        42
    limbo0  
       Aug 12, 2016
    有个折衷办法, 可以开个 samba 服务 本地 ide 调试
    iyaozhen
        43
    iyaozhen  
       Aug 12, 2016 via Android
    还是要本地开发,效率更高。你可以直接打开远程文件或者本地文件和远程同步,方案有很多。不过像公司内的话有跳板机,比较麻烦,一般是 rz 文件上去调试。

    你说你是微信开发,这就需要你首先先把微信 XML 解析的方法调试封装好,然后业务逻辑本地开发、调试然后再线上验证。需要自己代码很好的模块化。实在不行的话也有很多本地模拟微信服务器发包的工具,或者远程服务器的请求转到本地。

    值得欣慰的是楼主能感觉到不对
    zhangkaizhao
        44
    zhangkaizhao  
       Aug 13, 2016
    嗨,你真的是在正常开发么?
    请查阅 unittest/mock 先。
    shajiquan
        45
    shajiquan  
       Aug 13, 2016
    放弃。。。
    wind3110991
        46
    wind3110991  
       Aug 13, 2016
    flask 本地开发测试完,直接扔 docker 里配置 dockerfile ,打包好镜像然后部署到服务器上
    GreatMartial
        47
    GreatMartial  
       Aug 13, 2016 via Android
    我用 sae 开发微信,都是在服务器上调试,好麻烦。
    adoal
        48
    adoal  
       Aug 14, 2016
    几个思路:
    1. ssh 到服务器上现场开发其实没啥不专业的,但是用 nano 来些 python ……这事恐怕会很难受,建议还是用 vim 或 emacs ,然后好好配置一下,会方便很多的。
    2. 可以 ssh 到服务器,利用 ssh 的 tunnel 做一下端口映射,把服务器上某个端口用 ssh -R 映射到本地电脑来做开发。
    3. 可以用 PyCharm 之类的 IDE ,仍然是在 IDE 理配置 ssh 到服务器,但是 IDE 本机运行,做远程开发。
    4. 印象中微信有在本机做开发的 SDK 啊……
    lavande
        49
    lavande  
    OP
       Aug 15, 2016
    @xq5he 这个服务看起来好棒,多谢
    lidalve
        50
    lidalve  
       Apr 6, 2017
    pycharm 企业版有 deployment 功能,直接本地开发上传文件的,研究下就 OK 了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1205 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 23:15 · PVG 07:15 · LAX 16:15 · JFK 19:15
    ♥ Do have faith in what you're doing.