flask 开发的正确姿势是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lavande
V2EX    Flask

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

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

    我在搞一个小项目,现学现卖,基于 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
    Hyponet
        1
    Hyponet  
       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 直接复制过去)
    Em5O7B1JGfjQnBry
        5
    Em5O7B1JGfjQnBry  
       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 ,不过我之前没说清楚,现在在主贴更新了,就是微信公众平台的开发……特别矛盾,似乎没法在本地搞
    RealLiuSha
        23
    RealLiuSha  
       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!!!
    RealLiuSha
        25
    RealLiuSha  
       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 到服务器,可以把本地端口映射到远程服务器,让外部访问本地端口
    unifier
        40
    unifier  
       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     Solana     5735 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 06:25 PVG 14:25 LAX 22:25 JFK 01:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86