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

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

  •  
  •   sugarkeek · 2020-06-03 17:00:18 +08:00 · 3536 次点击
    这是一个创建于 1416 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    $ django-admin startproject mysite
    

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

    $ python manage.py startapp polls
    

    最后整个项目变成了

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

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

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

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

    第 1 条附言  ·  2020-06-03 18:20:42 +08:00
    看到了网络上其他人的解释:

    根目录只是你项目的容器,Django 不关心它的名字,你可以将它重命名为任何你喜欢的名字。
    21 条回复    2020-06-18 16:14:51 +08:00
    Danfi
        1
    Danfi  
       2020-06-03 17:05:45 +08:00   ❤️ 1
    django-admin startproject mysite 后面可以加上路径
    sugarkeek
        2
    sugarkeek  
    OP
       2020-06-03 17:07:50 +08:00
    @Danfi 好的,学习了。我就是想问问,默认的一般是设计者最初的思想,特别是 Django 这种很规范化的框架,他是咋想的?
    lsvih
        3
    lsvih  
       2020-06-03 17:12:40 +08:00   ❤️ 1
    目录结构没有硬性规范吧,我觉得 django 默认这么放还是挺科学的。app 放在各个子项目下,如果全放在 PROJECT_BASE 会很乱的。PROJECT_BASE 目录还得放很多类似 upload 、resource 、temporary 、static 之类的文件夹
    locoz
        4
    locoz  
       2020-06-03 17:14:20 +08:00
    这叫模块化...复杂是复杂了,但是复用模块什么的就会很方便,直接导入包就可以了
    johnsona
        5
    johnsona  
       2020-06-03 17:15:02 +08:00
    django-admin startproject mysite .注意这个点,应该是这个,逃)
    est
        6
    est  
       2020-06-03 17:21:40 +08:00   ❤️ 2
    不为什么。因为你看的教程没对。你觉得 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
        7
    sugarkeek  
    OP
       2020-06-03 18:26:54 +08:00
    @lsvih 对!
    sugarkeek
        8
    sugarkeek  
    OP
       2020-06-03 18:28:48 +08:00
    有个讨论 django 的目录结构的帖子

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

    确实除了 django 创建的项目文件夹,还有其他模块需要在根目录下
    Aliencn
        9
    Aliencn  
       2020-06-03 19:05:32 +08:00
    我一般这么用
    django-admin startproject main && mv main mysite
    xiaolinjia
        10
    xiaolinjia  
       2020-06-04 08:31:22 +08:00
    嫌麻烦用 flask 不就好了,你爱放哪放哪。
    然后可能你下个问题就是,我怎么组织结构才合适呢?
    sugarkeek
        11
    sugarkeek  
    OP
       2020-06-04 10:04:33 +08:00
    @xiaolinjia 我没有在质疑,我问的是 Django 的设计思想,我再尝试理解 Django 的思想。
    julyclyde
        12
    julyclyde  
       2020-06-04 10:09:16 +08:00
    @xiaolinjia Flask 好像没带 ORM 吧?
    craiiz
        13
    craiiz  
       2020-06-04 10:23:22 +08:00
    个人理解是:一个项目(e.g. mysite)会有很多模块( e.g.如客户管理、商品管理)即 app ;感觉挺科学的
    craiiz
        14
    craiiz  
       2020-06-04 10:24:28 +08:00
    @xiaolinjia 最后搞完一通之后发现还是变成 django 的样子
    sugarkeek
        15
    sugarkeek  
    OP
       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
        16
    xiaolinjia  
       2020-06-04 11:18:14 +08:00
    @julyclyde flask 用的 sqlalchemy
    julyclyde
        17
    julyclyde  
       2020-06-04 11:44:59 +08:00
    @xiaolinjia 只是“可以用”sqlalchemy 吧,并不是“flask 用的就是 sqlalchemy”
    其实 flask 配啥 ORM 都行,但好像没有自带一个
    xiaolinjia
        18
    xiaolinjia  
       2020-06-04 11:47:31 +08:00
    @julyclyde 是的。其实这个跟他们设计也有关,因为 flask 就是自由,所以他不限制你用什么 orm,就像他第三方扩展也很少有像 django 那样,是 django-xxx,而是任何 py 包。对比下 awesome-django 和 awesome-flask 就知道了。
    qW7bo2FbzbC0
        19
    qW7bo2FbzbC0  
       2020-06-18 15:07:24 +08:00
    @xiaolinjia 因为 django 有自己的一套思路,spring 的很多插件也是带 spring 的吧
    xiaolinjia
        20
    xiaolinjia  
       2020-06-18 15:37:50 +08:00
    @hjahgdthab750 嗯,django 的单元是 app 。所以有很多 django-xxx 的都是实现了一整个 app 。要注册到配置的 INSTALLED_APPS 里。而 flask 自由的没有这个概念,只要是模块的任意堆砌就行。所以就不像 django 那样。
    qW7bo2FbzbC0
        21
    qW7bo2FbzbC0  
       2020-06-18 16:14:51 +08:00
    @xiaolinjia 堆多了都是乱,django 是比较有规则。但是 drf 的一套写比较复杂的查询或者逻辑时比较丑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2833 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:32 · PVG 19:32 · LAX 04:32 · JFK 07:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.