V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lavande
V2EX  ›  Flask

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

  •  
  •   lavande · 2016-08-12 10:53:50 +08:00 · 9705 次点击
    这是一个创建于 2812 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

    能理解吗? 代理..

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

    好的. 差不多了.
    Allianzcortex
        24
    Allianzcortex  
       2016-08-12 14:46:29 +08:00
    @akring scp 上传本地文件到远程服务器

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

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

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