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

背景

题主想做一个分布式的任务处理系统,目前正在设计和测试原型系统,后端部分的技术点差不多已经解决了,现在正在考虑前端的开发。 由于后端是用 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 ,把前端完全剥离出来。不知道大家有没有更好的选择。


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

21 回复

写成 api ,后端只给基本的页面跳转逻辑(也就是不开发 spa 版本),用 json 传数据,前端只用 jquery 这些易上手的,用 bootstrap 2,这样难度会下降到可接受的程度。


FastAPI + Jinja2 组合是个不错的选择。FastAPI 负责后端 API,Jinja2 做模板渲染,这样既能快速开发又能保持前后端分离的灵活性。

# main.py
from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from pydantic import BaseModel
from typing import Optional

app = FastAPI()
templates = Jinja2Templates(directory="templates")

class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None

@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

@app.post("/items/")
async def create_item(item: Item):
    return item

@app.get("/form", response_class=HTMLResponse)
async def show_form(request: Request):
    return templates.TemplateResponse("form.html", {"request": request})

@app.post("/submit")
async def handle_form(name: str = Form(...), email: str = Form(...)):
    return {"name": name, "email": email}
<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>FastAPI Web界面</title>
</head>
<body>
    <h1>欢迎使用FastAPI</h1>
    <a href="/form">去表单页面</a>
</body>
</html>
<!-- templates/form.html -->
<!DOCTYPE html>
<html>
<head>
    <title>表单示例</title>
</head>
<body>
    <form action="/submit" method="post">
        <input type="text" name="name" placeholder="姓名">
        <input type="email" name="email" placeholder="邮箱">
        <button type="submit">提交</button>
    </form>
</body>
</html>

安装依赖:pip install fastapi uvicorn jinja2

运行:uvicorn main:app --reload

这个方案的好处是 FastAPI 自动生成交互式 API 文档,Jinja2 模板简单易用,适合快速搭建管理后台或内部工具界面。

如果追求更快的界面开发,可以考虑 Streamlit 或 Gradio,它们更适合数据展示和原型开发。

总结:FastAPI + Jinja2 平衡了开发速度和灵活性。

等前端水平上来了,直接换到 vue.js 等库, api 依然可用,前端大改,后端也就稍微适应一下就行了。

所以前端也想直接使用 python

?????

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


扔给专业的人来做 不好吗?
你这不是差不多搞懂了概念。。。你是前端啥啥不懂啊

我用 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 试试看?

描述出错了,这里的前端指用户界面,不是常见的那个前端

感谢大家的回复,就不一个一个 @了

admin lte 只是个壳子。要做出那个样子非常花时间。

哈哈,前段时间正好在跟楼主做一样的事情, 不过我用的是 flask 尝试的,最后转了一圈发现,发现不如 说的那样。服务器上用 python 处理任务,然后用 python-eve 把功能做成 REST API ,前端你想怎么改就怎么改了。我准备学习用 vuejs ^_~

adminlte 只是个模板而已,

建议:


这样弄

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

django 通过 restfulapi 吐出数据给 vuejs 吃

是的,我以前也是用的 flask 。
现在也是计划 vuejs ,不过我后端换 golang 了。

可以看看我们公司维护的这个 django-adminlte ,内置了菜单、权限等功能,直接用 adminlte 的表单和 table 就可以了

https://github.com/beastbikes/django-adminlte

你这样做, 还不如直接上 SQLAlchemy, 绕个大弯. django db model 性能不是一般的差. django 的 URL 好用吗? 生产环境这样的组合不推荐. 当然看上去题主看上去还在学习中, 这些东西足够展示了.

问下是自己做吗?我也想弄一个后台任务管理的,自己研究是否可以一起弄弄

自己做。
看了上面的回复,这两天在看 django rest framework 和 flask ,又不知道怎么下手了。。。我想把 api 做成 token 验证的,目前暂时卡在 django 的 csrf 验证问题上。

用 golang 来做分布式任务吗?是不是 Machinery ,之前也看了一下 Machinery ,感觉没有 python 那么容易集成。

为什么不做成只登录验证, api 一般不会知道呀

adminlte 这个前端模板很容易和 django 结合呀, 用 adminlte 里的 start.html 写一个 base.html 的父模板, 然后用 django 的 extends 模板继承就可以了, 剩下的就是数据渲染了, 就这么简单!

花了两周时间来调研前端技术,收获不少,又确定了大概方向

回到顶部