一、简介

  1. # 路由匹配
  2. url(r'test',views.test),
  3. url(r'test_add',views.test_add)
  4. # r'test'与请求头的数据进行正则匹配
  5.  
  6. '''
  7. url方法第一个参数是正则表达式
  8. 只要第一个参数正则表达式能够匹配到内容,那么就会立刻停止往下匹配
  9. 直接执行对应的视图函数
  10.  
  11. 在输入url的时候默认加斜杠
  12. django内部帮你做到重定向
  13. 一次匹配不行
  14. url后面加斜杠再来一次(浏览器加/后,再请求)
  15. '''
  16.  
  17. # 取消自动加斜杠
  18. APPEND_SLASH = False # 默认是True,自动加斜杠
  19.  
  20. urlpatterns = [
  21. url(r'^admin/', admin.site.urls),
  22. # 首页
  23. url(r'^$',views.home),
  24. url(r'^test/$',views.test),
  25. url(r'^test_add$',views.test_add),
  26. # 尾页(了解)
  27. url(r'',views.error)
  28. ]

二 无名分组

  1. 分组:就是给某一段正则表达式用小括号括起来
  2. url(r'^test/(\d+)',views.test)
  3. def test(request,xx):
  4. print(xx) # xx位置参数就是(\d+)匹配到的数字
  5. return HttpResponse('TEST')
  6.  
  7. # 无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数(args)

三 有名分组

  1. 可以给正则表达式起一个别名,\d+的别名就是year
  2. url(r'^test_add/(?P<year>\d+)',views.test_add)
  3. def test_add(request,year):
  4. print(year)
  5. return HttpResponse('TEST_ADD')
  6.  
  7. # 有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数(kwgs)

四 无名和有名不能混用

  1. # 无名有名不可以混用,但同一个分组可以使用N次
  2. url(r'^test/(\d+)/(\d+)/(\d+)', views.test),
  3. url(r'^test_add/(?P<year>\d+)/(?P<year>\d+)/(?P<year>\d+)', views.test_add),

五 反向解析

  1. # 通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数
  2.  
  3. # 先给路由与视图函数起一个别名,别名不能起冲突(和static令牌的原理一样)
  4. url(r'^func/',views.func,name='ooo')
  5. # 反向解析
  6. # 后端反向解析
  7. from django.shortcuts import render, HttpResponse, redirect,reverse
  8. reverse('ooo')
  9.  
  10. # 前端反向解析
  11. <a href="{% url 'ooo' %}">111</a>

六 无名有名分组向反向解析

  1. # 无名分组反向解析
  2. url(r'^index/(\d+)',views.index,name='xxx')
  3.  
  4. # 前端
  5. {% url 'xxx' 123 %}
  6.  
  7. # 后端
  8. reverse('xxx',args=(1,))
  9.  
  10. '''
  11. 这个数字写代码的时候应该放什么
  12. 数字一般情况下放的是数据的主键值 数据的编辑和删除
  13.  
  14. 伪代码(数据的编辑和删除),前端数据反向解析给url
  15. def edit(request,edit_id)
  16. reverse('xxx',args=(edit_id))
  17.  
  18. listuser.html 数据展示页
  19. {%for user_obj in user_queryset %}
  20. <a href="{% url 'xxx' user_obj.id %}">编辑</a>
  21. {%endfor%}
  22. 点击编辑后,user_obj.id,反向解析,传给url,r'^edit_user/(\d+)',数字传给视图函数edit.
  23. '''
  1. # 有名分组反向解析
  2. url(r'^func/(?P<year>\d+)/',views.func,name='ooo')
  3.  
  4. # 前端
  5. <a href="{% url 'ooo' year=123 %}">有名分组,写法1</a>
  6. <a href="{% url 'ooo' 123 %}">有名分组,写法2,简便写法</a>
  7.  
  8. # 后端
  9. # 有名分组反向解析 写法1
  10. print(reverse('ooo', kwargs={'year': 123}))
  11. # 简便写法
  12. print(reverse('ooo',args=(111,)))

七 路由分发

django的每一个应用都可以有自己的templates文件夹、urls.py、static文件夹
基于上述特点,django能够做到分组开发(每个人写自己的app)
作为组长,只需要将手下书写的app全部拷贝到一个新的django项目中,

然后在配置文件里,注册所有的app再利用路由分发的特点将所有的app整合起来。

当一个django项目中的url特别多的时候,总路由url.py代码非常冗余不好维护,这个时候也可以利用路由来减轻总路由的压力。

利用路由分发之后,总路由不再干路由与视图函数的直接对应关系
而是做一个分发处理,识别当前url是属于那个应用下的,直接分发给对应的应用去处理。

  1. # 总路由
  2. # from app01 import urls as app01_urls
  3. # from app02 import urls as app02_urls
  4.  
  5. urlpatterns = [
  6. url(r'^admin/', admin.site.urls),
  7.  
  8. # 路由分发
  9. # url(r'^app01/', include(app01_urls)), # 只要url前缀是app01开头 全部交给app01处理
  10. # url(r'^app02/', include(app02_urls)),
  11.  
  12. # 终极写法,推荐使用
  13. url(r'^app01/',include('app01.urls')),
  14. url(r'^app02/',include('app02.urls'))
  15. # 注意事项:总路由里面的url千万不能加$结尾
  16. ]
  17.  
  18. # 子路由
  19. from app01 import views
  20.  
  21. urlpatterns = [
  22. url(r'^admin/', admin.site.urls),
  23. url(r'^reg/', views.reg)
  24. ]

八 名称空间(了解)

  1. # 当多个应用出现了相同的别名,研究反向解析会不会自动识别应用前缀
  2. # 总路由
  3. # 终极写法,推荐使用
  4. url(r'^app01/',include('app01.urls',namespace='app01')),
  5. url(r'^app02/',include('app02.urls',namespace='app02'))
  6. # 注意事项:总路由里面的url千万不能加$结尾
  7. ]
  8.  
  9. # 解析的时候
  10. urlpatterns = [
  11. url(r'^admin/', admin.site.urls),
  12. url(r'^reg/', views.reg,name='reg')
  13. ]
  14.  
  15. def reg(request):
  16. # print(reverse('reg'))
  17. print(reverse('app01:reg'))
  18. return HttpResponse('app01 reg')
  19.  
  20. def reg(request):
  21. # print(reverse('reg'))
  22. print(reverse('app02:reg'))
  23. return HttpResponse('app02 reg')
  24.  
  25. # 只要保证名字不冲突,就没必要使用名称空间
  26.  
  27. '''
  28. 一般情况下,有多个app的时候,起别名的时候会加上app的前缀
  29. 这样的话能够确保多个app之间名字不冲突的问题,解决 反向解析时不会出错。
  30. '''

九 伪静态(了解)

静态网页
数据是写死的,万年不变

伪静态
将一个动态网页伪装成静态网页

为什么要伪装
https://www.cnblogs.com/Dominic-Ji/p/10881214.html
伪装的目的在于增大本网站的seo查询力度
并且增加搜索引擎收藏本网站的概率

搜索引擎的本质上就是一个巨大的爬虫程序

总结:
无论你怎么优化,怎么处理
始终还是干不过RMB玩家

  1. url(r'^reg.html/', views.reg,name='reg')

十  更多详细参考

https://www.cnblogs.com/xiaoyuanqujing/articles/11642628.html

 

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

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

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

  2. Django路由层与视图层

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

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

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

  4. Django 路由层(urlconf)

    Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...

  5. Django路由层

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

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

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

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

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

  8. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

  9. Django 路由层与视图层

    1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...

  10. Django路由层、视图层

    一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...

随机推荐

  1. Spark相关面试题

    Spark Core面试篇01 一.简答题 1.Spark master使用zookeeper进行HA的,有哪些元数据保存在Zookeeper? 答:spark通过这个参数spark.deploy.z ...

  2. 【分布式】load balance 04-java 从零手写实现负载均衡

    负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 本节我们来看一下如何实现一负载均衡框架. 源码 核心接 ...

  3. 3分钟总览微软TPL并行编程库

    有小伙伴问我每天忽悠的TPL是什么?☹️ 这次站位高一点,严肃讲一讲. 引言 俗话说,不想开飞机的程序员不是一名好爸爸:作为微软技术栈的老鸟,一直将代码整洁之道奉为经典, 优秀的程序员将优雅.高性能的 ...

  4. Docker实践之05-限制Docker容器运行资源

    Docker容器在默认情况下会使用宿主机的所有CPU和内存资源,为了明确限制每一个Docker容器的运行资源,需按如下操作进行设置. 首先,执行:sudo docker info,如果提示:" ...

  5. 项目实战:Qt数据分析处理平台(兼容各国产麒麟系统)(文件域字符串解析,上万文件批量导入,折线图、散点图,正态分布图分析处理导出等)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/114710650长期持续带来更多项目与技术分享, ...

  6. django学习第十天---ajax请求和JsonResponse

    AJAX 它是js的功能,特点:异步请求,局部刷新 简单请求示例 基于jquery的ajax请求 异步请求,不会刷新页面,页面上用户之前输入的数据都不会丢失 <p>下面是ajax请求< ...

  7. 面向对象基础---day02

    成员变量和局部变量区别 封装 private关键字 1.是一个权限修饰符 2.可以修饰成员(成员变量和成员方法) 3.作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问 针对p ...

  8. 【Java复健指南01】简介与数组

    写在最前 学习Java已经是很久之前的事情了,因为技术栈的转变,很久没有使用Java正经地开发过项目. 对于该语言的理解也是停留在表面,因此萌生了重新学习的念头.一方面是为刷算法题打基础,另一方面也是 ...

  9. Node.JS http server

    一.自动更新刷新 http server browser-sync dist --files "**/*" 二.http-server 三.webpack-dev-server的c ...

  10. 【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量

    问题描述 需要在APIM策略中对请求所携带的Cookie中的token值进行JWT验证,如果获取Cookie中的值并且作为变量保存,然后在JWT 验证中使用呢? 问题解答 第一步:获取Cookie中的 ...