Django学习之路03
django项目生命周期

路由层
路由匹配
#urls中的urlpatterns
#url()方法 urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',views.home),
url(r'^test/$',views.test),
url(r'^testadd/$',views.testadd),
url(r'',views.error)
]
注意:第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个之后立即匹配,直接执行对应的视图函数
#网站首页路由
url(r'^$',views.home)
django在路由的匹配的时候 当你在浏览器中没有敲最后的斜杠,django会先拿着你没有敲斜杠的结果取匹配,如果都没有匹配上,会让浏览器在末尾加斜杠再发一次请求,再匹配一次 如果还匹配不上才会报错。
如果你想取消该机制 不想做二次匹配可以在settings配置文件中 指定
# 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项
APPEND_SLASH=True
补充:当所有路径都没匹配上时404
无名分组
url(r'^test/([0-9]{4})/', views.test)
#路由匹配的时候 会将括号内正则表达式匹配到的内容 当做位置参数传递给视图函数
#例如test(request,2019)
有名分组
url(r'^test/(?P<year>\d+)/', views.test)
#路由匹配的时候 会将括号内正则表达式匹配到的内容 当做关键字参数传递给视图函数
#例如test(request,year=2019)
无名和有名不能混合使用!!!
但是,同一分组下可以使用多个
# 无名分组支持多个
url(r'^test/(\d+)/(\d+)/', views.test), # 有名分组支持多个
url(r'^test/(?P<year>\d+)/(?P<xx>\d+)/', views.test),
反向解析
何为反向?
正常的请求流程是先走路由,在执行视图函数渲染模板,当我们在模板或者视图函数中需要获取路由信息时就称之为反向解析。
为什么要这样做呢?
目的是为了方便后续修改路由配置,反向解析可以获取请求路径信息,而避免直接写死路径带来的麻烦事。
本质:其实就是给你返回一个能够返回对应url的地址
如何反向解析?
首先要给url和视图函数对应关系起别名
url(r'^index/$',views.index,name='kkk')
然后在前端和后端上分别进行反向解析
#后端反向解析
#后端可以在任意位置通过reverse反向解析出对应的url
from django.shortcuts import render,HttpResponse,redirect,reverse #在三剑客后面再导入一个reverse模块
reverse('kkk') #前端反向解析
{% url 'kkk' %}
如果是进行了无名分组或者有名分组该怎么做?
#无名分组反向解析
url(r'^index/(\d+)/$',views.index,name='kkk') #无名分组后端反向解析
reverse('kkk',args=(1,)) # 后面的数字通常都是数据的id值 #无名分组前端反向解析
{% url 'kkk' 1%} # 后面的数字通常都是数据的id值 #有名分组反向解析(同无名分组用法)
url(r'^index/(?P<year>\d+)/$',views.index,name='kkk') #后端方向解析
print(reverse('kkk',args=(1,))) #前端反向解析
<a href="{% url 'kkk' 1 %}">1</a> #有名分组反向解析的另一种方法
#后端
print(reverse('kkk',kwargs={'year':1}))
#前端
<a href="{% url 'kkk' year=1 %}">1</a>
路由分发
当应用程序体积大 模块多时需要拆分多个不同APP,同时urls也不能全都写在主路由配置中,我们可以让每一个应用都可以有自己的urls.py,static文件夹,templates文件夹,这就需要在主路由配置文件中引入其他app中的路由配置信息。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls')),
]
#总路由中,一级路由的后面千万不加$符号
# 在应用(如app01)下新建urls.py文件,在该文件内写路由与视图函数的对应关系即可
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/',views.index)
]
基于上述条件 可以实现多人分组开发 等多人开发完成之后 我们只需要创建一个空的django项目
然后将多人开发的app全部注册进来 在总路由实现一个路由分发 而不再做路由匹配(来了之后 我只给你分发到对应的app中)
补充:当你的应用下的视图函数特别特别多的时候 你可以建一个views文件夹 里面根据功能的细分再建不同的py文件。
名称空间
多个app起了相同的别名 这个时候用反向解析 并不会自动识别应用前缀,如果想避免这种问题的发生。
方法一:
#总路由
url(r'^app01/',include('app01.urls',namespace='app01'))
url(r'^app02/',include('app02.urls',namespace='app02')) #后端解析的时候
reverse('app01:index')
reverse('app02:index') #前端解析的时候
{% url 'app01:index' %}
{% url 'app02:index' %}
方法二:
#起别名的时候不要冲突即可 一般情况下在起别名的时候通常建议以应用名作为前缀
name = 'app01_index'
name = 'app02_index'
关于伪静态
静态网页:数据是写死的 万年不变
伪静态网页的设计是为了增加百度等搜索引擎seo查询力度
所有的搜索引擎其实都是一个巨大的爬虫程序
网站优化相关 通过伪静态确实可以提高你的网站被查询出来的概率
但是再怎么优化也抵不过RMB玩家(比如说advertisement)
关于虚拟环境
一般情况下,我们会给每一个项目 配备该项目所需要的模块,不需要的一概不装
虚拟环境:就类似于为每个项目量身定做的解释器环境,每创建一个虚拟环境 就类似于你又下载了一个全新的python解释器
django版本的区别
django1.X跟django2.X版本区别
django2.0里面的path第一个参数不支持正则,你写什么就匹配,100%精准匹配
django2.0里面的re_path对应着django1.0里面的url
虽然django2.0里面的path不支持正则表达式,但是它提供五个默认的转换器
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
#例如
path('index/<int:id>/',index) # 会将id匹配到的内容自动转换成整型
自定义转换器
# 自定义转换器
class FourDigitYearConverter:
regex = '[0-9]{4}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%04d' % value # 占四位,不够用0填满,超了则就按超了的位数来!
register_converter(FourDigitYearConverter, 'yyyy')
PS:路由匹配到的数据默认都是字符串形式
Django学习之路03的更多相关文章
- ReactNative新手学习之路03真机调试
React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...
- Django学习之路04
视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...
- Django学习之路
Django Website Collect django packages http://djangopackages.com/ django project http://code.djangop ...
- Django学习之路05
Django模板层 模板层语法(两类) 变量相关:{{ }} 逻辑相关:{% %} 给模板传值的方法 #方法1 #通过字典传值,指名道姓,例如下 return render(request ...
- Django学习之路02
静态文件配置 html文件默认全都放在templates文件夹下 对于前段已经写好了的文件, 我们只是拿过来使用 那么这些文件都可以称之为叫"静态文件"静态文件可以是 bootst ...
- python学习之路03
一.常量和变量 1.python中的数据类型 分类: Number:数字型[整型,浮点型,复数] String:字符串型 Boolean:布尔型[True,False] None:空值 ...
- Webwork 学习之路【03】核心类 ServletDispatcher 的初始化
1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...
- 阿里封神谈hadoop学习之路
阿里封神谈hadoop学习之路 封神 2016-04-14 16:03:51 浏览3283 评论3 发表于: 阿里云E-MapReduce >> 开源大数据周刊 hadoop 学生 s ...
- 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)
初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...
随机推荐
- python导入自定义的库
一.导入项目文件夹下的模块 1.导入整个模块 import 模块名 2.导入模块的某个函数 from 模块名 import 函数名 示例 untitled是项目文件夹,文件结构如下 ①在a.py导入c ...
- 测试浏览器是否支持JavaScript脚本
如果用户不能确定浏览器是否支持JavaScript脚本,那么可以应用HTML提供的注释符号进行验证.HTML注释符号是以 <-- 开始以 --> 结束的.如果在此注释符号内编写 JavaS ...
- 使用conda管理python环境
一.动机 最近打算折腾vn.py,但只有py27版本的,因为一向习惯使用最新稳定版的,所以不得不装py27的环境,不得不说 Python的全局锁真的很烦. 身为懒癌患者,必然使用全功能的anacond ...
- (vshadow)Volume Shadow在渗透测试中的利用
本文根据嘶吼学习总结出文中几种方式Vshadow包含在window SDK中,由微软签名. Vshadow包括执行脚本和调用支持卷影快照管理的命令的功能,这些功能可能会被滥用于特权级的防御规避,权限持 ...
- xcode6添加pch文件
pch文件 定义:该文件中定义的内容为全局变量,可供所有类进行调用 例子:在pch文件中定义ios版本
- Windows Server 2008 R2 安全加固
0x00 简介 安全加固是企业安全中及其重要的一环,其主要内容包括账号安全.认证授权.协议安全.审计安全四项,这篇博客简单整理一下Windows Server 2008 R2的安全加固方案. 0x01 ...
- [HNOI2019]JOJO(KMP自动机+主席树)
一道神仙题,考察选手对KMP的深入理解. 先考虑没有2操作的做法.设每一段为一个二元组(x,c),考虑一段前缀匹配后缀,除了第一段的字符,其他段的二元组(x,c)必须相等,所以可以将其视为特殊字符进行 ...
- 2019-2020-1 20199324《Linux内核原理与分析》第八周作业
第七章 可执行程序工作原理 一.ELF目标文件格式 目标文件:ABI,应用程序二进制接口,是编译器生成的文件. ELF:可执行的和可链接的格式,是一个目标文件格式的标准.三种类型是: 可重定位文件:L ...
- 36)PHP,获取数据库数据并在html中显示(晋级3)
首先展示我的html代码和php文件的位置关系: 然后我的php文件: <?php class db { public $host ;//= "localhost";//定义 ...
- Java面试题3-附答案
接口有什么用 1.通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类. 2.通过接口可以指明多个类需要实现的方法. 3.通过接口可以了解对象的交互界面,而不需了解对象所对应的类. 另:Ja ...