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

关于《 Python 编程:从入门到实践》中的一个技术问题~

  •  
  •   KinneyZhang · 2018-08-30 11:54:53 +08:00 · 3469 次点击
    这是一个创建于 2059 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有大佬研究过这本书的吗?
    我的问题是在 django 那一块,在创建网页,定义 url 的时候,为什么要在 learning_log(包含 settings,urls,wsgi )和 learning_logs(具体 app 文件夹,包括 model,test,view,以及 html 等)两个文件夹里都创建 urls.py 呢?书上的意思是,前者的 url 定义了网站的所有 url,后者定义了具体视图的 url。
    由于我的 django 比较新,没有用 url(.....)来定义,而是采用了 path(.......), 通过 google,后者定义具体视图 urls 解决了,换成了 path,但是前者要怎么写呢?书上原来的是 url(r'', include('learning_logs.urls', namespace='learning_logs')),我需要换成 path 的写法?
    还有就是前面的疑问,为什么要定义两个 urls.py,直接在前者里面定义试图 url 不就可以了嘛?
    --------------------
    哎,描述好麻烦,好想附图。。。。
    16 条回复    2018-08-31 17:52:32 +08:00
    susecjh
        1
    susecjh  
       2018-08-30 12:11:21 +08:00 via Android
    这样好点,我们公司写一个 urls 里面,感觉像一坨屎
    chenstack
        2
    chenstack  
       2018-08-30 12:16:16 +08:00   ❤️ 1
    因为一个项目可能会有多个子 app,各自的 url 映射写在各自的 urls.py 里面,再由主 urls.py 引入,方便管理
    huangzhe8263
        3
    huangzhe8263  
       2018-08-30 12:17:12 +08:00   ❤️ 1
    附图的话, 安 v2 的 chrome 插件然后用微博图床就行.

    and 建议这种去看官方最新的文档...
    chenstack
        4
    chenstack  
       2018-08-30 12:21:46 +08:00   ❤️ 1
    还有你说的 path 是 django 2.0 的写法,建议多看看官方文档,另外也可以用旧的写法的,旧模块有保留。
    新写法的话,基本就是 url 替换成 path,include 的引入位置也换了
    from django.urls import path, include
    KinneyZhang
        5
    KinneyZhang  
    OP
       2018-08-30 12:32:03 +08:00 via iPhone
    谢谢!
    不过为什么一个项目会有不同的 app 呢?一个项目不就是一个 app 吗?麻烦举一个例子,新人刚学 django
    xpresslink
        6
    xpresslink  
       2018-08-30 13:02:09 +08:00   ❤️ 1
    在 settings-py 里面有个 ROOT_URLCONF = 设置,用来指明项目最初始的 URL 解析。

    理论上说是可以把整个项目所有 URL 都放在这一个文件里面的。如果是个小项目这么做也没有什么问题。

    但是一个大项目下面有多个子 app,URL 条目太多了放在一个文件中不好维护。

    所以在每个 app 目录下加一个 urls.py (文件名随便,只是习惯上大家都这么起名字, 只要在 include 时候对应上就可以), 管理本 app 的 URL。

    在项目初始的 urls.py 中用 include ('app_name.urls')方式把 app 的 URL 定义合并到一起。

    这样做的好处是这个 app 比较容易摘除,或拿到别个项目中去复用。
    chenstack
        7
    chenstack  
       2018-08-30 13:02:10 +08:00   ❤️ 1
    @KinneyZhang 举个例子,一个小程序商场后端,分成商户管理后台和小程序 api 两个 app。或者几个小项目共用账户系统也是有可能的。
    anthoy
        8
    anthoy  
       2018-08-30 13:47:39 +08:00   ❤️ 1
    以下是菜鸡我的理解:
    django 默认创建的时候在自动生成的文件夹(和你的项目命一样的,我也忘了叫什么,暂时叫主目录,里面是一些配置文件)中会自动生成一个 urls.py 文件,里面可以进行 url 与 view 的关联,但在很多大型网站开发中,对于要使用的 url 数量比较多,为了更好的管理,通过创建不同的 app 进行功能划分,每个 app 下创建自己的 urls.py 文件,通过 includet 添加到主目录下的 urls.py 文件中,实现 urls 模块化管理,有点类似 flask 的蓝图的模块化
    好处:大型网站多个 app 时,url 管理方便,而且可以通过在主目录中为每个 app 的 url 设置同一的前缀
    RuAHip
        9
    RuAHip  
       2018-08-30 14:09:46 +08:00
    楼主你好,最近我也在看那块代码,我直接在 ubuntu 上按照书上写的来实现的,但是运行的时候,就报错了,然后发现时版本问题,书上的版本是 Django 1.xx 。而我现在用的是 Django 2.1,两个版本导入包不一样。我想问一下你是否遇到了在添加了新的 urls 配置之后,发现项目 启动失败,报错。
    zjb861107
        10
    zjb861107  
       2018-08-30 14:30:09 +08:00   ❤️ 1
    书上的版本是 Django 1.xx 。而我现在用的是 Django 2.1

    ————————

    你可以在安装的时候指定版本的,先把 demo 跑起来,基本原理搞明白,再去尝试最新版
    RuAHip
        11
    RuAHip  
       2018-08-30 14:59:05 +08:00
    @zjb861107 好的,谢谢大佬。
    KinneyZhang
        12
    KinneyZhang  
    OP
       2018-08-30 17:38:15 +08:00
    @RuAHip 是的,就是这个问题,所有我准备听大佬们的意见,去看看 django2.x 的说明文档
    toono
        13
    toono  
       2018-08-30 19:18:05 +08:00 via iPhone
    建议看一看 Django 官网的文档,一目了然,而且 QuickStart 这部分有中文。
    Anjaxs
        14
    Anjaxs  
       2018-08-30 23:11:46 +08:00
    yuoboo
        15
    yuoboo  
       2018-08-31 11:05:58 +08:00   ❤️ 1
    大致说一下,说得不对的地方请指正!
    有 settings,wusgi 的目录称为项目同名目录, 因为在创建项目的时候这个文件夹自动创建而且名字与项目名相同,
    项目同名目录中的 urls.py 文件为全局视图映射管理, url 传到这里通过正则匹配,这里之所有分为两层 urls.py 文件是为了方便管理和查找,而且结构更为清晰, 第二个 urls.py 文件一般位于 APP 文件夹里面, 负责某一个 APP 的视图映射, 如果你只想写一个 urls.py 文件也是可以的,将所有 APP 的视图函数全部导入到项目同名目录的 urls.py, 这样 APP、视图函数多了之后会非常的混乱, 一般项目十多个 APP 或者更多,每个 APP 十几或者几十个视图函数的时候, 你这个 urls.py 文件中上百条映射查找起来是一件很头疼的事情, 修改的时候你还得上下翻滚交叉查找, 你才会发现把不同 APP 的映射关系独立出来是一件多么明智的事情!
    尝试理解这个设计, 说不定楼主用顺手了还会觉得,哇这样分还是有道理的!哈哈哈~~~~
    huaerxiela
        16
    huaerxiela  
       2018-08-31 17:52:32 +08:00   ❤️ 1
    @KinneyZhang 抽象多个 app 才比较合适,你说的项目一个 app 的情况,一般情况下都是设计的不太合理,就像数据库的设计一定不要让新手弄得道理一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2500 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 15:38 · PVG 23:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.