django之路由层(反向解析)总结
表关系的建立方式
表与表之间的关系就三种
一对一 OneToOne(to='') # to后面可以跟字符串的表名 也可以直接跟变量名表名(该表名必须在上面提前定义出来)
一对多 ForeignKey(to='')
多对多 ManyToMany(to='')
自己一定要会三种关系的推导步骤 以及建表的注意事项
一对一和多对多外键字段 建在哪一方都可以 但是推荐你建在查询频率较高的一方 以便后续的orm查询
一对多外键字段 建在多的那一方
一对一和一对多外键字段 在创建表的时候回自动加_id后缀 无论你有没有加
多对多字段不会在表中创建出来 只是用来告诉orm自动帮你创建第三张表
能够方便后续orm查询操作
django请求生命周期流程图
路由层
url方法第一个参数是一个正则表达式
匹配的特点:只要正则表达式能够匹配到内容 那么会立刻结束匹配 直接执行后面所对应的视图函数
正是由于该特点会出现,当你的项目特别庞大的时候 可能会出现url被顶替的现象(test testadd)
如果出现上述情况
1.修改正则表达式
2.将下面的放到上面去
django在路由匹配的时候默认有一个补救机制
当你的url没有正常匹配到 django会让浏览器自动加斜杠再来匹配一次(重定向)
配置文件中有一个参数用来控制该机制是否允许
APPEND_SLASH = True/False
网站首页可以使用的匹配方式
# 网站首页
url(r'^$',home),
# 网站404页面的设计(了解)
url(r'',error)
路由匹配
无名分组
给正则表达式加括号分组 在路由匹配成功之后调用视图函数的时候
会将括号内正则表达式匹配到的内容当做位置参数传递给视图函数
url(r'^index/(\d+)/',index) # index(request,\d+内容)
有名分组
给正则表达式加括号分组并起别名 在路由匹配成功之后调用视图函数的时候
会将括号内正则表达式匹配到的内容当做关键字传递给视图函数
url(r'^index/(?P<year>\d+)/',index) # index(request,year=\d+内容)
注意事项 无名有名不能混合
但是单个情况下 可以使用多次
反向解析
本质:根据别名 动态解析出一个结果 该结果可以直接访问到别名所对应的url
没有正则表达式符号
url(r'^index/',views.index,name='xxx')
前端
{% url 'xxx' %} # index/
后端
from django.shortcuts import reverse
reverse('xxx') # index/
出现正则表达式符号
# 无名分组
url(r'^index/(\d+)/',views.login,name='yyy')
# index/数字/
前端
{% url 'yyy' 数字 %} # index/数字/
后端
reverse('xxx',args=(数字,))
# 只要是容器类型 内部就算只有一个元素 你也给我习惯性的把分隔符逗号加上
# 有名分组
# 你可以直接使用无名分组的方式即可
前端
{% url 'yyy' 名字=数字 %} # index/数字/
后端
reverse('xxx',keargs={'名字':数字})
路由分发
前提
所有的app都可以有自己独立的urls.py templates模板文件夹 static静态文件夹
正是由于该特点 使得基于django实现多人开发 非常的方便
每个人只需要开发自己的app即可
路由分发
总路由不再直接做路由与视图函数对应关系了
而是仅仅做一个转发的功能
好处:更加的解耦合 更加好维护
from django.conf.urls import url,include
url(r'^应用名1/',include('应用名1.urls'))
url(r'^应用名2/',include('应用名2.urls'))
名称空间
当不同的应用中给路由与视图对应关系起了相同的别名
在反向解析的时候 并不能直接识别到是哪个应用下的
url(r'^应用名1/',include('应用名1.urls',namespace='应用名'))
{% url '应用名1:相同的别名' %}
{% url '应用名2:相同的别名' %}
reverse('应用名1:相同的别名')
reverse('应用名2:相同的别名')
# 其实你完全可以不适用名称空间
# 你只需要保证在起别名的时候不要出现冲突即可 建议做法就是加 应用前缀_别名
虚拟环境
给每一个项目提供一个专门属于该项目自己的所需模块
避免浪费 节省资源
requirement.txt
django==1.11.11
Flask==1.4
建议不要频繁的开设虚拟环境
django版本区别
path与url
path第一个参数不支持正则 如果你还想使用正则 你可以re_path跟你的url一模一样
path虽然不支持正则 但是提供了五个默认的转换器 能够自动帮你转换数据类型
还支持用户自定义转换器(不要记忆 直接拷贝即可)
request方法获取文件数据
request.FILES 获取form表单上传的文件数据
file_obj = request.FILES.get('myfile')
file_obj.name 文件名
f = open(file.obj.name,'wb')
for chunk in file_obj.chunks(): # for line in file_obj:
f.write(chunk)
f.close()
django之路由层(反向解析)总结的更多相关文章
- Django之路由分发反向解析
Django路由分发|反向解析 当一个Django中有多个app时,路由会有很多,将这些路由都写在与项目同名的文件夹下就会显得很多,很乱.并且在协同开发的时候容易出现相同的命名,当项目合并后就会出现路 ...
- django之路由分组,反向解析,有名,无名分组
路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态的概念 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'test',vi ...
- django路由的反向解析
什么是路由的反向解析 我们的路由都是一个匹配关系,对应一个处理的视图函数, 如果我们的匹配关系发生了变化,那么与之对应的访问地址(可能前端直接url链接, 也可能是后端的redrict跳转)都需要跟着 ...
- Django的路由层和视图层
一丶Django 的路由层(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django ...
- Django系列(二):Django的路由层,视图层和模板层
1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...
- 第三章、Django之路由层
目录 第三章.Django之路由层 一 路由的作用 二 简单的路由配置 三 分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的re_path与path 第三章.Django之路 ...
- 02-01 Django之路由层
Django之路由层 一 路由的作用 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中,如下图: 二 简单的路由配 ...
- Django框架-路由层
Django框架-路由层 一.URL配置(URLconf) 1.基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, vie ...
- Django的路由层(URLconf)
URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码 ...
随机推荐
- Linux文件权限码
权限 二进制值 八进制值 描述 --- 000 0 没有任何权限 --x 001 1 只有执行权限 -w- 010 2 只有写入权限 -wx 011 3 有写入和执行权限 r-- 100 4 只有读取 ...
- Shell脚本中的shebang到底是什么
使用类Unix系统的同学可能都对"#!"这个符号并不陌生,但是你真的了解它吗? 这个符号的名称,叫做"Shebang"或者"Sha-bang" ...
- 【VS开发】设备控制台 (DevCon.exe) 命令
设备控制台 (DevCon.exe) 命令 DevCon (DevCon.exe) 是一个命令行工具,可以显示有关运行 Windows 的计算机上设备的详细信息.还可以使用 DevCon 启用.禁用. ...
- java 8 date time 简单样例
参考 Java 8 Time Api 使用指南-珍藏限量版 Java 8 中处理日期和时间示例 部分样例 import java.time.temporal.TemporalAdjusters; im ...
- Thinkphp6框架学习:($this->error()undefined)Call to undefined method app\index\controller\Admin::error()
最近在使用Thinkphp6框架的时候,想做一个初始化来验证登录状态. 当没有Session::get(‘adminUid’)的时候就应该跳转到admin\adminLogin的方法中,和以前Tp5的 ...
- WINDOWS7 系统中建立文件夹映射
如何在WIN7中建立文件夹映射,还有以及MKLINK的具体使用方法: 步骤如下: 1.以映射d盘1文件夹为例: 2.按win+r,输入cmd,点击确定: 3.提示符后输入mklink /J " ...
- vue-router和webpack懒加载,页面性能优化篇
在vue单页应用中,当项目不断完善丰富时,即使使用webpack打包,文件依然是非常大的,影响页面的加载.如果我们能把不同路由对应的组件分割成不同的代码块,当路由被访问时才加载对应的组件(也就是按需加 ...
- 如何让 node 运行 es6 模块文件,及其原理
如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机 ...
- CSS3面包屑菜单导航
在线演示 本地下载
- WordPress网站搬家数据迁移完整教程
用本地环境搭建好的WordPress网站在做好之后如何从本地迁移到网络空间或者网络服务器上呢? 首先请确认你在本地建站的时候只做了themes里面的模版文件,如果只是自己改了下模版,那么网站在搬到服务 ...