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

求推荐一个可以快速开发 web 界面的框架,后端使用 Python

  •  
  •   shepherd · 8 天前 · 1916 次点击

    背景

    题主想做一个分布式的任务处理系统,目前正在设计和测试原型系统,后端部分的技术点差不多已经解决了,现在正在考虑前端的开发。 由于后端是用 python 开发的,所以前端也想直接使用 python ,参考了对各种 web 框架的网评,本着开箱即用的目的,题主选择了 django ,学习 django 的成本还不算太高,完成 django 的入门教程基本够满足题主的需求了。

    痛点

    可是问题来了,题主想要一个漂亮的界面,虽然这个系统用户不会很多,但还是比较爱面子,所以各种 google 最后找到了 adminlte 。题主没怎么接触过前端开发,在 adminlte 里摸索了半天,差不多搞懂了 bootstrap3 、 template 这些概念,还找到了 django-amdinlte2 这种傻瓜式的插件,本以为可以开始开心的敲代码了,哪知 django-amdinlte2 和真正的 adminlte 还是有很多差别的,有些东西达不到题主想要的效果。

    • 比如,左侧导航菜单,在 Admin LTE2 的例子里,打开一个链接左侧导航菜单对应的菜单会高亮显示,但是用 django-adminlte2 创建的页面就没有这种交互。
    • 又比如, AdminLTE2 的例子里,上方有一些消息提示按钮, django-adminlte2 里就没有。

    解决方法

    • 所以,要么在 django-adminlte2 的基础上进行修改,要么自己把 AdminLTE2 移植到项目中。两个选择的学习成本都不低。
    • 另外,不知道 django-suit 能不能直接用来开发其他 app 的界面。

    需求

    因为这不是一个以内容为主的应用,前端只是做一些任务的管理和状态的显示,所以题主甚至想为后端写几个 RESTAPI ,把前端完全剥离出来。不知道大家有没有更好的选择。

    第 1 条附言  ·  1 天前
    折腾了几天的 django ,说说我遇到的问题(坑?),也许是因为我操作不当吧:
    1. DRF 的权限管理和 Django 自身的权限管理似乎无关联,比如在 django 里创建一个 Group ,然后为该 Group 指定一种权限(例如,仅允许 change task ),然后使用 django 自带的 token 认证的方式进行认证,通过 DRF 创建的 API 去访问 task ,这时该 Group 里的用户可以查看、创建或者删除 task 。因此还需要在 DRF 里另外对权限进行管理。
    2. 还是 DRF 权限管理问题,在 DRF 里自定义一个 permission ,使用 permission_classes ,在 views 里对 model 的权限进行控制,比如最常用的:特定用户只能看到自己创建的 task ,但是这里有个问题,我在获取单个 task 的时候, has_object_permission 会被调用,而在获取一个 task 列表的时候,只有 has_permission 会被调用, has_object_permission 就不会。但是无论有没有调用,最终查询的时候都会查出其他用户的 task 。只有显式的调用 check_object_permissions ,对单个 task 权限进行检查,或者在获取 task list 的时候主动过滤,才能达到那种效果。
    3. 当我同时开启了 Django 的 session 认证和 DRF 的 token 认证时,用 token 访问 DRF 创建的 API 就会触发 crsf 防护机制。这虽不算太大的问题,但是也说明了系统优先使用了 session 认证。
    4. DRF 的文档确实少,国内大部分都是翻译,英文文档寥寥几句,最后还得去看源码。
    不过, DRF 配合 django orm 确实减少了很多开发量。
    18 回复  |  直到 2017-03-23 23:04:42 +08:00
        1
    loading   8 天前 via Android   ♥ 1
    写成 api ,后端只给基本的页面跳转逻辑(也就是不开发 spa 版本),用 json 传数据,前端只用 jquery 这些易上手的,用 bootstrap 2,这样难度会下降到可接受的程度。
        2
    loading   8 天前 via Android   ♥ 1
    等前端水平上来了,直接换到 vue.js 等库, api 依然可用,前端大改,后端也就稍微适应一下就行了。
        3
    Kilerd   8 天前
    所以前端也想直接使用 python

    ?????
        4
    HLT   8 天前
    原文:题主没怎么接触过前端开发,在 adminlte 里摸索了半天,差不多搞懂了 bootstrap3 、 template 这些概念。。。


    扔给专业的人来做 不好吗?
    你这不是差不多搞懂了概念。。。你是前端啥啥不懂啊
        5
    lecher   8 天前 via Android   ♥ 1
    我用 admin LTE 做过管理后台模板。 admin LTE 要想用好光靠后端渲染是不够的,好多 admin LTE 集成的插件是要写 JavaScript 的代码的,获取后端的数据之后通过 JS 来做数据渲染。
    如果是想快速在 admin LTE 上面做开发,建议不要用 Django 集成的模板,拆成 restful 的形式, Django 、 flask 、 tornado 什么框架都好,只提供 API 接口。交互效果全部交给 admin LTE 的各种插件完成。这样开发起来会轻松一些。

    其实 admin LTE 这种形式的交互效果,如果要做的业务比较复杂的话,写起来 JavaScript 的代码量还是挺多的,因为要写很多网络请求的接口去拿数据。尤其你的任务系统可能会用到报表,还可能要集成不同的报表插件,所以不要对 admin LTE 抱太大的改造希望。这是一个庞大的管理后台模板,很多效果都是靠不同的插件完成的,实际开发的时候可能要去好几个不同的插件官网查看文档,做好这个心理准备。

    如果有时间和精力学习 JavaScript ,我觉得可以考虑用用 vuejs 方面的模板,我是个主后端的开发,做个人项目的时候最头疼的就是前端交互的逻辑,因为做出来的又丑又繁琐,接触 vuejs 之后,仅仅就是用 vue 替代 jQuery 就省去了我很多写前端渲染的精力,所以在这里推荐一下 vuejs ,考虑一下用它替换 jQuery 试试看?
        6
    shepherd   7 天前 via Android
    @Kilerd 描述出错了,这里的前端指用户界面,不是常见的那个前端
        7
    shepherd   7 天前 via Android
    感谢大家的回复,就不一个一个 @了
        8
    est   7 天前
    admin lte 只是个壳子。要做出那个样子非常花时间。
        9
    evil4ngl3   7 天前   ♥ 2
    哈哈,前段时间正好在跟楼主做一样的事情, 不过我用的是 flask 尝试的,最后转了一圈发现,发现不如 @loading 说的那样。服务器上用 python 处理任务,然后用 python-eve 把功能做成 REST API ,前端你想怎么改就怎么改了。我准备学习用 vuejs ^_~
        10
    ansheng   7 天前
    adminlte 只是个模板而已,
        11
    PythonAnswer   7 天前   ♥ 1
    建议:


    这样弄

    m: django orm
    v: vue.js
    c: django url

    django 通过 restfulapi 吐出数据给 vuejs 吃
        12
    loading   7 天前 via Android
    @evil4ngl3 是的,我以前也是用的 flask 。
    现在也是计划 vuejs ,不过我后端换 golang 了。
        13
    settings   7 天前   ♥ 1
    可以看看我们公司维护的这个 django-adminlte ,内置了菜单、权限等功能,直接用 adminlte 的表单和 table 就可以了

    https://github.com/beastbikes/django-adminlte
        14
    findex   6 天前
    @PythonAnswer 你这样做, 还不如直接上 SQLAlchemy, 绕个大弯. django db model 性能不是一般的差. django 的 URL 好用吗? 生产环境这样的组合不推荐. 当然看上去题主看上去还在学习中, 这些东西足够展示了.
        15
    qile1   5 天前 via Android
    问下是自己做吗?我也想弄一个后台任务管理的,自己研究是否可以一起弄弄
        16
    shepherd   5 天前
    @qile1 自己做。
    看了上面的回复,这两天在看 django rest framework 和 flask ,又不知道怎么下手了。。。我想把 api 做成 token 验证的,目前暂时卡在 django 的 csrf 验证问题上。
        17
    shepherd   5 天前
    @loading 用 golang 来做分布式任务吗?是不是 Machinery ,之前也看了一下 Machinery ,感觉没有 python 那么容易集成。
        18
    qile1   5 天前 via Android
    @shepherd 为什么不做成只登录验证, api 一般不会知道呀
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   584 人在线   最高记录 2466   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 55ms · UTC 23:21 · PVG 07:21 · LAX 16:21 · JFK 19:21
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1