Django-urls解析--视图层

当一个Django项目创建完毕后, 项目下会有以下几个文件:
  • 外部根目录是项目的容器。它的名字对Django来说并不重要;您可以将其重命名为您喜欢的任何内容。mysite/
  • manage.py:一个命令行实用程序,允许您以各种方式与此Django项目进行交互。您可以在django-admin和 manage.py 中阅读有关的所有详细信息。manage.py
  • 内部目录是项目的实际 Python 包。它的名称是Python包名称,您需要使用它来导入其中的任何内容(例如)。mysite/mysite.urls
  • mysite/__init__.py:一个空文件,告诉 Python 此目录应被视为 Python 包。如果您是Python初学者,请在官方Python文档中阅读有关包的更多信息
  • mysite/settings.py:此 Django 项目的设置/配置。Django设置将告诉您有关设置如何工作的所有信息。
  • mysite/urls.py:此 Django 项目的 URL 声明;Django驱动的网站的“目录”。您可以在 URL 分派器中阅读有关 URL 的详细信息。
  • mysite/asgi.py:ASGI兼容Web服务器的入口点,为您的项目提供服务。有关更多详细信息,请参阅如何使用 ASGI 进行部署
  • mysite/wsgi.py:与 WSGI 兼容的 Web 服务器的入口点,用于为您的项目提供服务。有关更多详细信息,请参阅如何使用 WSGI 进行部署

一:django的urls.py

  • 项目url的入口是在项目的setting.py中定义的
  • 找到项目的setting.py中的  ROOT_URLCONF 
  • 例如我的项目是book那么在setting.py显示的就是
    •  

       

        
  • url定义了所有请求地址,前端请求地址经过分发都会经过urls转发到对应的视图

1.1:配置URLconf

查找视图的过程 :

  • 1.请求者在浏览器地址栏中输入URL, 请求到网站.
  • 2.网站获取URL信息.
  • 3.然后与编写好的URLconf逐条匹配.
  • 4.如果匹配成功则调用对应的视图.
  • 5.如果所有的URLconf都没有匹配成功.则返回404错误.

    •    

       

       

  • URLconf入口

    •   

       

       

  • 需要两步完成URLconf配置

    •   1.在项目中定义URLconf
    •   2.在应用中定义URLconf
  • 项目中定义URLconf

    •   
    • 111
    • 11

 

 

 

1.2、urls.py解析

1.urlpatterns 是固定写法. 它的值是 列表
2.我们在浏览器中输入的路径和会 urlpatterns中的每一项顺序进行匹配
    如果匹配成功,则直接引导到相应的模块.
    如果匹配不成功(把urlpatterns中的每一个都匹配过了),则直接返回404.
3.urlpatterns中的元素 是 url
    url的第一个参数是: 正则
            r 转义
            ^ 严格的开始
            $ 严格的结尾

4.我们在浏览器中输入的路由 中 哪些部分参与正则匹配?
    http://ip:port/path/?key=value
    我们的http://ip:port/ 和 get post 参数不参与正则匹配

5. 如果和当前的某一项匹配成功,则引导到子应用中继续匹配
    如果匹配成功,则停止匹配返回相应的视图
    如果匹配不成功,则继承和后边的工程中的url的每一项继续匹配,直到匹配每一项,

 

 

 

1.3、项目使用include分发url

在项目中建议讲每个app对应的url经过项目的urls.py 分发到对应的子应用

如下:

项目: book
子应用:bookmanage

 

1、在子应用boomanage中简历一个urls.py 

2、在项目book的url.py中讲子应用bookmanage的url分发到bookmanage的urls.py

 

 

  • 1.子应用新建的urls.py
    •   
      from django.urls import path, re_path
      
      from . import views
      urlpatterns = [
          path('index', views.index, name='index'), # 分发到对应的views视图中的index方法
          
      ]

       

       
  • 项目book/urls.py
    •   
      from django.contrib import admin
      from django.urls import path, include  # 导入include包用于分发urls
      
      import bookmanage.views
      
      urlpatterns = [
          path('admin/', admin.site.urls),
          path('bookmanage/', include('bookmanage.urls')),
      ]

       

    •   include() 函数允许引用其他 URLCONFS。每当 Django 遇到 include() 时,它就会砍掉与该点匹配的 URL 的任何部分,并将剩余的字符串发送到包含的 URLconf 进行进一步处理。

 

 

url匹配过程

 

 

 

 

 

 

 

 

 

 

.

 

posted @ 2022-08-10 14:26  可爱的红领巾  阅读(40)  评论(0编辑  收藏  举报