视图函数
- 视图函数的第一个参数必须是request。
- 视图函数的返回值必须是HttpResponseBase的子类对象。
URL与视图的映射
-
在setting.py中配置了’ROOT_URLCONF’为‘urls.py’,所以Django收到请求会去’urls.py’中寻找。
-
在‘urls.py’中应把所有映射放在‘urlpatterns’变量中。
-
所有的映射使用’path’或者’re_path’函数进行包装的。
-
path中映射的视图函数不能加()。
URL中添加变量参数
- 第一种方式:在path中使用<数据类型:变量名>为URL添加参数,视图中函数的形参名一定要与变量名相同,可传递多个参数。默认数据类型有:
str : 非空字符串类型。默认转换器。不能包含斜杠。
int :任意非负的整形。
slug:由英文中的 - ,或者下划线连接的字符串。
uuid:匹配uuid字符串。
path:匹配非空的英文字符串,可包含斜杠。
需要加头文件
import django.urls import converters
- 第二种方式:查询字符串方式,url末尾使用**?‘变量名’=‘变量’** 的格式,在path中不需要添加,但在视图函数中要使用request.GET.get(‘变量名’)获取变量。
URL模块化
- 增加头文件
from django.urls import include
- 在工程文件下的urls.py中只需要写出不同app所对应的url的开头,在path中使用include(‘app下urls.py的路径’),在app下的urls.py中只需要写出后半部分的url进行匹配。可以看作将两级拼接。
url的命名
- url经常变化,给url命名,方便页面重定向,并且如果要使用url时可通过名字进行反转操作,要使用redirect(),需要
from django.shortcuts import redirect
- 在path函数中,传入name=‘命名’。
- 应用命名空间:为了避免一个工程里一个名字重复为url命名,在app的urls.py中添加app_name=‘名字’,在进行反转时使用reverse(‘命名空间名字:url的名字’)。要使用reverse()需要
from django.shortcuts import reverse
- 实例命名空间:针对主urls.py中不同的url对应相同app下的urls.py,可以给每个url命名,方法为在include函数中添加’ namespace=‘实例名’ ',在视图函数中如果要reverse()可以使用
request.resolver_match.namespace 获取实例命名
include()补充
-
include(module,namespace=None):
module:子url的模块字符串
namespace:实例命名空间。如果要指定实例命名空间,就要先指定应用命名空间。 -
include((pattern_list,app_namespace),namespace=None):
pattern_list:可以是一个字符串,也可以是一个元组,如果是元组第一个参数是子urls.py模块路径的字串,第二个参数是应用命名空间。
-
include(pattern_list)
pattern_list:是一个列表,这个列表装的是’path‘或者’re_path‘函数,