1,路由系统就是url系统,整个url系统就是请求进入Django项目的入口,每一个请求的种类由url分析完毕并再去返回相应的响应,它的本质是url与要为该url调用的视图函数之间的映射关系表(当项目特别庞大,请求特别多,的时候需要按照功能的不同编写路由系统)

浏览器请求的8中方式

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

URLconf的基本格式

from Django.conf.urls import url
urlpatterns = [
  url(正则表达式,view视图,参数,别名),
]

参数说明:

  1>正则表达式:一个正则表达式字符串

  2>views视图:一个可调用的对象,通常为一个视图函数

  3>参数:可选的要传递给视图函数的默认参数(字典形式)

  4>别名:一个可选的name参数

在Django2.0版本的路由系统是下面的写法

from django.urls import path, re_path
urlpatterns = [
path(正则表达式, view视图,参数, 别名)
或者 re_path(正则表达式, view视图,参数,别名)
]

2,正则表达式的详解

在之前获取用户要删除或者编辑的对象,往往通过在html文件里?id={{ 变量.id }}来获取要删除的对象,下面我们介绍一种不用在html文件里写,在正则表达式匹配就可以实现

注意事项:1>要把html文件中的?id={{ foo.id }}删除掉

      2>在view函数里要增加一个参数接收分组来的参数,也是要删除的id值

2.1>配置url的基本(分组了,但是没有命名)

from django.conf.urls import url
from . import views urlpatterns = [
url(r'time/2018/$', views.now_time),
url(r'time/([0-9]{4})/$', views.year_time),
url(r'time/([0-9]{4})/(0-9){2}/$', views.moth_time),
url(r'time/([0-9]{4})/([0-9](2)/([0-9]{2})/$', views.day_time) ]

此时分组后得到的参数做为位置参数传递给视图函数

配置url的注意事项

1>urlpatterns中的元素按照书写的顺序从上往下逐一匹配正则表达式,一旦匹配成功不再继继续

2>若要从url中捕获一个值,只需要在它周围放一对圆括号(分组匹配)

3>不需要添加一个前导的反斜杠,因为每个url都有.这是因为在Django  settings.py文件中默认APPEND_SLASH=True,这个参数的作用就是自动在网址结尾加反斜杠("/")

# 是否开启url访问地址后边不加反斜杠(/),跳转的时候自动带有/配置项
APPEND_SLASH = True

如果在settings中设置了APPEND_SLASH = False,此时就不会帮我们自动的补那个路径了,这时输入路径的时候,在最后就必须加上那个反斜杠(/)

3,分组命名匹配

在简单使用正则表达式匹配(括号括起来)来捕获url中 的值并以位置参数形式传递给视图,在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获url中 的值,并以关键字参数形式传递给视图

语法:(?P(这个p一定要大写)<name>pattern),其中name是组的名称,pattern是要匹配的模式

from django.conf.urls import url
from . import views
urlpatterna = [
url(r'time/$', views.now_time),
url(r'time/(?P<year>[0-9]{4})/$', views.year_time),
url(r'time/(?P<year>[0-9]{4}/(?P<month>[0-9]{2}/$'), views.month_time),
url(r'time/(?P<year>[0-9]{4}/(?P<month>[0-9]{2}/(?P<day>[0-9]){2})/$', views.day_time),
]

此时分组以后的参数,将会议关键字参数的形式传递给视图函数

此时视图函数里边就要这样写了

def month_time(request, year=2018 month=10)
pass
# 在这里给year指定一个默认值参数,给month指定一个默认值参数

###正则匹配捕获到的参数永远是一个字符串,传递给视图函数###

4,视图函数指定默认值

from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^time/(?P<year>[0-9]{4}/(?P<month>[0-9]{2})/(?P<day>[0-9]){2})/$', views.day_time) ]

视图函数:

def day_time(request, year="2018", month="10",day="10")

    pass

include分发路由看下图:↓

5,传递额外的参数给视图函数

URLconfs具有一个钩子,传递一个python字典作为额外的参数传递给视图函数,django.conf.urls,url可接受一个可选的第三个参数,它是一个字典,表示给视图函数的额外的关键字参数

from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^blog/(?P<year>[0-9]{4})/$', views.year_time, {"foo":"bar"}),
]

当我们在浏览器发送请求的时候(/blog/2007/),Django会将调用views.year_time(request,year="2007",foo= "bar"),当传递额外参数的字典中的参数和url捕捉到的值的命名关键字参数同名时,函数调用时将使用的是字典中的参数,而不是url中的捕获的参数.看下图↓

6,命名URL和URL的反响解析

6.1>URL命名:给正则URL匹配起一个名字,一个URL匹配模式起一个名字,这样url代码就不用写死了,可以随意的去修改,不论修改成什么,我们都重命名一个名字,我们调用视图的函数都调用这个 新名字,提高了url的灵活性.

比如:

url(r'^xuexue/$', views.miss, name=miss)  # 给url(不论是什么)都起名为miss,所以在调用视图函数的时候要命名成miss的函数

在模板语言里边的用法:看下图↓

{% url "miss" %}  # url路径,miss用字符串表示

在以后的项目发展中,有可能url和视图函数存在多对一的关系,即一个视图函数被多个url调用(好比press_list),这时有了重新命名还不够,每次反向解析的时候有视图名还不够,如果视图url中的视图函数多次一样,反向解析的最后一次就会把之前的命名覆盖掉,因此还要加上命名空间

反向解析是在跳转页面,和路径相关,解析到url再去匹配,匹配成功执行相应的视图函数看下图↓

7,命名空间模式

是避免当好多APP重命名一样的名字的时候,url反转,最后一次重命名会覆盖前几次的命名

因此需要命名空间给命名去分类,避免重复

语法:

from django.conf.urls import url, include
from django.contrib import admin
from app04 import views
urlpatterns = [
url(r'^blog/(?P<year>[0-9]{4})/$', views.year_time, {"year": "2018"}), # 作者列表
url(r'^XueXue/$', views.miss, name="miss"),
url(r'^time/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_time, name="month_time")
]

模板中使用

{% url "app04:moth_time" year=2018 month=10 %}

view视图中使用

v = reverse("app04:month_time", kwargs={"year":2018,"month":10})

这样反转就正确了

Django框架之路由的更多相关文章

  1. 3/19 Django框架 url路由配置及模板渲染

    3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...

  2. [Django框架之路由层匹配、有名 无名分组、反向解析、路由分发、名称空间、伪静态、本地虚拟环境、django版本区别]

    [Django框架之路由层匹配.有名 无名分组.反向解析.路由分发.名称空间.伪静态.本地虚拟环境.django版本区别] 路由层 路由即请求地址与视图函数的映射关系,如果把网站比喻成一本书,那路由就 ...

  3. day05 django框架之路由层

    day05 django框架之路由层 今日内容概要 简易版django请求声明周期流程图(重要) 路由匹配 无名有名分组 反向解析 无名有名解析 路由分发 名称空间 伪静态 虚拟环境 简易版djang ...

  4. Django框架简介-路由系统

    2.2 路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是 ...

  5. django框架基础-路由系统-长期维护

    ##################   路由系统介绍    ####################### 路由系统就是路径和函数的对应关系, 路由系统可以看成支撑你这个网站的目录,就像是一本书一样 ...

  6. Django框架之路由层汇总

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

  7. Django框架的探索

    django框架的路由 django2 路由支持正则匹配,如: re_path(r'^category/(?P<category_id>\d+)/$',CourseCategoryView ...

  8. django框架--路由系统

    目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...

  9. 第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

随机推荐

  1. 树莓派 - MQTT

    安装mosquitto 下载源代码包 wget http://mosquitto.org/files/source/mosquitto-1.5.tar.gz 解压 tar zxfv mosquitto ...

  2. 上海苹果维修点分享苹果电脑MACBOOK故障维修常见案例

    苹果的电子设备无论是外观和性能都是无与伦比的美丽,很多开发者都开始选用苹果电脑macbook.近年来苹果售后维修点来维修苹果电脑的用户也越来越多,我们上海苹果维修点就整理分享了一些苹果电脑MACBOO ...

  3. python 闭包&装饰器(一)

    一.闭包 1.举例 def outer(): x = 10 def inner(): # 内部函数 print(x) # 外部函数的一个变量 return inner # 调用inner()函数的方法 ...

  4. 05 selenium模块

    selenium模块 selenium selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作. selenium最初是一个自动化测试工具,而爬虫中使 ...

  5. 【01】sass安装

    因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby   下载地址:https://rubyinstaller.org/downloads/       ** ...

  6. spring的IOC底层原理

    我们调用一个类的方法,首先是User user=new  User(),对象调用这个方法,user.add(),这种方法有一个缺陷就是代码的耦合度太高,比如你的servlet调用User类里的方法,需 ...

  7. Ubuntu 16.04安装JDK7/JDK8的两种方式

    ubuntu 安装jdk 的两种方式:1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 使用ppa ...

  8. POJ-2421Constructing Roads,又是最小生成树,和第八届河南省赛的引水工程惊人的相似,并查集与最小生成树的灵活与能用,水过~~~

    Constructing Roads Time Limit: 2000MS   Memory Limit: 65536K               Description There are N v ...

  9. [Go]指针操作

    指针类型比较常见 type Dog struct { name string } func (dog *Dog) SetName (name string){ dog.name = name } 对于 ...

  10. Personal Recommendation Using Deep Recurrent Neural Networks in NetEase读书笔记

    一.文章综述 1.研究目的:实现网易考拉电商平台的商品高效实时个性化推荐.缩短用户与目标商品的距离,让用户点击最少的页面就可以得到想要的商品 2.研究背景:基于用户和基于物品的协同过滤(Collabo ...