Django的MTV的模式三大层之一,视图层(url映射)基础
Posted myriads_changes_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django的MTV的模式三大层之一,视图层(url映射)基础相关的知识,希望对你有一定的参考价值。
Django视图层衔接了HTTP请求、后台程序以及前端html模板等内容,URLdispatcher(URL分布)映射配置又是Django整体项目的入口配置,即URLdispatcher是用来指定用户访问后台python处理函数的控制器。
1、正则表达式
在url映射的配置中,对于HTTP路径的配置就要使用到正则表达式。
正则表达式一般是用来匹配一段符合要求的字符串或者URL。
大家可以看这篇博文来学习正则表达式。
Python-强大的正则表达式,让你快速匹配字符串
使用正则表达式可以快速正确的匹配上符合要求的URL,避免URL映射失败或者错误。
注意注意注意:
Django2.0以后就可以不使用正则来匹配URL,但是在之前的版本是需要使用正则来匹配URL,并且目前2.0还没有弃用URL配置来=方式
2、一般URL映射
from django.urls import path
import app1.views
urlpatterns = [
path('app1/', app1.views.helloword),
]
如上所示的urls.py
文件,此文件是用来维护URL分布的,映射的实现就是在urlpatterns
列表中中完成。
path()
- 第一个参数就是HTTP路径,
- 第二个参数就是要映射的后台Python函数
Django对于一般的URL映射还有一种方式,即对URL中的参数经行命名设置,在给予不同的映射,这样对于开发者来说,可以对参数的实际意义清晰明了,具体示例如下:
import app1.views
urlpatterns = [
path('year/2018', app1.views.today_2018),
path('year/<int:year>',app1.views.year_today),
path('month/<int:year>/<int:month>',app1.views.month_today)
]
上诉示例中后两个path()对参数经行了命名设置,在views.py中函数的编写形式就应该是year_today(request,year=xxxx)和 month_today(request,year=xxxx,month=xx)。
注意注意注意:
当一个URL映射到多个函数时,Django会按**顺序排列**,即第一个匹配的为最终的映射函数。
例如上述的year/2018时可以匹配第3和第4行两个映射,但Django最终判定的时第三行的映射,
即调用today_2018()函数。
3、分布式URL映射
在django学习或者运用中,将会遇到一些大型的项目,一个项目含有多个APP,所有的映射都定义在项目的urls.py文件中,一方面会造成整体的映射路径混乱,另一方面不利于网站的维护。因此Djiango提供了另一个中映射------分布式映射,即映射可以编写在不同的urls.py文件中,然后通过**include()**函数经行分布式映射,例如:
"""
项目下的urls.py
"""
from django.urls import path,include
urlpatterns = [
path('app1/',include('app1.urls')),
path('app2/',include('app2.urls'))
]
app1应用下的urls.py
"""
app1应用下的urls.py
"""
import app1.views
urlpatterns = [
path('year/2018', app1.views.today_2018),
path('year/<int:year>',app1.views.year_today),
path('month/<int:year>/<int:month>',app1.views.month_today)
]
app2应用下的urls.py
"""
app2应用下的urls.py
"""
import app2.views
urlpatterns = [
path('year/2018', app2.views.today_2018),
path('year/<int:year>',app2.views.year_today),
path('month/<int:year>/<int:month>',app2.views.month_today)
]
上诉中,在不同的urls.py中可以映射本身APP的函数,当然也可以包含其他App的映射。
不同的应用对应不同的映射。
4、反向解析
Django中URL映射到后台视图函数的功能及方法非常丰富多变,但除此之外Django还提供反向解析功能,即视图函数解析出对应得URL。这项功能让开发者无需纠结于URL得绝对路径,直接使用映射名即可,大大提高了代码得可维护性。
(1)普通反向解析
import app2.views
urlpatterns = [
path('year/2018', app2.views.today_2018,name='today_2018'),
]
在模板文件中调用{%url%}标签来调用反向解析,通过上述示例中的name参数将映射命名为’today_2018‘,然后再模板文件中先进行声明。如下:
<a href={% url 'today_2018'%}>显示2018年的情况</a >
其中再python中的反向解析是通过reverse()函数(views.py中)实现
from django.shortcuts import reverse
from django.http import HttpResponseRedirect
def _to_year(request):
return HttpResponseRedirect(reverse('today_2018'))
上述模板反向解析的结果如下:
<a href='/year/2018'></a>
(2)带参数得反向解析
对于带参的反向解析,同样是先定义URL映射规则
urlpatterns = [
path('year/<int:year>',app1.views.year_today,name='year_today'),
]
<a href={% url 'year_today'2019%}>显示2019年的情况</a >
其中再python中的反向解析是通过reverse()函数(views.py中)实现
from django.shortcuts import reverse
from django.http import HttpResponseRedirect
def _to_year(request):
return HttpResponseRedirect(reverse('year_today',args=(2019,)))
其中reverse()函数中的args是用于设置URL中的参数。
上述模板反向解析的结果如下:
<a href='/year/2019'></a>
这里的反向解析,自我认知就是根据你的url来确定模板
希望这篇博文对你有用!
谢谢点赞评论!
以上是关于Django的MTV的模式三大层之一,视图层(url映射)基础的主要内容,如果未能解决你的问题,请参考以下文章