从Python控制台应用到Django作为UI的最佳实践

1 投票
1 回答
733 浏览
提问于 2025-04-18 12:40

我有一个现成的 Python 应用程序,它是在控制台中运行的。这个应用程序现在使用 sqlite3 来存储数据。

我现在想用 Django 来做界面,所以我需要你们的帮助,想知道如何更快地把我的应用从控制台转到网页界面。

我知道网页是无状态的,也就是说每次请求都是独立的,而且这个应用会被很多人使用。

我的大部分数据都在字典里,我可以把它转换成 JSON 格式。我想请教一下,有哪些事情是我需要了解的,或者有没有人遇到过类似的应用,需要迁移到以网页为中心的界面。

我的应用主要是基于查询的功能,传递的参数不多,但我在 Python 中访问数据库时可能会遇到问题,因为我的大部分数据库查询都是原始 SQL。

谢谢大家的帮助。

(如果有现成的项目可以作为参考,请分享给我。)

==========

解决方案

我在 manage.py 中添加了这个:

sys.path.insert(0, os.path.join(BASE_DIR, 'app', 'engine'))

现在我可以调用我的 'engine' 包中的类和脚本了。

1 个回答

1

这个问题比较开放,我会讲讲如何把你的数据库迁移到Django的模型和自定义查询。


数据层

在你开始构建应用之前,可以试着使用manage.py命令中的inspectdb来描述你当前的数据库结构,转化为Django模型。这个命令不会自动为你写好模型,但可以帮助你入门。

正如@joran-beasley提到的,sqlite不太适合用作多客户端应用的生产数据库。Postgres在Django社区中被广泛使用,不过它并不是唯一支持原始SQL的选项。

你可以将一些数据迁移为XML、YAML或JSON格式,然后通过Django的序列化和反序列化工具,或者使用loaddata命令来导入这些数据。考虑为你的模型添加自定义管理器,特别是那些涉及一对一、外键或多对多关系的字段。你还可以添加一个自定义的get_by_natural_key方法,这样可以简化处理包含外键的数据的序列化和反序列化。


查询

Django的QuerySet API是一个很好的工具,可以帮助你处理SQL,但它也有一些局限性。花点时间了解它的功能和不足,这样你就能判断它是否能满足你的需求。

如果你想继续使用原始查询,Django也可以帮助你,它提供了一些辅助的查询集方法,比如rawextra。你甚至可以完全不使用模型层,直接使用django.db.connection.cursor类。


我不能提供太多其他的建议来帮助你过渡,但你可能会发现Django的基于类的通用视图,比如DetailViewListViewUpdateViewDeleteView,在设置一些基本的网页界面时会很有帮助。

撰写回答