IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django-(3) -> 正文阅读

[Python知识库]Django-(3)

内容概览

  • Django请求生命周期流程图
  • 路由匹配
  • 反向解析
  • 路由分发
  • 名称空间
  • 用户管理系统代码编写逻辑

Django请求生命周期流程图

在这里插入图片描述

  1. 用户在浏览器中输入url发送请求
  2. django封装socket的wsgi服务器接收到请求将数据拆分发送给中间件
  3. 由中间件传递给路由层,分发到对应的视图层
  4. 调用models中表对象,通过orm拿到数据库数据
  5. 同时拿到templates中相应的模板进行渲染
  6. 然后传给中间件中,中间件再传递给wsgi服务器封装
  7. 发送给浏览器

路由匹配

path(‘网址后缀’,函数名)
一旦网址后缀匹配上了就会自动执行后面的函数
并结束整个路由的匹配

路由结尾的斜杠

默认情况下,不写斜杠django会做第二次处理
第一次匹配路由匹配不上,会让浏览器添加斜杠再次请求
django配置文件中可以修改是否自动添加斜杠
settings:

APPEND_SLASH = False  # 默认为True

path转换器

当网址后缀不固定时,可以使用转换器来匹配

path('func/<int:id>/', views.func)
<int:id>:转换器匹配到的内容只能够是int类型,然后会当做视图函数的关键字参数传入
有多少个转换器,那么视图参数的形参个数和名字也要一一对应
def func(request, id):
	pass
"""
int:IntConverter()
path:PathConverter()
slug:SlugConverter()
str:StringConverter()
uuid:UUIDConverter()
"""

re_path正则匹配

re_path(‘正则表达式’, 函数名)
只要网址后缀能够匹配上正则就会自动执行后边的函数
并结束整个路由的匹配

re_path('func/',view.func)
"""
如果直接写不加限制条件,那么无论网址的前后有什么,只要中间能够匹配上都可以执行后边的函数
eg:/aaabbbfunc/aaabbb/
所以需要加上限制条件
"""
re_path('^func/$', views.func)

正则匹配之无名分组

当网址后缀不固定的时候,就需要用到正则中的分组了

re_path('^func/(\d+)/', views.func)
正则表达式匹配到没有起名的分组会当做视图函数的位置参数传递给视图函数

正则匹配之有名分组

正则匹配也可以传递关键字参数

re_path('^func/(?P<id>\d+)/', views.func)
正则表达式匹配到有起别名的分组会当做视图参数的关键字参数传递给视图函数

django版本区别

在django1.11中,只支持正则匹配,并且方法是url ()
而django2及以上,可以使用path()、re_path();re_path()等同于url ()

反向解析

如果html页面上的路由都是直接写死固定了,一旦路由改变,那么所有的相关页面链接都会失效
反向解析:返回一个结果,此结果可以访问到对应路由

# 路由对应关系起别名
path('register/', views.register, name='reg_view')

# 使用反向解析语法
"""html页面"""
{% url 'reg_view' %}
"""后端"""
from django.shortcuts import reverse
reverse('reg_view')
# 使用反向解析,只要路由的别名不更改,那么就能访问到对应路由

有名无名反向解析

当路由中有不确定的匹配因素,那么反向解析时需要提前手动给出不确定因素指定类型与个数的具体的值

path('func/<int:id>', views.func, name='fn_id')
"""html页面"""
{% url 'fn_id' 111 %}
"""后端"""
reverse('fn_id', args=(111,))

路由分发

django中每个应用都可以有自己独立的urls.py、templates文件夹、static文件夹
能够让基于django开发的多个应用完全独立

# 项目同名文件夹下的urls.py为总路由,主要作用就是判断访问的是哪一个应用,然后分发给该应用的子路由做处理
path('app01/', include('app01.urls'))  # 只要网址后缀为app01/,那么就将app01/后边的后缀分发给app01下的urls做处理
path('app02/', include('app02.urls')) 
# 这是简写方式,标准写法需要先导入相应应用的urls文件,再写入include的括号中
from app02 import urls
path('app02/', include(urls))

# 子路由接收剩余的后缀,再判断是否有对应视图函数
path('func01', views.func01)  # app01
path('func01', views.func01)  # app02
"""当项目特别大,应用特别多的时候,可以使用路由分发,非常方便"""

名称空间

在使用路由分发的场景下,多个应用在涉及到反向解析起别名,名字冲突的时候无法正常解析

# 总路由
path('app01/', include('app01.urls'))
path('app02/', include('app02.urls'))

# app01路由
path('func/', views.func, name='fn')

# app02路由
path('func/', views.func, name='fn')

"""
此时调用fn只会是app02
有两种解决方式
"""
# 方式1:名称空间
path('app01/', include(('app01.urls', 'app01.urls'), namespace='app01'))  # 创建一个名称空间,后边使用的时候需要加上名称空间使用
"""html页面"""
{% url 'app01:fn' %}
"""后端"""
reverse('app01:fn')

# 方式二:规定使别名不冲突
"""保证django项目下没有重复的别名,例如在别名前加上应用的前缀即可"""

用户管理系统代码逻辑

  • 数据添加
    先编写对应html文件
    然后在urls.py中添加一个路由,然后到views.py中编写函数
    函数中先判断当前是GET请求还是POST请求
    如果是GET请求直接将数据添加界面返回出去
    如果是POST请求则接收到提交数据,使用orm添加到数据库中,然后重定向返回主页面
  • 数据编辑
    先编写对应html文件
    然后在urls.py中添加一个路由,然后到views.py中编写函数
    在主页面使用GET请求携带需要编辑对象的id值
    函数中先判断当前是GET请求还是POST请求
    如果是GET请求将html页面返回出去
    如果是POST请求则接收提交数据,使用orm修改当前用户信息到数据库中,然后重定向返回主页面
  • 数据删除
    在主页面使用GET请求携带需要编辑对象的id值
    在urls.py中添加一个路由,然后到views.py中编写函数
    使用orm通过id值直接删除数据库中用户信息
    然后重定向到主页面
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:07:23  更:2022-09-04 01:10:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:37:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码