Django学习笔记之URL配置

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[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 文件

内容如下:




	404错误页面


	

自定义404错误页面

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

然后在项目 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 版本

学习资料:CSDN《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[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 文件

内容如下:




	404错误页面


	

自定义404错误页面

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

然后在项目 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 版本

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

你可能感兴趣的:(Django学习)