4.5 创建路由urlpattern对象的方法
从Django路由的请求过程我们可以看出,创建符合需要的urlpattern是路由处理的核心。Django框架提供了多种生成urlpattern对象的方法,下面分别来看看。
4.5.1 path()方法
path()方法是路由方法的基本方法,以下是path()方法原型:
path(route, view, kwargs=None, name=None)
该方法用于返回一个urlpattern对象,具有多个参数,具体如下。
- route:一般为字符串形式,表示一个匹配url。这个字符串可以通过尖括号的形式来表示以关键字形式传递到具体的视图函数中,在尖括号中需要包含一类转换器标识用来限定相关url位置字符的传递形式。该参数为必填参数。
- view:表示一个路由所调用的对象,可以用特定的函数形式或者视图类的as_view()方法调用结果来体现,也可以设置为一个django.urls.include()对象。该参数为必填参数。
- kwargs:可以将任意个变量以字典的形式传递给目标视图函数。默认情况下该参数为None,为非必填项。
- name:用于定义路由别名。默认情况下该参数为None,为非必填项。
4.5.2 re_path()方法
re_path()方法引入了正则表达式的概念进行路由处理,以下是re_path()方法原型:
re_path(route, view, kwargs=None, name=None)
该方法用于返回一个urlpattern对象。该方法具有多个参数,具体如下。
- route:一般为与Python模块匹配的正则表达式。只有匹配了正则表达式,相关的正则表达式捕获组信息才会被传递给路由所调用的对象。该参数为必填参数。
- view:用来表示一个路由所调用的对象,可以用特定的函数形式或者视图类的as_view()方法调用结果来体现,也可以设置为一个django.urls.include()对象。该参数为必填参数。
- kwargs:可以将任意个变量以字典的形式传递给目标视图函数。默认情况下该参数为None,为非必填项。
- name:用于定义路由别名。默认情况下该参数为None,为非必填项。
4.5.3 include()方法
在Django框架下,路由通过include()方法实现了不同工程之间的路由调用,以下是include()方法原型:
include(module, namespace=None) include(pattern_list) include((pattern_list, app_namespace), namespace=None)
该方法用于将不同模块的所有路径信息导入相关的url配置模块中,目的在于避免把所有视图函数都放到项目文件夹的根文件urls.py中,形成层级路由。该方法具有多种调用形式,不同形式具有不同的参数,具体如下。
- module:表示某个应用url的配置模块。
- namespace:表示包含url入口的实例命名空间。
- pattern_list:表示一个可迭代的path()或者re_path()实例序列。
- app_namesapceapp:表示包含url入口的应用命名空间。
4.5.4 register_converter()方法
为使用户便于进行个性化设置,Django框架采用了register_converter()方法来实现路由的自定义,以下是register_converter()方法的原型:
register_converter(converter, type_name)
该方法是注册一个自定义的转换器,用于路由设置。此方法具有两个参数,具体如下。
- converter:表示自定义的转换器类名称。
- type_name:表示需要用在路径模型中的转换器名称。
4.5.5 static()方法
为增强对页面静态文件的调用支持,在路由文件中引入了static()方法来加载相关静态资源信息,以下是static()方法原型:
static.static(prefix, view=django.views.static.serve, **kwargs)
该方法是Django路由的辅助文件,其目的是在开发环境下为url的配置模块设置访问静态资源文件的路由。该方法具有多个参数,具体如下。
- prefix:静态文件的前缀,为实际存放静态资源文件的路径。
- view:调用静态文件的视图方法,默认为django.views.static.serve。
- kwargs:调用静态文件时的相关变量信息。
4.5.6 url()方法
作为路由方法的一种拓展形式,Django框架中还可以使用url()方法进行路由设置,以下是url()方法原型:
url(regex, view, kwargs=None, name=None)
该方法会返回一个urlpattern对象。此方法具有多个参数,用法与re_path()方法一致。
总体而言,上述6个方法分属于两个不同的Django包,其中方法url()、static()属于django.conf.urls包,方法path()、re_path()、include()、register_converter()属于django.urls包。另外,对于通过path()、re_path()、url()方法设置的url,其路由不会去匹配get或post参数或域名,例如对于https://www.example.com/myapp/,regex只尝试匹配myapp/。对于https://www.example.com/myapp/?page=3,regex也只尝试匹配myapp/。