Django 的路由层(URLconf)

URL配置(conf)就像是Django所支撑的网站的目录;

本质就是:URL与调用该URL执行的视图函数的映射表;

通俗的讲:就是用户使用哪个url,URL(conf)就需要告诉服务器执行哪个程序代码.

一  路由配置的简单使用

path :不能使用正则 ,path('路径',views.方法)

re_path :可以使用正则 ,re_path(r'正则表达式路径',views.方法)
from django.urls import path,re_path 

from app01 import views #必须导入views

urlpatterns = [
re_path(r'^articles/2003/$', views.special_case_2003), ]

二  路由配置使用注意事项

  •   若要从URL中获取一个值,只需要在对应的URL处放置一对圆括号
re_path(r'^articles/([0-9]{4})/$', views.year_archive) 
#传送给views时会携带小括号的数值,故需要相应的形参接受
  • 不需要添加一个前导的反斜杠,因为每个URL 都有。
re_path(r'/articles/$', views.year_archive)  #错误写法
  • 每个正则表达式前面的'r' 是可选的但是建议加上.

三 路由配置与views传值过程解析

'''
url配置:
re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 对应url请求时候的传值过程 /articles/2005/03/ 请求将匹配列表中的第三个模式。
Django 将调用函数views.month_archive(request, '2005', '03')。 '''

四 有名分组

  1 基本格式

path('index/(? P<year> \d{4})',views.year)

对应views中

def year(request,year):

     return HttpResponse(year)

  2 传值方式---关键字传参

/articles/2003/03/03/ 
请求将调用函数views.article_detail(request, year='', month='', day='')。

五 分发(include)

  1、分发意义

  ULR解耦合。把每一个应用的视图函数放入自己的文件中,全局的urls只需要分配该路径属于某一个应用的视图函数。这样解决如果有一个程序出了问题不会影响到其他的应用的执行。

urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'^app01/', include('app01.urls')),
] 之后app01中的urls,再对匹配成功的url进行分发

六 反向解析

  1 使用场景

在模板中:使用url 模板标签。
     {%  url '别名' %}
在Python 代码中:使用from django.urls import reverse()函数
  rev_url=reverse('别名')
  

  2 html文件中的反向解析

项目.urls.py 设置别名 name='Index'

from django.contrib import admin
from django.urls import path,re_path from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index,name='Index'),
path('login/', views.login) ]

app01.views.py中 导入 inverse

from django.shortcuts import render,HttpResponse,redirect

from django.urls import reverse #导入方向解析函数

# Create your views here.

def index(request):

    return render(request,'index.html')

def login(request):
print(request.method)
if request.method=='GET':
return render(request,'login.html')
else:
re_path=reverse('Index') #反向解析
return redirect(request,re_path)

  3 html 文件中的反向解析

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{% url 'Log' %}" method="post">
{% csrf_token %} 用户名 <input type="text" name="user"> 密码 <input type="text" name="pwd">
<input type="submit">
</form>
</body>
</html>

  4 反向解析解析过程分析

  根据别名,在urlpatterns中找到对应的路径并返回

五 名称空间(解决反向解析出现找不到正确url的问题)

  命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

  由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回.

  我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。

project的urls.py

urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'^app01/', include("app01.urls",namespace="app01")),
re_path(r'^app02/', include("app02.urls",namespace="app02")),
]

app01.urls

urlpatterns = [
re_path(r'^index/', index,name="index"),
]

app02.urls

urlpatterns = [
re_path(r'^index/', index,name="index"),
]

app01.views 

from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app01:index"))

app02.views

from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app02:index"))

Django 路由层(urlconf)的更多相关文章

  1. 解析Django路由层URLconf

    目录: 一  Django中路由的作用 二  路由的分组 三  路由分发 四  反向解析 五  名称空间 六  Django2.0版的path 一.Django中路由的作用 URL配置(URLconf ...

  2. Django2.0路由层-URLconf

    目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...

  3. 关于Django路由层简单笔记

    Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...

  4. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  5. Django路由层与视图层、pycharm虚拟环境

    一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...

  6. 关于Django中路由层(URL-conf)

    关于路由层 路由层其实就是项目中urls.py那个文件,那里面存放着url和视图函数的对应关系它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来 ...

  7. Django路由层

    路由层简单配置 urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'^articles/2003/$', views.special_ca ...

  8. Django --- 路由层(urls)

    目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...

  9. django 路由层 伪静态网页 虚拟环境 视图层

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...

随机推荐

  1. nginx替换响应内容

    因为想要将非业务域名内嵌到微信小程序中,所以用到了nginx的反向代理功能来替换域名实现盗站(缘起:http://www.cnblogs.com/kenwar/p/8288882.html),但是替换 ...

  2. 【朝花夕拾】Android Log篇

    前言  从事Android开发的这些年中,经常碰到这样一个现象:同一款app中,往往有好几种风格迥异的log处理方式,有时候会让维护者晕头转向.同时笔者也经常碰带一些模棱两可的问题:Log等级分好几种 ...

  3. [Leetcode]112. Path Sum -David_Lin

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  4. 自己构建一个Spring自定义标签以及原理讲解

    平时不论是在Spring配置文件中引入其他中间件(比如dubbo),还是使用切面时,都会用到自定义标签.那么配置文件中的自定义标签是如何发挥作用的,或者说程序是如何通过你添加的自定义标签实现相应的功能 ...

  5. TCP的11种状态

    TCP的11种状态 TCP三次握手建立连接 Tcp头部 六个标志位中,我们要用到三个: SYN:SYN= 1 表示这是一个连接请求或连接接受报文.在建立连接时用来进行同步序号(个人理解是,在建立连接的 ...

  6. 滚动 docker 中的 nginx 日志

    Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...

  7. Docker 镜像之存储管理

    笔者在<Docker 镜像之进阶篇>中介绍了镜像分层.写时复制以及内容寻址存储(content-addressable storage)等技术特性,为了支持这些特性,docker 设计了一 ...

  8. ROS笔记1 安装及创建一个ROS Package

    安装 跟着官方的安装指引来就行了.安装前要先确定自己的ros版本和ubuntu版本.这二者是一一对应的. http://wiki.ros.org/ROS/Installation 主要是package ...

  9. .NET: 谈谈C#中的扩展方法

    扩展方法(Extension Methods)是C#3.0时引入的新特性,相信很多人都听过并且也都用过,最常见的是在LINQ中的使用. 不仅如此,在开发中,我们也可以创建自己扩展方法,使用它来优化类的 ...

  10. 事件绑定on与hover事件

    今天项目中UI设计了一个鼠标划入和划出的效果,本来这个小效果是非常简单的!可是在实际的生产环境中就出现了一点点问题!因为在实际的环境中,数据全部是用ajax异步加载进去的,这样就造成了hover方法不 ...