Python中Django类似功能的实现方法?

class Category(models.Model):
    c_name = models.CharField(max_length=100)

class Item(models.Model): “”“外键关联到 Category”"" i_name = models.CharField(max_length=100) category = models.ForeignKey(‘Category’, related_name=‘items’, null=True, blank=True)

表结构是这样, 要实现在页面上新建一个分类的时候, 可以在同一个页面新建 /编辑这个分类包含的项目和项目具体信息

目前想到的做法是, 页面上有添加项目的按钮, 点击按钮的时候就通过 Ajax 在数据库中生成了新项目, 然后在保存分类的时候, 再把刚才的项目和分类做关联; 但这样做的问题是, 如果编辑 /新建分类的时候刷新了页面, 或者其他原因没有最终点击保存的话, 数据库中会增加很多没有外键的 Item 数据

请问实现这个功能更好的解决办法是什么? 或者说有什么办法, 判断在分类没有成功保存的情况下, 回滚之前建立的项目?


Python中Django类似功能的实现方法?

8 回复

不如定期清理?


在Python中,如果你不想用Django但需要类似的功能,可以考虑这些替代方案:

Web框架:

  • Flask:轻量级,适合中小项目,通过扩展实现各种功能
  • FastAPI:现代框架,自动生成API文档,性能优秀
  • Bottle:单文件框架,极其轻量

ORM选择:

  • SQLAlchemy:功能强大的ORM,支持复杂查询
  • Peewee:简单直观的ORM,学习曲线平缓
  • Tortoise-ORM:异步ORM,适合异步项目

模板引擎:

  • Jinja2:Django模板的替代品,语法相似但更灵活
  • Mako:性能优秀的模板引擎

管理后台:

  • 用Flask-Admin或SQLAlchemy-Admin搭建类似Django Admin的后台

完整示例(Flask + SQLAlchemy):

from flask import Flask, render_template, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

# 定义模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

# 创建管理后台
admin = Admin(app, name='后台管理')
admin.add_view(ModelView(User, db.session))

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/api/users', methods=['GET'])
def get_users():
    users = User.query.all()
    return jsonify([{'id': u.id, 'username': u.username} for u in users])

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

建议: 根据项目需求选择合适的工具组合,小项目用Flask,API项目用FastAPI,需要完整生态用Django。

目前我也是这么想的= ,= 但感觉是没有办法的办法, 想请教下看有没有更好的实现方式

为什么要点击的时候就新建一个 Item 呢?最终保存的时候再新建不行吗?

这个设计本身就有些问题。
- Category.name 修改时是直接修改原来 category 的 name 还是创建一个新的 category
- 如果 Category.name 是否直接用原有的 Category ,还是重复创建一个
如果只需要 name 不一样就创建,你直接在 Item 里面判断就可以了。先根据 name 查询 category ,有直接关联,没有创建。在 item 编辑的时候不用区分到底是创建还是编辑。

三楼+1

为嘛不最后一步一起创建呢





感谢回复
是我简化问题的时候没描述清楚, 这个分类和项目中还有很多其他字段, 业务中有个叫项目模板的东西, 项目模板中预置了信息, 新建项目就是拷贝了一份项目模板然后做定制化的修改;
如果是编辑分类的话, 确实在最后一起保存就可以了; 主要问题是出在新建分类的时候

回到顶部