我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django之路由层

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django之路由层

  url配置就像Django所支撑网站的目录。它的本质是url与要被该url调用的视图函数之间的映射表;通过这个映射表可以告知Django,对于客户端发来的某个url该执行那些代码。

  一、简单的路由配置

from django.urls import path,re_path
from app01 import views
urlpatterns = [
    re_path(r'^articles/2003/$', views.special_case_2003),
  path('articles/2003/',views.special_case_2003), 这一句和上一句的效果一样,path自动加上了开头^和结尾& re_path(r'^articles/([0-9]{4})/$', views.year_archive), re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 带()就是分组,只要分组的数据就可以作为位置参数传给视图函数 re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
   ]
re.path()相当于要自己写正则来匹配url,如果发过来的url的能匹配上,那就执行相对应的views;
不需要添加一个前导的反斜杠,因为你不用写,它会自动给你加上一个/,如果你写了一个前导的反斜杠,匹配的时候就会成了两个反斜杠,这样会报错的
'''
 一些请求的例子:

/articles/2005/03/ 请求将匹配列表中的第三个模式。Django 将调用函数views.month_archive(request, '2005', '03')。
/articles/2005/3/ 不匹配任何URL 模式,因为列表中的第三个模式要求月份应该是两个数字。
/articles/2003/ 将匹配列表中的第一个模式不是第二个,因为模式按顺序匹配,第一个会首先测试是否匹配。请像这样自由插入一些特殊的情况来探测匹配的次序。
/articles/2003 不匹配任何一个模式,因为每个模式要求URL 以一个反斜线结尾。
/articles/2003/03/03/ 将匹配最后一个模式。Django 将调用函数views.article_detail(request, '2003', '03', '03')。
   
    '''

  二、有名分组

  上面我们说了,带()就是进行了分组,就会作为位置参数传给视图函数,视图函数也要以位置来区分每个数据,当数据很庞大时,就会混乱;其实我们在正则里面可以给分组的取个名字,如果分组的有名字了就会以关键字参数的形式传给视图函数,此时视图函数就要以每组的名字来接收数据,顺序都是无所谓的。

from django.urls import path,re_path

from app01 import views

urlpatterns = [
    re_path(r'^articles/2003/$', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]
'''请求的例子
    /articles/2005/03/ 请求将调用views.month_archive(request, year='2005', month='03')函数,而不是views.month_archive(request, '2005', '03')。
    /articles/2003/03/03/ 请求将调用函数views.article_detail(request, year='2003', month='03', day='03')。

    '''

  三、分发

  我们知道哈,在每个应用中有views,models,相当于说每个应用有自己的视图文件和模板文件,但没有自己单独的url,在整个项目里面有一个共同的urls,也就就是说大家共用一个urls,其实这样解耦不好,其实我们可以自己为每一个应用加上一个url,再做一个分发就行了。

'''
At any point, your urlpatterns can “include” other URLconf modules. This
essentially “roots” a set of URLs below other ones.

'''

from django.urls import path,re_path,include
from app01 import views

urlpatterns = [
   re_path(r'^admin/', admin.site.urls),
   re_path(r'^blog/&', include('blog.urls')),       blog就是一个应用,当请求路径为/blog/时,先到全局的urls中找,找到blog.urls,相当于找到了blog应用下的urls,从此,我们就可以把每个应用的路由配置写在自己的urls中
]

  四、反向解析

  反向解析是挺难理解的。在HTML文件中的a标签需要写一个路径,还有form表单中也是,其实我们不需要直接把路径写上去,可以用一个代号,这样写的好处在于:如果要求我们把HTML中的路径改了,那我们是不是一个一个的把所有的都该了,如果有无数多个,那我们就得该无数次,这样效率太低,但我们用反向解析就一下解决了。

  在需要url的地方,对于不同层级,Django提供不同的工具用于url反查:

  1,在模板中,使用url模板标签

  2,在python代码中,使用from django.urls import reverse

urls.py:

from django.conf.urls import url

from . import views

urlpatterns = [
    #...
    re_path(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
    #...
]

在HTML文件中

<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>

<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>

python逻辑中

from django.urls import reverse
from django.http import HttpResponse,redirect

def redirect_to_year(request):
    # ...
    year = 2006
    # ...
    return redirect(reverse('news-year-archive'))   # 同redirect("/path/")

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django之路由层

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django之路由层

url配置就像Django所支撑网站的目录。它的本质是url与要被该url调用的视图函数之间的映射表;通过这个映射表可以告知Django,对于客户端发来的某个url该执行那些代码。  一、简单的路由配置from django.urls im
2023-01-30

Django之路由系统

URL配置(URL.conf)就像Django所支撑网站的目录,它的本质是URL与要为该URL调用的视图函数之间的映射表.我们就是以这种方式告诉Django,遇到哪个URL的时候,要对应执行哪个函数.URLconf配置基本格式:from d
2023-01-30

Web框架之Django_03 路由层了

摘要:路由层无名分组有名分组反向解析路由分发名称空间伪静态网页、虚拟环境视图层JsonResponseFBV 与 CBV(function base views与class base views)文件上传一、路由层:(Django的路由系统
2023-01-31

Django框架之路由怎么使用

这篇文章主要介绍“Django框架之路由怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Django框架之路由怎么使用”文章能帮助大家解决问题。简介路由简单的来说就是根据用户请求的 URL 链
2023-07-02

Django之视图层

一、视图函数  一个视图函数,简称视图,是一个简单的python函数,接收web请求并返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误等。在函数中必须写一个request的参数,然后必须要有返回值,中间的逻辑随便
2023-01-30

django URL (路由系统)

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。语法:urlpat
2023-01-30

django之路由分组,反向解析,有名,

路由层  无名分组  有名分组  反向解析  路由分发  名称空间  伪静态的概念urlpatterns = [  url(r'^admin/', admin.site.urls),  url(r'test',views.test),  u
2023-01-31

Django之模板层

在一个项目里面有一个专门放模板的文件夹Templates,有一个专门放视图的文件views,而且我们大多给浏览器响应的都应该是一个完整的页面,也就是读取的是一个HTML文件,然后再返回给浏览器。但我们在写HTML文件时,里面关于要从数据库拿
2023-01-30

Django的路由控制

Django的路由控制URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行一般来说,
2023-01-30

Django的URL路由系统

一. URL配置  URL配置就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图之间的映射表.你就是以这种方式告诉Django,对于哪个URL调用的这段代码.  基本格式from django.conf.urls i
2023-01-30

django路由基本使用-6

路由定义位置django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的。 urls.py 文件是路由解析的入口。from django.conf.urls import urlfrom . import view
2023-01-30

Django中怎么创建URL路由

在Django中,可以通过在项目的urls.py文件中定义URL路由来创建路由。以下是一个简单的例子:在项目的urls.py文件中导入urlpatterns模块:from django.urls import pathfrom . imp
Django中怎么创建URL路由
2024-03-05

Django 模型层之多表操作

一.创建模型实例:作者表: 拥有字段:姓名(name),性别(sex),该表与书籍表之间为多对多的关系作者详情表: 拥有字段:地址(addr),手机号(phone),该表与作者表之间为一对一的关系出版社表: 拥有字段:名字
2023-01-30

Django之模型层(多表操作)

一、创建模型  1,一对多关系  一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一对多关系,书是‘多’的一方,出版社是‘一’的一方,我们在建立模型的时候,把外键写在‘多’的一方,即我们要把外键写在book类。cla
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录