URL配置就像Django所支撑的网站目录,它的本质是每条URL调用的视图函数的映射表,每一个请求执行对应的视图函数。

1、简单的路由配置 
 from django.contrib import admin
from app01 import views
from django.urls import path, re_path,include
# 与django1版本不同的是django2版本是path和 re_path。re_path支持正则,和django1版本的url一样的效果。include是路由分发用的。分发给每个app urlpatterns = [
path('admin/', admin.site.urls),
00 re_path('^$',views.index)    # 直接写开头和结尾两个匹配字符,代表ip加端口模式
re_path(r'^articles/2003/$', views.special_case_2003), # 以article开头和以2003结尾的都可以匹配的到
re_path(r'^articles/([0-9]{4})/$', views.year_archive), # 对应函数接收时,多一个参数 year_archive(request,year)
re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), # 对应函数接收时,多两个参数 month_archive(request,year,month)

注意:若要从URL捕获一个值,只需要在他周围放置()。开头也不需要加/ ,因为每个url都会自动加上。例如^articles,而不是^/articles。每个正则表达式前面的r代表不转义的意思。告诉python这个字符串是原始的,不需要任何转义。

2、有名分组 

上面的示例中使用简单的、没有命名的正则表达式组(通过括号)来捕获url值,并以位置参数传递给视图。在高级用法中,可以给正则表达式命名。这样就是以关键字参数传递给视图,在python中,命名正则表达式的语法是(?P<name>pattren)

name是组的名称。pattern是要匹配的模式。

     # 命名分组
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), #year_archive(request,month=month,year=year) 以关键字参数传递给视图,位置可调换。
3、路由分发 

当一个项目有好多条url和好多应用时,就要设计好,运用include路由分发到不同app里面,这样看起来也舒服,全写在主url太多了。

     # 分发
re_path(r'^',include('app01.urls')),
re_path(r'^app01/',include('app01.urls')), # 以app01开头。然后分发到app01下的urls文件
re_path(r'^app02/',include('app02.urls')), # 以app02开头。然后分发到app02下的urls文件
4、反向解析 

django项目也有用于嵌入到生产内容中、比如视图和模版里的url等。或者重定向等。如果你项目之前设计好了url.,项目完成后或者上线后,老板要求你改url,后面的视图和模版也要跟着改,实在麻烦,所以有了反向解析。不再采取硬编码的url。

     # 反向解析
re_path('^login/$', views.login, name='login'),# name代表名称。 3 re_path(r'^articles/([0-9]{4})/$', views.year_archive,name='y_a'), # 带参数的url反向解析



<!--语法{% url 'name' %} name对应urls.py里的每条url后面的name变量,这样,就算url规则改了,form表单里会自动反向解析那条修改的url。-->
<form action="{% url 'login' %}" method="post">
用户名:<input type="text" name="user">
密码:<input type="password" name="pwd">
<input type="submit" value="登陆">
</form>
<a href="{% url 'y_a' 2012 %}">2012 Archive</a>

<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'y_a' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
 from django.shortcuts import render, HttpResponse,redirect
# django的三种响应方式,render是渲染一个页面,Httpresponse是返回一个字符串,redirect重定向 # Create your views here. def special_case_2003(request): url=reverse('s_c_2003')
print(url)
00 year=2000
print(reverse('y_a',args=(year,))) # 如果要传递参数,后面跟元祖,
return HttpResponse("Hello Python") def index(request):
print(reverse('app01:index')) # app01下对应的name是index的url
return HttpResponse('app01的index')
4、名称空间 

名称空间:namespace,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。

    # 名称空间:include放一个元祖
re_path(r'^app01/', include(('app01.urls', 'app01'))),
re_path(r'^app02/', include(('app02.urls', 'app02'))),
 app01.urls:

 urlpatterns = [
re_path(r'^index/', views.index,name="index"),
]
app02.urls: urlpatterns = [
re_path(r'^index/', views.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"))

005--Django2.0的路由层的更多相关文章

  1. Django 2.0 的路由如何实现正则表达式

    在django2.0的路由系统中,摒弃了1.x中的url,而改用path.需要导入path. from django.urls import path,re_path 在1.x中,使用url()即可实 ...

  2. Django2.0路由层-URLconf

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

  3. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  4. django2.0 路由规则

    Django2.0中URL的路由机制 路由是关联url及其处理函数关系的过程.Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称. Django ...

  5. Django2.0中URL的路由机制

    路由是关联url及其处理函数关系的过程.Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称. Django的路由都写在urls.py文件中的ur ...

  6. 5 Django-2 的路由层 (URLconf)

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

  7. Django-2 路由层

    U RL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 2.1 简单的路由配置 from django.urls import p ...

  8. Django2.0路由补充之path,re_path及视图层

    以下是Django2.0版本 正则捕获到的参数都是字符串,所以如果函数需要用的其他数据类型,可以在函数中直接转换,也可以在路由中直接转换,如下: 下面实例是匹配整数,传过去的参数就是整数 from d ...

  9. Django day05 虚拟环境 django 2.0和django 1.0 路由层区别

    一:虚拟环境 创建虚拟环境一般有三种方式: 1)   File--->New Project--> 出现如下图,点击Project Interpreter:New Virtualenv e ...

随机推荐

  1. 关于th,td,tr的一些相关标签

    tr表示行,td表示列,th其实也是表示列但是在这个标签中的文字会以粗体出现 <th>为表格标题,属性summar为摘要, <caption>标签为首部说明, <thea ...

  2. 《java提高数据导入效率优化思路》

    写在前边的实现需求: 1.总共10万个电话号码: 2.电话号码中有重复和错误: 3.查找出正确的号码(不重复): 一.优化前的实现方式: 1.先用正则过滤一遍10万条数据,找出错误的: 2.用List ...

  3. (一)JavaScript之[数据类型]与[对象]

    1].数据类型字符串(String).数字(Number).布尔(Boolean).数组(Array).对象(Object).空(Null).未定义 (Undefined). //极大或极小的数字可以 ...

  4. Azure进阶攻略 | 你的程序也能察言观色?这个真的可以有!

    前段时间有个网站曾经火爆微博和朋友圈:颜龄机器人.只要随便上传一张包含人面孔的照片,这个网站就可以分析图片,并判断照片中人物的年龄.化妆.美颜 P 图.帽子墨镜之类的配饰,几乎都没法影响这个网站的检测 ...

  5. JDK、JRE、javac和JVM的关系

      .java为Java的源文件后缀,编写的代码需要写在.java文件中.     Javac编译器,用于读取Java源代码,并将其编译成字节代码.经过javac编译后形成.class,是字节码文件. ...

  6. redhat7.3忘记root密码后如何重置root密码

    redhat7系如果忘记root密码,重置密码方法与redhat6系不同! 1.开机启动系统,在grub选择启动内核项时 按‘e’进入编辑模式 2.这时看到的参数并不全,要按上下键滚动显示, 3.在l ...

  7. 科大讯飞语音转文字以及中文分词的Java测试代码

    我录了一段音存储在这个test.m4a文件里,语音内容为"测试一下Netweaver对于并发请求的响应性能". 使用如下Java代码进行测试: package com.iflyte ...

  8. 线程属性总结 线程的api属性

    http://blog.csdn.net/zsf8701/article/details/7842392 //线程属性结构如下:typedef struct{ int etachstate; //线程 ...

  9. Cocos2d-x手机游戏开发必备C++语言基础

    http://edu.51cto.com/course/course_id-1380-page-1.html

  10. 模拟网页的浏览Stack(POJ1028)

    题目链接:http://poj.org/problem?id=1028 注意: 1.用两个栈来模拟,一个用来存可以返回的,一个用来存可以前进的. 2.visit方法,就要将可以前进的栈清空. 3.ba ...