Django学习笔记之URL配置

    xiaoxiao2022-07-13  106

    URL配置

    视图函数里传参数

    首先我们在上篇文章中创建的应用 app_1 中的视图文件 views.py 中编写以一个带参数的函数 function ,并传入一个参数 num:

    内容如下:

    from django.shortcuts import render from django.http import HttpResponse def function(request,num): return HttpResponse(f'give function a num :{num}')

    这段代码将会在待会访问的网站中显示 HttpResponse 中的内容

    然后还要给这个视图文件配置一个子路由

    在应用 app_1 下的路由文件 urls.py 中添加以下内容:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^2/(2019)$',views.function) ]

    这里要注意了!!因为待会需要使用到正则,所以 path 要改为 re_path ,不然是会报错的,其他的书写格式也要注意一下哟!

    对于要传递的参数需要用 括号() 括起来,这里是传入一个常数: 2019

    然后启动服务:

    python manage.py runserver #这里是内网哦!

    最后打开浏览器访问如下地址:

    http://127.0.0.1:8000/app_1/2/2019

    上面传递参数的过程是在网址中传递参数并在视图中显示出来

    显示内容是:

    give function a num :2019

    因此得出传参的过程是将子路由文件中括号括起来的实参 2019 传递给了视图文件中的 function()的 num 变量

    使用未命名的正则表达式组

    另外可以通过正则表达式让传递的参数变得更加灵活,比如我可以通过传递3位数的任意数字访问这个网页内容

    那可以这样写代码,在应用 app_1 下的路由文件 urls.py 中添加以下内容:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^2/([0-9]{3})$',views.function) #第一种 re_path(r'^2/(/d{3})$',views.function) #第二种 ]

    正则涉及很多知识,这里不做重点

    这样写就可以实现在网址中输入任意三位字符均可访问该网站内容

    比如输入:

    http://127.0.0.1:8000/app_1/2/198 http://127.0.0.1:8000/app_1/2/110 http://127.0.0.1:8000/app_1/2/119

    访问以上网址均可看到页面内容:

    give function a num :198 give function a num :110 give function a num :119

    使用带有关键字的正则表达式组

    就是在网址中指定将要调用函数里的参数名

    在应用 app_1 下的路由文件 urls.py 中添加以下内容:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^2/(?P<yy>[0-9]{3})$',views.function) ]

    代码中通过 ?P 指定函数 function 的参数必须是 yy ,否则无效,注意 P 是大写

    也就是说 funtion 函数的内容应该变成了这样:

    from django.shortcuts import render from django.http import HttpResponse def function(request,yy): return HttpResponse(f'give function a num :{yy}')

    变量 num 改为了 变量 yy

    处理错误

    当输入的网址错误时我们需要返回给用户一个相对应错误,所以需要制作一个处理错误的模板,这里以404错误为例

    首先在项目 project_1 下创建一个模板文件夹 templates,在该文件夹中创建一个404.html 文件

    内容如下:

    <!DOCTYPE html> <html> <head> <title>404错误页面</title> </head> <body> <h1>自定义404错误页面</h1> </body> </html>

    这是自己定义的一个简单的页面

    然后在项目 project_1 下的配置文件 settings 文件中找到 TEMPLATES

    它的内容是这样的:

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], #待会要添加信息的地方 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]

    然后添加键 DIRS 对应的值为:

    'DIRS': [os.path.join(BASE_DIR,'templates')]

    BASE_DTR 是指当前的项目目录,templates是指刚才创建模板目录

    除此之外还要将 DEBUG 的值改为 False,不然会出现调试页面,就看不到模板页面了

    然后在浏览器随便输入一个错误的网址,就会自动跳转到这个模板页面

    显示内容:

    自定义的404错误页面信息

    不过在学习测试阶段建议 DEBUG 的值设置为 True ,出错后方便调试

    URL的反向解析

    我将它理解成输出重定向,就是输入这个网址,但网页输出的是另外一个指定网址的页面内容

    首先在应用app_1 目录下的视图文件中新建一个 func 函数,内容如下:

    from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect #导入了两个函数 from django.urls import reverse #这个也是新导入的 def func(request): return HttpResponseRedirect(reverse('hello')) #重定向到名为 hello 的网址页面 def hello(request): return HttpResponse('hello , my first django !')

    然后在应用 app_1 目录下的子路由文件 urls.py 中添加以下信息:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^$', views.hello,name='hello' ), # 多加了 name 参数哦!就是将这个网址路径命名为hello re_path(r'^func/$',views.func,name='func') ]

    然后在浏览器输入:

    http://127.0.0.1:8000/app_1/func

    网页显示的内容是:

    hello , my first django !

    网址变成了:

    http://127.0.0.1:8000/app_1/

    注:当前使用的Django 版本为 2.0 版本

    学习资料:《python全栈工程师特训班》

    # URL配置

    视图函数里传参数

    首先我们在上篇文章中创建的应用 app_1 中的视图文件 views.py 中编写以一个带参数的函数 function ,并传入一个参数 num:

    内容如下:

    from django.shortcuts import render from django.http import HttpResponse def function(request,num): return HttpResponse(f'give function a num :{num}')

    这段代码将会在待会访问的网站中显示 HttpResponse 中的内容

    然后还要给这个视图文件配置一个子路由

    在应用 app_1 下的路由文件 urls.py 中添加以下内容:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^2/(2019)$',views.function) ]

    这里要注意了!!因为待会需要使用到正则,所以 path 要改为 re_path ,不然是会报错的,其他的书写格式也要注意一下哟!

    对于要传递的参数需要用 括号() 括起来,这里是传入一个常数: 2019

    然后启动服务:

    python manage.py runserver #这里是内网哦!

    最后打开浏览器访问如下地址:

    http://127.0.0.1:8000/app_1/2/2019

    上面传递参数的过程是在网址中传递参数并在视图中显示出来

    显示内容是:

    give function a num :2019

    因此得出传参的过程是将子路由文件中括号括起来的实参 2019 传递给了视图文件中的 function()的 num 变量

    使用未命名的正则表达式组

    另外可以通过正则表达式让传递的参数变得更加灵活,比如我可以通过传递3位数的任意数字访问这个网页内容

    那可以这样写代码,在应用 app_1 下的路由文件 urls.py 中添加以下内容:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^2/([0-9]{3})$',views.function) #第一种 re_path(r'^2/(/d{3})$',views.function) #第二种 ]

    正则涉及很多知识,这里不做重点

    这样写就可以实现在网址中输入任意三位字符均可访问该网站内容

    比如输入:

    http://127.0.0.1:8000/app_1/2/198 http://127.0.0.1:8000/app_1/2/110 http://127.0.0.1:8000/app_1/2/119

    访问以上网址均可看到页面内容:

    give function a num :198 give function a num :110 give function a num :119

    使用带有关键字的正则表达式组

    就是在网址中指定将要调用函数里的参数名

    在应用 app_1 下的路由文件 urls.py 中添加以下内容:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^2/(?P<yy>[0-9]{3})$',views.function) ]

    代码中通过 ?P 指定函数 function 的参数必须是 yy ,否则无效,注意 P 是大写

    也就是说 funtion 函数的内容应该变成了这样:

    from django.shortcuts import render from django.http import HttpResponse def function(request,yy): return HttpResponse(f'give function a num :{yy}')

    变量 num 改为了 变量 yy

    处理错误

    当输入的网址错误时我们需要返回给用户一个相对应错误,所以需要制作一个处理错误的模板,这里以404错误为例

    首先在项目 project_1 下创建一个模板文件夹 templates,在该文件夹中创建一个404.html 文件

    内容如下:

    <!DOCTYPE html> <html> <head> <title>404错误页面</title> </head> <body> <h1>自定义404错误页面</h1> </body> </html>

    这是自己定义的一个简单的页面

    然后在项目 project_1 下的配置文件 settings 文件中找到 TEMPLATES

    它的内容是这样的:

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], #待会要添加信息的地方 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]

    然后添加键 DIRS 对应的值为:

    'DIRS': [os.path.join(BASE_DIR,'templates')]

    BASE_DTR 是指当前的项目目录,templates是指刚才创建模板目录

    除此之外还要将 DEBUG 的值改为 False,不然会出现调试页面,就看不到模板页面了

    然后在浏览器随便输入一个错误的网址,就会自动跳转到这个模板页面

    显示内容:

    自定义的404错误页面信息

    不过在学习测试阶段建议 DEBUG 的值设置为 True ,出错后方便调试

    URL的反向解析

    我将它理解成输出重定向,就是输入这个网址,但网页输出的是另外一个指定网址的页面内容

    首先在应用app_1 目录下的视图文件中新建一个 func 函数,内容如下:

    from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect #导入了两个函数 from django.urls import reverse #这个也是新导入的 def func(request): return HttpResponseRedirect(reverse('hello')) #重定向到名为 hello 的网址页面 def hello(request): return HttpResponse('hello , my first django !')

    然后在应用 app_1 目录下的子路由文件 urls.py 中添加以下信息:

    from django.urls import re_path from . import views urlpatterns = [ re_path(r'^$', views.hello,name='hello' ), # 多加了 name 参数哦!就是将这个网址路径命名为hello re_path(r'^func/$',views.func,name='func') ]

    然后在浏览器输入:

    http://127.0.0.1:8000/app_1/func

    网页显示的内容是:

    hello , my first django !

    网址变成了:

    http://127.0.0.1:8000/app_1/

    注:当前使用的Django 版本为 2.0 版本

    学习资料:《python全栈工程师特训班》

    最新回复(0)