Django 为什么要在文件夹下创建项目,再创建 app,不复杂吗?

2020-06-03 17:00:18 +08:00
 sugarkeek

看的是 Django 的文档,新创建一个 Django 项目,要在我先创建的文件夹下创建项目

$ django-admin startproject mysite

创建完项目,再创建一个应用程序( application )

$ python manage.py startapp polls

最后整个项目变成了

我的项目文件夹->mysite ( Django 项目文件夹)->polls ( Django 应用程序)

中间那个 mysite 里的文件为什么不直接在根目录创建,而要再嵌套一层呢,这样不显得复杂多了吗?

Django 为什么这么设计呢?它认为一个大项目里里面包含很多小项目,小项目里面又包含着很多 app 吗?

还是说大项目里的小项目是作为版本来划分呢?

3579 次点击
所在节点    Python
21 条回复
Danfi
2020-06-03 17:05:45 +08:00
django-admin startproject mysite 后面可以加上路径
sugarkeek
2020-06-03 17:07:50 +08:00
@Danfi 好的,学习了。我就是想问问,默认的一般是设计者最初的思想,特别是 Django 这种很规范化的框架,他是咋想的?
lsvih
2020-06-03 17:12:40 +08:00
目录结构没有硬性规范吧,我觉得 django 默认这么放还是挺科学的。app 放在各个子项目下,如果全放在 PROJECT_BASE 会很乱的。PROJECT_BASE 目录还得放很多类似 upload 、resource 、temporary 、static 之类的文件夹
locoz
2020-06-03 17:14:20 +08:00
这叫模块化...复杂是复杂了,但是复用模块什么的就会很方便,直接导入包就可以了
johnsona
2020-06-03 17:15:02 +08:00
django-admin startproject mysite .注意这个点,应该是这个,逃)
est
2020-06-03 17:21:40 +08:00
不为什么。因为你看的教程没对。你觉得 django 复杂了可以搜下 minimal django


from django.conf.urls import url
from django.http import HttpResponse

DEBUG = True
SECRET_KEY = 'LZ2simple'
ROOT_URLCONF = __name__

def home(request):
return HttpResponse('ok')

urlpatterns = [
url(r'^$', home),
]


这个就够简单了吧。
sugarkeek
2020-06-03 18:26:54 +08:00
@lsvih 对!
sugarkeek
2020-06-03 18:28:48 +08:00
有个讨论 django 的目录结构的帖子

https://stackoverflow.com/questions/22841764/best-practice-for-django-project-working-directory-structure

确实除了 django 创建的项目文件夹,还有其他模块需要在根目录下
Aliencn
2020-06-03 19:05:32 +08:00
我一般这么用
django-admin startproject main && mv main mysite
xiaolinjia
2020-06-04 08:31:22 +08:00
嫌麻烦用 flask 不就好了,你爱放哪放哪。
然后可能你下个问题就是,我怎么组织结构才合适呢?
sugarkeek
2020-06-04 10:04:33 +08:00
@xiaolinjia 我没有在质疑,我问的是 Django 的设计思想,我再尝试理解 Django 的思想。
julyclyde
2020-06-04 10:09:16 +08:00
@xiaolinjia Flask 好像没带 ORM 吧?
craiiz
2020-06-04 10:23:22 +08:00
个人理解是:一个项目(e.g. mysite)会有很多模块( e.g.如客户管理、商品管理)即 app ;感觉挺科学的
craiiz
2020-06-04 10:24:28 +08:00
@xiaolinjia 最后搞完一通之后发现还是变成 django 的样子
sugarkeek
2020-06-04 10:41:46 +08:00
@craiiz app 挺好理解的,我的疑问主要是是项目是在我创建的文件夹下( root directory )又创建了一个文件夹( mysite ),作为项目文件夹。

当然我现在是这么理解的,结合之前大伙的理解和我自己的理解,root directory 下除了项目文件夹,还有静态目录文件夹,还有模板( template )、文档( doc )等等,和项目文件夹( mysite )共同构成一个项目。

除此之外,我通过 Pycharm 自带的 Django 项目创建的模板发现,Pycharm 认为的 Django 是这样是

/root directory
- /mysite
- /app1
- /app2
- /template
manage.py

也挺有意思的
xiaolinjia
2020-06-04 11:18:14 +08:00
@julyclyde flask 用的 sqlalchemy
julyclyde
2020-06-04 11:44:59 +08:00
@xiaolinjia 只是“可以用”sqlalchemy 吧,并不是“flask 用的就是 sqlalchemy”
其实 flask 配啥 ORM 都行,但好像没有自带一个
xiaolinjia
2020-06-04 11:47:31 +08:00
@julyclyde 是的。其实这个跟他们设计也有关,因为 flask 就是自由,所以他不限制你用什么 orm,就像他第三方扩展也很少有像 django 那样,是 django-xxx,而是任何 py 包。对比下 awesome-django 和 awesome-flask 就知道了。
qW7bo2FbzbC0
2020-06-18 15:07:24 +08:00
@xiaolinjia 因为 django 有自己的一套思路,spring 的很多插件也是带 spring 的吧
xiaolinjia
2020-06-18 15:37:50 +08:00
@hjahgdthab750 嗯,django 的单元是 app 。所以有很多 django-xxx 的都是实现了一整个 app 。要注册到配置的 INSTALLED_APPS 里。而 flask 自由的没有这个概念,只要是模块的任意堆砌就行。所以就不像 django 那样。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/678320

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX