URLconf
1. 介绍
我们要在Django项目中为应用程序设计URL,我们可以创建一个名为URLconf(通常为urls.py)的Python模块。
这个模块是纯Python代码,是一个简单的正则表达式到Python函数(视图)之间的映射。
下面,我将会通过一个例子来为大家进行讲解:
1)首先,我们先新建一个名为test的Django项目,然后为这个项目创建一个名为testapp的应用。
2)我们一般在自定义应用(testapp)中创建一个urls.py(路由配置文件)。
之后在test/urls.py中引用它,目的是将应用的urls配置到应用内部,数据更清晰并且易于维护。
test/urls.py中写入一条语句:
path(‘’, include(‘testapp.urls’)),
注意点:
-
在test/urls.py中进行包含配置,在各自应用中创建具体配置;
-
定义urlpatterns列表,存储path()对象,这个名称是固定的;
-
urlpatterns中的每个正则表达式在第一次访问它们时被编译,这使得运行很快。
3)testapp/urls.py:指定请求地址与视图的对应关系。
2. 配置路由
- 要从URL捕获值,请使用尖括号;
- 捕获的值可以选择包括转换器类型。例如,用于
<int:name>
捕获整数参数。如果不包括转换器/
,则匹配除字符之外的任何字符串; - 无需添加斜杠,因为每个URL都有该斜杠。例如articles,不是/articles。
3. 路径转换器
默认情况下,以下路径转换器可用:
-
str - 匹配任何非空字符串,但路径分隔符除外/。如果表达式中不包含转换器,则为默认设置。
-
int - 匹配零或任何正整数。返回一个int。
-
slug - 匹配任何由ASCII字母或数字以及连字符和下划线字符组成的子字符串。例如, building-your-1st-django-site。
-
uuid - 匹配格式化的UUID。为防止多个URL映射到同一页面,必须包括破折号并且字母必须小写。例如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID实例。
-
path - 匹配任何非空字符串,包括路径分隔符 ‘/‘。这样一来,您就可以匹配完整的URL路径,而不仅仅是URL路径的一部分str。
4. 正则表达式
如果路径和转换器语法不足以定义URL模式,则还可以使用正则表达式。为此,请使用re_path()代替path()。
  在Python正则表达式中,命名正则表达式组的语法为(?P<name>pattern),其中name是组的名称,并且pattern是匹配的某种模式。
5. 获取参数值
用户通过在浏览器的地址栏中输入网址请求网站,对于Django开发的网站,由哪一个视图进行处理请求,是由URL匹配找到的。
请求的URL被看做是一个普通的Python字符串,进行匹配时不包括域名、get/post参数。 如请求地址如下:http://127.0.0.1:8000/delete1/?a=10
去除掉域名和参数部分,并将最前面的/去除后,只剩下如下部分进行匹配:delete1/
1)URL如下:
re_path(r'^delete(\d+)/$',views.show_arg)
,
2)创建视图show_arg如下:
def show_arg(request,id):
return HttpResponse('show arg %s'%id)
6. 视图
视图函数(或简称视图)只是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像。视图本身包含返回该响应所需的任何任意逻辑。该代码可以存在于您想要的任何地方,只要它在Python路径上即可。为了将代码放在某处,惯例是将视图放在一个名为的文件中views.py,该文件位于项目或应用程序目录中。
- 返回错误视图
Django内置处理HTTP错误的视图,主要错误及视图包括:
404错误:page not found视图;
500错误:server error视图。
如果想看到错误视图而不是调试信息,需要修改test/setting.py文件的DEBUG项。
DEBUG = False
ALLOWED_HOSTS = ['*', ]
视图处理过程如下图: