zoukankan      html  css  js  c++  java
  • Django的URL调度

    1、URLconf (URL configuration):(Django版本1.11.20,其它版本可能各有差异。

    在Django中Python后端与前端URL进行交互,是通过一个名为urlconf(URLconfiguration)的python模块。这个模块是纯Python代码,该模块是在一个名为urls.py文件下的urlpatterns 列表中进行匹配,匹配到一个URL便执行对应的函数,不在继续向下查找。该列表的元素格式如下:

    from django.conf.urls import url
    urlpatterns = [
      url(r'^admin/', admin.site.urls),
      url(正则表达式, views视图函数,参数,别名), # 参数和别名初期可以不用写 
    ]

    urlpatterns中的url(正则表达式, views视图函数,参数,别名),它的主要作用就是将正则表达式与views视图函数进行映射,也就是告诉Django前端正则表达式的页面需要执行哪个views视图函数。

    1.1  函数url(正则表达式, views视图函数,参数,别名)

    参数说明 

    • 正则表达式:一个正则表达式字符串。
    • views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串。
    • 参数:可选的要传递给视图函数的默认参数(字典形式)。
    • 别名:一个可选的name参数。

    下面执行一个简单的示例:

    1.1.1创建一个damo_1的项目

    1.1.2在templates文件夹下创建一个test.html文件,这里简单输出"Hello World"。

    1.1.3在urls.py文件夹下的urlpatterns列表中添加一个元素url(r'^show_page/', views.show_page)。

    1.1.4在app文件夹下的views.py中添加一个函数show_page(request)。

    完成上面三步后,看起来向下面这个样子:

    1.1.5运行Django项目,看到下面这个样子说明运行成功。

    1.1.6访问项目。

    这里需要注意的是要访问127.0.0.1:8000/show_page/也就是我们在urls文件中添加的那条记录中的正则表达式字符串,如果不写默认是找不到页面的,如下:

    我们在端口后把这个路径加上,在查看如下:

    1.2 APPEND_SLASH 

    Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。其效果就是:我们定义了urls.py:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^show_page/', views.show_page),
    ]

    访问 http://127.0.0.1/show_page 时,默认将网址自动转换为 http://127.0.0.1/show_page/ 。

    如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求 http://127.0.0.1/show_page 时就会提示找不到页面。

    1.3分组命名匹配

    可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。

    在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。

    下面是以上URLconf 使用命名组的重写:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^show_page/(?P<num>[0-9]{4})/$', views.show_page),  # 分组命名
    ]

    需要注意的是这里写了分组,name对应的在views中的show_page(request,num)也需要添加一个和分组名一样的参数,否则会报如下错误

    所以当我们使用命名分组后,看起来像下面这个样子:

    运行Django后,再次访问项目:

    URLconf匹配的位置

    URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。

    例如:http://127.0.0.1:8000/show_page/请求中,URLconf 将查找show_page/。

    http://127.0.0.1:8000/show_page/?page=100 请求中,URLconf 仍将查找show_page/。

    URLconf 不检查请求的方法, 同一个URL的POST、GET、HEAD等等 —— 都将路由到相同的函数。

    1.4URL分发

    在实际中我们的网站有许多的功能,而且每个功能下都有很多URL,这时,我们把所有的URLconf配置都写在一个文件里显然是不合理的。所以Django为我们提供了URL分发机制,使用include来包含其他模块下的URLconf。

    1.4.1 我们在templates文件夹下在创建一个页面damo页面,页面显示“This is app_01”,页面看起来像下面这样:

    1.4.2在终端中在新建一个app文件:Python37  manage.py startapp app_01

    执行完成后,会在项目中新增一个app_01,看起来像下面这样

    由于是我们手动建立的,所以我们还需要到setting文件中添加添加一条记录,如下:

    1.4.3将damo_1中的urls文件复制到app文件夹和app_01文件夹中。

    1.4.4在app_01的urls文件中添加一条路由,并在对应的app_01下的views文件中添加函数,添加后看起来像下面这个样子:

    1.4.5在damo_1文件夹下的urls模块中进行路由分发,设置好后看起来像下面这个样子:

    访问页面如下:

    1.4.6 传递额外参数给视图函数

    在app文件夹下进行演示,urls、views、test.html文件配置后如下所示:

    需要注意的是传递参数的键必须和视图函数的形参名字一样。

    重启Django访问网页,看到内容如下:

  • 相关阅读:
    LeetCode456. 132模式
    LeetCode455. 分发饼干
    LeetCode454. 四数相加 II
    LeetCode453. 最小移动次数使数组元素相等
    matchMedia 媒体查询结果
    异常捕获
    常用xpath选择器和css选择器总结
    python-爬虫中的extract()
    Python应用前景广阔,怎么学才能快速上手?
    Python 为什么要有 pass 语句?
  • 原文地址:https://www.cnblogs.com/caesar-id/p/10673005.html
Copyright © 2011-2022 走看看