django 路由层
1|0一、orm模型表
1|11. 如何建立模型表
1. 确定表与表对应关系
-
通过换位思考,先站在一张表上分析,然后再在另一张表分析
-
确定多对多、一对多,一对一
2. 建立外键
- 一对多:外键字段建在多的一方
- 多对多:外键关系需要建立第三张表来专门处理,外键字段建立在任意一方都可以,但是建议建在查询频率较高的一方
- 一对一:外键字段建立在任意一方都可以,但是建议建在查询频率较高的一方
1|22. Django项目中创建外键
- Django中,创建的外键字段时,对于一对一和一对多的关系,定义的外键字段变量在真正的数据表中,该字段名会被Django默认追加上
_主键字段名
- 在多对多的关系表中,本来的专门的第三个表也由Django创建,该表名由原来的两个表名以
_
连接形成。
1. 实例演示:
- 如当前有3张表:图书表,出版社表(规定1本书只能被一个出版社出版),作者表
- 步骤:
- 先不考虑外键关系,先创建基表
- 添加外键关系
(1)步骤一:
(2)步骤二:
2|0二、Django路由层
2|11. Django项目的urls.py文件
-
urls.py文件中的url方法的括号中的第一个参数其实是一个正则表达式,客户端发送的链接地址相当于一个大的字符串,该正则表达式就会在这个字符串中匹配,只要该正则表达式能够匹配到内容,就会立刻执行后面的视图函数,而不再往下继续匹配了。
-
2|22. Django项目的路由匹配规律:
-
本来浏览器会直接按照用户输入的地址到后端匹配,如果匹配不上,就会报404错误,但是Django项目中,Django会让浏览器把原来的地址的后面追加一个
/
,再去后端匹配一次,这次若在匹配不到就会报404错误。 -
取消Django自动让浏览器追加斜杠的功能
- 在settings文件中,添加语句:
APPEND_SLASH = False
, 该参数默认是True。
- 在settings文件中,添加语句:
-
路由匹配只匹配前端地址中的url部分,不匹配?后面的get携带的参数
2|33. url方法参数中的无名分组和有名分组
(1)无名分组
-
url方法的第一个参数中即正则中含有无名分组后,在路由匹配成功之后调用视图函数的时候,会将括号内正则表达式匹配到的内容当做位置参数传递给视图函数,所以视图函数除了默认接收的request参数(request也是一个位置参数),还要添加一个位置参数
(2)有名分组
-
url方法的第一个参数即正则中含有有名分组后,在路由匹配成功之后调用视图函数的时候,会将括号内正则表达式匹配到的内容当做关键字参数传递给视图函数,所以视图函数除了默认接收的request参数(request也是一个位置参数),还要添加一个分组名当做位置参数
(3)无名分组和有名分组的作用和注意
-
作用:
- 利用有名和无名分组,我们就可以在调用视图函数的时候,给函数传递额外的参数。
-
注意:
- 无名和有名分组不能混合使用,但是同一种分组可以同时使用多次
2|44. 反向解析
(1)什么是反向解析
- 根据别名 动态解析出一个结果 该结果可以直接访问到别名所对应的url
(2)第一种反向解析
-
第一种反向解析:urls.py文件的url方法的第一个参数中的正则是精确正则,即匹配的是一条具体不变的内容。
-
前端反向解析
-
后端反向解析
-
(3)第二种反向解析
- 第二种反向解析:urls.py文件的url方法的第一个参数中的正则是模糊正则,即匹配的是一条可以改变的内容。
1. 无名分组的反向解析
-
在解析的时候 你需要手动指定正则匹配的内容是什么
url(r'^home/(\d+)/', views.home,name='xxx'), # 给路由与视图函数对应关系起别名
-
后端反向解析
2. 有名分组的反向解析
-
在解析的时候 你需要手动指定正则匹配的内容是什么
-
有名分组的反向解析和无名分组一样,但是最正规的写法是:
-
前端反向解析
-
后端反向解析
3. 第二种反向解析实例
- 以编辑功能为例
2|55. 路由分发(*********)
(1)路由分发简介和使用
-
前提:在django中所有的app都可以有自己独立的urls.py templates static文件夹。
正是由于上面的特点,你用django开发项目就能够完全做到多人分组开发 互相不干扰
每个人只开发自己的app
小组长只需要将所有人开发的app整合到一个空的django项目里面,然后在settings配置文件注册 再利用路由分发将多个app整合到一起即可完成大项目的拼接 -
路由分发解决的就是项目的总路由匹配关系过多的情况。
-
路由分发关键字:
include
-
使用路由分发 总路由不再直接做路由与视图函数对应关系了,而是仅仅做一个分发、转发的功能(请求来了之后,只询问你要访问哪个app的功能 然后将请求转发给对应的app去处理)
-
好处:更加的解耦合 更加好维护
-
实例:
(2)名称空间
- 当多个app中出现了起别名冲突的情况 ,在反向解析的时候,并不能直接识别到是哪个应用下的。这时可以给每一个app创建一个名称空间,然后在反向解析的时候 可以选择到底去哪个名称空间中查找别名
-
其实上面的名称空间知识点可以完全不用 你只需要保证起别名的时候 在整个django项目中不冲突即可。
-
参考建议:
-
2|66.伪静态
- 将一个动态网页伪装成一个静态网页 以此来挺好搜索引擎SEO查询频率和收藏力度(收藏后的网站会被优先搜索出来,即越能首行搜索后得到内容)
- 以
.html
结尾的网址,一般就是静态网页。 - 所谓的搜索引擎其实就是一个也别巨大的爬虫程序
- 优化的再厉害还是抵不过RMB玩家
2|77. 虚拟环境
-
用处:
- 给每一个项目提供一个专门属于该项目自己的所需模块
-
每创建一个虚拟环境就类似于你重新下载了一个纯净python解释器
-
注意:
- 虚拟环境一台机器上可以有N多个
- 不要在你的机器上无限制创建虚拟环境
2|88. Django版本的区别
(1)django.1.xxx和django.2.xxx
-
urls.py中路由匹配的方法有区别
2|99. form表单上传文件
(1)前端
- form表达传文件需要注意的事项:
- method必须改成post
- enctype改成formdata格式
(2)后端
-
前期你在使用post朝后端发请求的时候 需要去settings配置文件中注释掉一个中间件csrf
-
使用
file_obj = request.FILES.get(前端标签中的name的值)
__EOF__

本文链接:https://www.cnblogs.com/Mcoming/p/11933068.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!