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
shepherd
V2EX  ›  Python

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

  •  
  •   shepherd · 2017-03-20 21:36:42 +08:00 · 13702 次点击
    这是一个创建于 2807 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    题主想做一个分布式的任务处理系统,目前正在设计和测试原型系统,后端部分的技术点差不多已经解决了,现在正在考虑前端的开发。 由于后端是用 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 条附言  ·  2017-03-27 15:45:45 +08:00
    折腾了几天的 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 确实减少了很多开发量。
    第 2 条附言  ·  2017-04-14 10:10:32 +08:00

    再来说说这两周折腾前端(web)的体会:

    1. 前端技术真的是非常繁荣,更新也非常快,就在我调研的这几天,我发现github上好多项目都是最近半年内才创建,而且也都是一直在更新,前端组件也很丰富,用npm构建项目也很方便。
    2. 也说说不好的地方,npm上相同功能的组件有很多可选的,但是效果和完成度都参差不齐,很难选择。项目一旦变得复杂,引用大量的npm包,会延长npm的编译时间。前端技术更新虽然快,但过气似乎也很快。。。
    3. 从自己需求的角度出发,直接选择了近期大家呼声最高的vue入手,由于上一次搞前端开发还是用的jquery,用了vue,开发体验真的是一种质的提升,但就这么几天时间也是无法熟练掌握vue的,所以接下来就是找个admin框架改一改,基于vue的admin也有不少,我至少尝试了5种,每个都有那么一点点不中意的地方,最后还是选了github上star最多的vue-admin。
    4. vue-admin组件不少,完成度也很高,就是缺少一个好用的table组件,所以又上github撸组件。是的,尝试了4种table组件都不满意,最接近需求的就是vuetable-2,但是demo可以跑起来,整合到vue-admin里就出问题,始终渲染不了,而且还会破坏其他的组件,加载一次以后其他页面就出错。
    5. 无奈,又来调研前端技术,同时注意到了vue-blu,iView,element这些组件库,element成熟又完善,完全覆盖我的需求,本土项目,中文文档接地气。
    6. github上也有一个基于element的admin,vue-manage-system,之前用过,修改完导航菜单,图标丢失,加入vue-auth组件后有问题,就卡住了

    so,楼主想回头用element自己构建admin,一步一步来

    20 条回复    2017-04-14 10:14:58 +08:00
    loading
        1
    loading  
       2017-03-20 21:44:12 +08:00 via Android   ❤️ 1
    写成 api ,后端只给基本的页面跳转逻辑(也就是不开发 spa 版本),用 json 传数据,前端只用 jquery 这些易上手的,用 bootstrap 2,这样难度会下降到可接受的程度。
    loading
        2
    loading  
       2017-03-20 21:45:50 +08:00 via Android   ❤️ 1
    等前端水平上来了,直接换到 vue.js 等库, api 依然可用,前端大改,后端也就稍微适应一下就行了。
    Kilerd
        3
    Kilerd  
       2017-03-20 21:52:33 +08:00
    所以前端也想直接使用 python

    ?????
    HLT
        4
    HLT  
       2017-03-20 22:13:53 +08:00
    原文:题主没怎么接触过前端开发,在 adminlte 里摸索了半天,差不多搞懂了 bootstrap3 、 template 这些概念。。。


    扔给专业的人来做 不好吗?
    你这不是差不多搞懂了概念。。。你是前端啥啥不懂啊
    lecher
        5
    lecher  
       2017-03-21 01:54:43 +08:00 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 试试看?
    shepherd
        6
    shepherd  
    OP
       2017-03-21 08:00:36 +08:00 via Android
    @Kilerd 描述出错了,这里的前端指用户界面,不是常见的那个前端
    shepherd
        7
    shepherd  
    OP
       2017-03-21 08:05:38 +08:00 via Android
    感谢大家的回复,就不一个一个 @了
    est
        8
    est  
       2017-03-21 08:58:27 +08:00
    admin lte 只是个壳子。要做出那个样子非常花时间。
    evil4ngl3
        9
    evil4ngl3  
       2017-03-21 09:21:42 +08:00   ❤️ 2
    哈哈,前段时间正好在跟楼主做一样的事情, 不过我用的是 flask 尝试的,最后转了一圈发现,发现不如 @loading 说的那样。服务器上用 python 处理任务,然后用 python-eve 把功能做成 REST API ,前端你想怎么改就怎么改了。我准备学习用 vuejs ^_~
    ansheng
        10
    ansheng  
       2017-03-21 09:36:28 +08:00
    adminlte 只是个模板而已,
    PythonAnswer
        11
    PythonAnswer  
       2017-03-21 09:42:59 +08:00   ❤️ 1
    建议:


    这样弄

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

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

    https://github.com/beastbikes/django-adminlte
    findex
        14
    findex  
       2017-03-22 15:53:17 +08:00
    @PythonAnswer 你这样做, 还不如直接上 SQLAlchemy, 绕个大弯. django db model 性能不是一般的差. django 的 URL 好用吗? 生产环境这样的组合不推荐. 当然看上去题主看上去还在学习中, 这些东西足够展示了.
    qile1
        15
    qile1  
       2017-03-23 14:46:01 +08:00 via Android
    问下是自己做吗?我也想弄一个后台任务管理的,自己研究是否可以一起弄弄
    shepherd
        16
    shepherd  
    OP
       2017-03-23 15:44:05 +08:00
    @qile1 自己做。
    看了上面的回复,这两天在看 django rest framework 和 flask ,又不知道怎么下手了。。。我想把 api 做成 token 验证的,目前暂时卡在 django 的 csrf 验证问题上。
    shepherd
        17
    shepherd  
    OP
       2017-03-23 15:45:43 +08:00
    @loading 用 golang 来做分布式任务吗?是不是 Machinery ,之前也看了一下 Machinery ,感觉没有 python 那么容易集成。
    qile1
        18
    qile1  
       2017-03-23 23:04:42 +08:00 via Android
    @shepherd 为什么不做成只登录验证, api 一般不会知道呀
    Kallen
        19
    Kallen  
       2017-03-29 14:19:56 +08:00   ❤️ 1
    adminlte 这个前端模板很容易和 django 结合呀, 用 adminlte 里的 start.html 写一个 `base.html` 的父模板, 然后用 django 的 extends 模板继承就可以了, 剩下的就是数据渲染了, 就这么简单!
    shepherd
        20
    shepherd  
    OP
       2017-04-14 10:14:58 +08:00
    花了两周时间来调研前端技术,收获不少,又确定了大概方向
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1375 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:40 · PVG 07:40 · LAX 15:40 · JFK 18:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.