django(路由层)
一、简介
# 路由匹配
url(r'test',views.test),
url(r'test_add',views.test_add)
# r'test'与请求头的数据进行正则匹配 '''
url方法第一个参数是正则表达式
只要第一个参数正则表达式能够匹配到内容,那么就会立刻停止往下匹配
直接执行对应的视图函数 在输入url的时候默认加斜杠
django内部帮你做到重定向
一次匹配不行
url后面加斜杠再来一次(浏览器加/后,再请求)
''' # 取消自动加斜杠
APPEND_SLASH = False # 默认是True,自动加斜杠 urlpatterns = [
url(r'^admin/', admin.site.urls),
# 首页
url(r'^$',views.home),
url(r'^test/$',views.test),
url(r'^test_add$',views.test_add),
# 尾页(了解)
url(r'',views.error)
]
二 无名分组
分组:就是给某一段正则表达式用小括号括起来
url(r'^test/(\d+)',views.test)
def test(request,xx):
print(xx) # xx位置参数就是(\d+)匹配到的数字
return HttpResponse('TEST') # 无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数(args)
三 有名分组
可以给正则表达式起一个别名,\d+的别名就是year
url(r'^test_add/(?P<year>\d+)',views.test_add)
def test_add(request,year):
print(year)
return HttpResponse('TEST_ADD') # 有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数(kwgs)
四 无名和有名不能混用
# 无名有名不可以混用,但同一个分组可以使用N次
url(r'^test/(\d+)/(\d+)/(\d+)', views.test),
url(r'^test_add/(?P<year>\d+)/(?P<year>\d+)/(?P<year>\d+)', views.test_add),
五 反向解析
# 通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数 # 先给路由与视图函数起一个别名,别名不能起冲突(和static令牌的原理一样)
url(r'^func/',views.func,name='ooo')
# 反向解析
# 后端反向解析
from django.shortcuts import render, HttpResponse, redirect,reverse
reverse('ooo') # 前端反向解析
<a href="{% url 'ooo' %}">111</a>
六 无名有名分组向反向解析
# 无名分组反向解析
url(r'^index/(\d+)',views.index,name='xxx') # 前端
{% url 'xxx' 123 %} # 后端
reverse('xxx',args=(1,)) '''
这个数字写代码的时候应该放什么
数字一般情况下放的是数据的主键值 数据的编辑和删除 伪代码(数据的编辑和删除),前端数据反向解析给url
def edit(request,edit_id)
reverse('xxx',args=(edit_id)) listuser.html 数据展示页
{%for user_obj in user_queryset %}
<a href="{% url 'xxx' user_obj.id %}">编辑</a>
{%endfor%}
点击编辑后,user_obj.id,反向解析,传给url,r'^edit_user/(\d+)',数字传给视图函数edit.
'''
# 有名分组反向解析
url(r'^func/(?P<year>\d+)/',views.func,name='ooo') # 前端
<a href="{% url 'ooo' year=123 %}">有名分组,写法1</a>
<a href="{% url 'ooo' 123 %}">有名分组,写法2,简便写法</a> # 后端
# 有名分组反向解析 写法1
print(reverse('ooo', kwargs={'year': 123}))
# 简便写法
print(reverse('ooo',args=(111,)))
七 路由分发
django的每一个应用都可以有自己的templates文件夹、urls.py、static文件夹
基于上述特点,django能够做到分组开发(每个人写自己的app)
作为组长,只需要将手下书写的app全部拷贝到一个新的django项目中,
然后在配置文件里,注册所有的app再利用路由分发的特点将所有的app整合起来。
当一个django项目中的url特别多的时候,总路由url.py代码非常冗余不好维护,这个时候也可以利用路由来减轻总路由的压力。
利用路由分发之后,总路由不再干路由与视图函数的直接对应关系
而是做一个分发处理,识别当前url是属于那个应用下的,直接分发给对应的应用去处理。
# 总路由
# from app01 import urls as app01_urls
# from app02 import urls as app02_urls urlpatterns = [
url(r'^admin/', admin.site.urls), # 路由分发
# url(r'^app01/', include(app01_urls)), # 只要url前缀是app01开头 全部交给app01处理
# url(r'^app02/', include(app02_urls)), # 终极写法,推荐使用
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls'))
# 注意事项:总路由里面的url千万不能加$结尾
] # 子路由
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^reg/', views.reg)
]

八 名称空间(了解)
# 当多个应用出现了相同的别名,研究反向解析会不会自动识别应用前缀
# 总路由
# 终极写法,推荐使用
url(r'^app01/',include('app01.urls',namespace='app01')),
url(r'^app02/',include('app02.urls',namespace='app02'))
# 注意事项:总路由里面的url千万不能加$结尾
] # 解析的时候
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^reg/', views.reg,name='reg')
] def reg(request):
# print(reverse('reg'))
print(reverse('app01:reg'))
return HttpResponse('app01 reg') def reg(request):
# print(reverse('reg'))
print(reverse('app02:reg'))
return HttpResponse('app02 reg') # 只要保证名字不冲突,就没必要使用名称空间 '''
一般情况下,有多个app的时候,起别名的时候会加上app的前缀
这样的话能够确保多个app之间名字不冲突的问题,解决 反向解析时不会出错。
'''
九 伪静态(了解)
静态网页
数据是写死的,万年不变
伪静态
将一个动态网页伪装成静态网页
为什么要伪装
https://www.cnblogs.com/Dominic-Ji/p/10881214.html
伪装的目的在于增大本网站的seo查询力度
并且增加搜索引擎收藏本网站的概率
搜索引擎的本质上就是一个巨大的爬虫程序
总结:
无论你怎么优化,怎么处理
始终还是干不过RMB玩家
url(r'^reg.html/', views.reg,name='reg')
十 更多详细参考
https://www.cnblogs.com/xiaoyuanqujing/articles/11642628.html
django(路由层)的更多相关文章
- 关于Django路由层简单笔记
Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...
- Django路由层与视图层
表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...
- Django路由层与视图层、pycharm虚拟环境
一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...
- Django 路由层(urlconf)
Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...
- Django路由层
路由层简单配置 urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'^articles/2003/$', views.special_ca ...
- Django --- 路由层(urls)
目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...
- django 路由层 伪静态网页 虚拟环境 视图层
路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...
- django 路由层(反向解析)03
目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...
- Django 路由层与视图层
1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...
- Django路由层、视图层
一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...
随机推荐
- 1.变量和简单的数据类型--《Python编程:从入门到实践》
1.1 变量 在Python中使用变量时,需要遵守一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或下划线打头,但不能以数字打 头. 变量名不能包含空格,但可使用下划线来分隔其中的单 ...
- Java Calendar 多用,日期 加减
服务需要订购一个月,订购一个月 不等于增加 30天:若是1,3,5的话应该 31天,要善用 Calendar public static void main(String[] args) throws ...
- MySQL的四种分区方式
1. 什么是表分区? mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放 ...
- Linux命令-文件、磁盘管理
Linux命令-文件.磁盘管理 1.文件管理 查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. Linux文件或者目 ...
- JS leetcode 两数之和解答思路分析
壹 ❀ 引 在学习算法基础的同时,我还是继续捡起leetcode的算法题了,珍惜时间,算法每天进步一点点.不得不说,在了解了一些算法概念后,至少有些答案是能看懂了......(惭愧)虽然我很菜,但是多 ...
- NC20284 [SCOI2011]糖果
题目链接 题目 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他 ...
- egrep命令
egrep命令 egrep命令用于模式搜索,属于grep函数族,工作原理和grep -E一样,其将模式视为扩展正则表达式,并打印出与模式匹配的行,如果有多个文件具有匹配的模式,其还能显示每行的文件名. ...
- springboot+vue+elementui实现文件上传下载删除DEMO
说明 前面搜索了几个关于springboot+vue+elementui上传下载的文章,感觉写的都不尽如人意.要么是功能不完善,不好用.再者就是源码提供的实在差劲,都不完整.一气之下,自己搞了一个实用 ...
- 图文并茂之AES加密
本文改编自:http://www.sohu.com/a/198681357_505794 假设有一个发送方在向接收方发送消息.如果没有任何加密算法,接收方发送的是一个明文消息:"我是小灰&q ...
- 第一百一十八篇: JavaScript 原型链式继承
好家伙,好家伙,本篇为<JS高级程序设计>第八章"对象.类与面向对象编程"学习笔记 1.原型链 原型链是JS实现"继承"的方案之一 ECMA-262 ...