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好像 ...
随机推荐
- Java--包密封
参考:http://blog.csdn.net/zhifeiyu2008/article/details/8829637 http://blog.csdn.net/technerd/article/ ...
- 前端快速构建神器vue-cli,windows下安装并且构建前端项目
1.nodejs官网http://nodejs.cn/下载安装包,傻瓜式安装即可 2.dos命令查询node的版本 node -v 查询版本号 npm -v 查询npm包管理版本 3.安装国内镜像 n ...
- 自己做的板子,电脑识别不出下载口(micro-usb),程序无法烧入
前几天画了一块cortex-A5的底板,出现一个问题,就是通过micro-usb与电脑连接之后,电脑无法识别出来,这就导致程序无法通过micro-usb烧入进去,经过仔细检查硬件,发现第一,元器件都没 ...
- lr cc安装后提示“内部出现错误,无法创建文件夹”的解决办法
好多人在使用lr过程中提示“内部出现错误,无法创建文件夹”,今天MacW小编给大家带来了解决的方法,一起来看看吧! 1.此问题主要是用户权限的问题. 下载这个shell 脚本,此 shell 脚本可自 ...
- 吴裕雄--天生自然 pythonTensorFlow图形数据处理:输入文件队列
import tensorflow as tf # 1. 生成文件存储样例数据. def _int64_feature(value): return tf.train.Feature(int64_li ...
- 使用XAMPP集成开发环境安装Apache、PHP的配置说明
一.安装XAMPP 双击安装包xamppinstaller.exe,可完成XAMPP的安装,与其他软件安装并无区别. 二.配置Apache端口,使用其可以正确启动 点击Start,启动Apache时可 ...
- HTTP编码
HTTP编码 不仅仅URL需要编码,HTTP header也需要编码,HTTP body 无特殊要求 一般采用百分号编码:比如一个字节的ascii码值是 0x89 那使用百分号编码之后 输出是 %89 ...
- 三十、sersync高级同步工具实时数据同步架构
一.项目介绍 Sersync项目利用inotity与rsync技术实现对服务器数据实时同步的解决方案,其中inotity用于监控sersync所在服务器上的文件变化. Sersync项目的优点: 1. ...
- 54)PHP,访问修饰符
类外就是你再实例化成对象的时候 用你类里面的变量 继承的类内, 就是子类里面,但是实例化对象时,不能用 本类内, 只在本类的定义时用,子类不能用.
- reviewer回信
收到reviewer回信之后的情况 Peer review其实是一个CA(质检)过程.文章投稿后的几种状态:Reject.resubmit和revise-and-resubmit. 收到回信之后,re ...