django之路由的理解
一:路由
简单的路由过程图:
1. 路由的定义位置
路由定义方式一:主路由和子路由分开定义
主路由的定义 urls.py
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^user/', include('user.urls'))
] 子路由的定义 user/urls
from django.conf.urls import url
from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [
url(r"^index/$", views.index),
]
路由的定义方式二:不在user目录中手动urls.py,而是将所有的路由都定义在主路由中。
from django.conf.urls import url
from django.contrib import admin
import users.views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^user/index/$', users.views.index)
]
二:路由的解析顺序
Django接收一个请求时,从主文件的urls中的urlpatterns列表中从上至下顺序寻找路由,如果遇见include,进入里面继续寻找子路由。
但是:因为由上至下,所以会造成上面的路由覆盖下面的路由,导致下面的路由访问不到,举例说明
from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request):
"""
:return:
"""
return HttpResponse("中国,你好") def index_test(request): return HttpResponse("专门测试路由屏蔽,看是否能被访问到")
修改user中的urls中的urlpatterns列表
from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django
url(r"^index/$", views.index),
url(r"^index_test/$", views.index_test) # 测试是否被覆盖 ]
访问 127.0.0.1:8000/user/index_test:路由没有被覆盖
上下互换 index和index_test也不会被覆盖:原因是$,终止符
假设去掉终止符$:看看情况如何
from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django
url(r"^index", views.index),
url(r"^index_test", views.index_test),
# url(r"^index/$", views.index), ]
结果:再也不能执行到index_test的视图函数中去:去掉斜杠了和$,匹配到第一个index就停止了,直接进入index中去了。
但是不去掉斜杠,依然可以进入视图
from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django
url(r"^index/", views.index),
url(r"^index_test/", views.index_test),
# url(r"^index/$", views.index), ]
结果:可以执行到index_test视图函数中去
说明 / 有类似于$一样的终止的功能,到底是不是呢?
解释:加斜杠的url(r"^index_test/", views.index_test),能保证路径的唯一性。
用户访问 index_test 或者 index_test/ 网址,均能访问到index_test视图。
即使你输入的网址是127.0.0.1:8000/user/index_test django框架还是将网址显示为:127.0.0.1:8000/user/index_test/
因此:必要的时候还是以$结尾,即使不以$结尾,也要以/结尾,以免发生路由覆盖的问题。
三:反向解析
# 没搞懂
django之路由的理解的更多相关文章
- python 全栈开发,Day68(Django的路由控制)
昨日内容回顾 1 MVC和MTV MTV 路由控制层(分发哪一个路径由哪一个视图函数处理) V : views (逻辑处理) T : templates (存放html文件) M : model (与 ...
- django框架--路由系统
目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...
- Django系列(二):Django的路由层,视图层和模板层
1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...
- django的路由系统
在django生成的工程项目文件中urls.py文件用于指定路由信息 该文件默认导入以下模块 from confimport from import admin from confimport url ...
- django之路由层
一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...
- Python学习(三十一)—— Django之路由系统
转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...
- Django之路由
Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时 ...
- Django之路由系统 Dj
Django之路由系统 Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...
- Django框架----路由系统(详细)
Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...
随机推荐
- 使用IDEA 创建Maven项目,外加SSM框架
使用idea 新创建项目 然后 新创建 java .resources 文件夹...... 图上是项目结构 java文件夹下的 文件夹 命名规范 com.nf147(组织名)+ oukele(作者) ...
- Oracle JET(一)Oracle JET介绍
Oracle JET (Oracle Javascript Extension Toolkit)是一款 Oracle 的 JavaScript 拓展工具包.简单来说 Oracle JET 是一个一堆好 ...
- React-Native 之 GD (三)近半小时热门
1.设置页面跳转 半小时热门组件 GDHalfHourHot.js /** * 近半小时热门 */ import React, { Component } from 'react'; import ...
- dp基础大概 (8.6)
一些前言: 据说动态规划会用排序,数据结构来进行乱搞优化操作 动态规划滴核心是个啥呢?状态表示和状态转移 设状态:哪些因素会影响到最终答案,就把哪些因素用数组的维度表示出来 要充分描述,也要简洁 举个 ...
- 通用 C# DLL 注入器injector(注入dll不限)
为了方便那些不懂或者不想用C++的同志,我把C++的dll注入器源码转换成了C#的,这是一个很简单实用的注入器,用到了CreateRemoteThread,WriteProcessMemory ,Vi ...
- docker 提高效率 network-bridging 桥接
安装的时间顺序 bit3 192.168.107.128 wredis 192.168.107.129 wmysql 192.168.107.130 wslave 192.168.107.131 w ...
- Java接口继承
Java中接口可以继承接口,并且可以多继承.
- jmeter之跨线程组共享cookies
jmeter在一个线程组里,可以把登录接口放在上面,再添加一个cookies管理器元件,这样下一个接口就可以携带登录信息.在不同线程组里其实也可以共享cookies 目录 1.方法 2.应用 1.方法 ...
- HAWQ技术总结
HAWQ技术总结: 1. 官网: http://hawq.incubator.apache.org/ 2. 特性 2.1 sql支持完善 ANSI SQL标准,OLAP扩展,标准JDBC/ODBC支持 ...
- pyenv python 版本控制
经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...