Django(四、路由层)

文章目录

  • 一、路由层
      • 1.路由匹配
      • url方法第一个是参数 的正则表达式
  • 二、正则无名分组与有名分组
      • 无名分组
      • 有名分组
  • 三、反向解析
      • 1.概念
      • 无名分组动态路由解析
      • 有名分组动态路由解析
  • 四、路由分发
            • 为什么要用路由分发?
      • 1.总路由分发配置
      • 名称空间
  • 五、伪静态的概念
  • 六、虚拟环境
      • 什么是虚拟环境?
      • 如何创建虚拟环境?
  • django1和django2的区别
      • 1. 路由文件
            • Django默认支持以下5个转化器:

一、路由层

1.路由匹配

Django 1.x中第一个参数是正则表达式
Django 2.x 及以上版本 path第一个参数写的是什么就匹配什么,匹配到直接执行对应的视图函数,精准匹配不支持正则表达式

在这里插入图片描述
settings配置文件内添加(控制django是否自动添加斜杠匹配)

APPEND_SLASH = False/True   # 默认是True自动添加斜杠

如果不想每次点击http://127.0.0.1:8000/跳转出报错的话可以在路由里指定

url(r'^$', views.test),

为空的时候加载页面为test

url方法第一个是参数 的正则表达式

urlpatterns = [
    path('^admin/', admin.site.urls),
    # 首页 默认进去
    path('^$',views.home),
    # 路由匹配
    path('^test/$',views.test),
    path('^testadd/$',views.testadd),
    # 尾页(了解 后期异常捕获)
    path('',views.error),
]

解析:
    ^	: 开头
    $	: 结尾 

二、正则无名分组与有名分组

无名分组

无名分组就是给某一段正则表达式用括号括起来

url(r'^test/(\d+)/$', views.test)
无名分组:会将括号内正则表达式匹配到的内容当做位置参数传递给视图函数

get请求的第一种方式:
http://127.0.0.1:8000/test/?a=1&b=2

get请求的第二种方式:
http://127.0.0.1:8000/test/123/11

代码实现

urls.py
# 会把括号中匹配的数字当成位置参数传给视图函数
url(r'^test/(\d+)/$',views.test)


views.py
def test(request,xx):
    print(xx)
    return HttpResponse('test')
  
正则:    
\d+	: 匹配任意数字

有名分组

url(r'^test/(?P<year>\d+)/(?P<month>\d+)$', views.test),
有名分组就是把正则中小括号里的匹配到的内容以关键字参数的形式传递给视图函数

有名无名不可以混合使用,但是可以分别多次使用
1.无名分组单个使用多次
path('^index/(\d(4))/(\d(4))/(\d(4))/',views.index),

2.有名分组单个使用多次
path('^index/(?P<year>\d+)/(?P<age>\d+)/(?P<month>\d+)/',views.index),

def index(request,*args,**kwargs):
    print(args)
    return HttpResponse('index')

三、反向解析

路由频繁变化的时候,html页面与后端上的链接地址如何做到动态解析呢?

通过在url里面设置路由和视图函数的别名,动态解析出对应的路由,该路由直接执行对应的函数,函数直接执行对应的url

1.概念

通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数,实现url路由频繁变化,HTML界面与后端动态解析链接地址操作步骤:

1.反向解析器路由配置
url(r'^1/2/3/4/testadd/$', views.testadd, name='testadd'),  # name='testadd' 起别名
前后端反向解析
2.在视图文件中导入模块reverse
from django.shortcuts import render,HttpResponse,redirect,reverse
3.反向解析  reverse('testadd')
def test(request):
    print(reverse('testadd'))
    return render(request,'index.html')
前端反向解析
4.前端模板文件反向解析
<a href="{% url 'testadd' %}">点击跳转</a>

无名分组动态路由解析

1.反向解析路由配置
url(r'^1/2/3/4/testadd/(\d+)/(\d+)/$', views.testadd, name='testadd'),

2.在视图文件中导入reverse模块
from django.shortcuts import render,HttpResponse,redirect,reverse

3.反向解析 reverse('testadd' args='(1,123)')
def test(request,*args,**kwargs):
	res = reverse('testadd')
	print(res)
	print(args,kwargs)
	return render(request,'index.html')
	
前端反向解析
4.前端模板文件反向解析
<a href="{% url 'testadd' 1 123 %}">点击跳转</a>  根据路由来需要添加2个参数

有名分组动态路由解析

1.反向解析路由配置
url(r'^1/2/3/4/testadd/(?P<year>\d+)/(?P<month>\d+)/$', views.testadd, name='testadd'),

2.在视图文件中导入reverse模块
from django.shortcuts import render,HttpResponse,redirect,reverse

3.反向解析
reverse('testadd' args='(1,123)')
reverse('testadd' kwargs={'year':1,'month':123})

def test(request,*args,**kwargs):
	res = reverse('testadd')
	print(res)
	print(args,kwargs)
	return render(request,'index.html')
	
前端反向解析
4.前端模板文件反向解析
<a href="{% url 'testadd' year=1 month=123 %}">点击跳转</a>  根据路由来需要添加2个关键字参数

四、路由分发

django支持每个应用都可以由自己独立的路由层(url.py)、静态文件(static文件夹)、模板层(templates)。基于该特性多人开发项目就可以完全解耦合,之后利用路由分发还可以整合到一起

为什么要用路由分发?
  • 解决项目的总路由匹配关系过多的情况
  • 总路由分开于干路由与视图函数的的直接对应关系
  • 总路由是一个分发处理(识别当前url是属于哪个应用下的,直接分发对应的应用去处理)
  • 当请求来了,总路由不做对应关系,根据请求直接访问哪个app的功能,直接将请求发送给对应的app
  • 提前创建好应用app01(创建即注册)、app02,然后记得注册app02

1.总路由分发配置

使用路由分发之前,总路由直接干路由与属于函数的匹配

方式一:

1.需要导入一个include路由分发模块
from django.conf.urls import url,include
2.导入子路由的urls  为了重名,起别名
from app01 import urls as app01——urls
from app02 import urls as app02——urls
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 1.路由分发
    url(r'^app01/',include(app01_urls)),  # 只要url前缀是app01开头 全部交给app01处理
    url(r'^app02/',include(app02_urls))   # 只要url前缀是app02开头 全部交给app02处理
]

方式二:

1.需要导入一个include路由分发模块
from django.urls import path,include
2.总路由分发  简易>>>推荐
urlpatterns = [
# 路由分发终极写法 简便
    path('app01/',include('app01.urls')),
    path('app02/',include('app02.urls'))

名称空间

路由分发之后,针对相同的别名是否能自动反向解析不同的应用前缀,默认情况下是无法直接识别应用前缀的,如果想要正常识别应用前缀,有以下两种方式:

总路由
path('app01/',include(('app01.urls','app01'),namespace='app01')),  # 创建了名称空间app01
path('app02/',include(('app02.urls','app02'),namespace='app02')),  # 创建了名称空间app02

反向解析
后端
def index(request):
	print(reverse('app01:index_view'))
    return HttpResponse ('index from app01')

def index(request):
    print(reverse('app02:index_view'))
    return HttpResponse reverse('app02:index_view')

前端页面
{% url 'app01:index_view'%}

子路由:
urlpatterns = [
   url('^index/',views.index,name='index_view')
]
urlpatterns = [
    url('^index/',views.index,name='index_view')
]

方式2:别名不冲突即可 利用应用名作为别名的前缀

1.总路由
urlpatterns = [
    url('admin/', admin.site.urls),
    # 路由分发
    url('app01/',include('app01.urls')),
    url('app02/',include('app02.urls'))
]

2.子路由
urlpatterns = [
  url('index/',views.index,name='app01_index_view')
  url('index/',views.index,name='app02_index_view')
]
3.后端
 reverse('app01_index_view')
 reverse('app02_index_view')

总结:只要保证名字不冲突骂我们就没必要使用名称空间,直接在路由起别名的时候加载app名作为别名的前缀

五、伪静态的概念

伪静态: 其实就是把动态页面改成静态页面
动态页面:
	"""它不是在html页面中写死的,它是根据后端的数据变化而变化"""
    我们的页面上的数据是从数据库查询出来都是可以是动态页面
    
静态页面:
	html
     css
案例:
	https://www.cnblogs.com/bigsai/p/17827160.html # 这个就是伪装之后的页面
伪装的目的:
	"""为了更好的被各大搜索引擎抓大,静态页面是最容易被抓到的,有个别的网站就会做伪装,seo"""
    seo:优化关键词被容易搜索到
    sem: 广告(RMB)
怎么样去伪装	 
	url(r'^v1/v2/test.html/$', views.test)

六、虚拟环境

什么是虚拟环境?

项目1需要使用:django1.11 								 python38
项目2需要使用:django2.22 pymysql requests			      python38
项目3需要使用:django3.22 request_html flask urllib3		 python38
    
  虚拟环境:能够针对相同版本的解释器创建多个分身 每个分身可以有自己独立的环境
  pycharm创建虚拟环境:(每创建一个虚拟环境就相当于重新下载了一个全新的解释器)

实际开发过程,我们需要给不同的项目配备不同的环境,项目需要用到的环境是什么我们就给装什么样的环境。一般不用的我们不装,因为虚拟环境创建太多(第三方模块或者工具太),是会消耗硬盘空间。

​ 目前我们不使用虚拟环境,所有的模块统一下载到本地

如何创建虚拟环境?

1.pycharm创建虚拟环境

1、创建虚拟环境
2、虚拟环境标志
3、虚拟环境下载django
4、使用虚拟环境

如果下载过程出现问题了,就复制提示的解决方法到文件上方框里去执行
pip install --index-url http://mirrors.aliyun.com/pypi/simple/ django==1.11.11 --trusted-host mirrors.aliyun.com

在这里插入图片描述

django1和django2的区别

1. 路由文件

django1.x中使用的是url:支持正则
django2.x中使用的是path(不支持正则:精准匹配)和re_path(url):支持正则
path:但是它只支持五种转换器

Django默认支持以下5个转化器:

● str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
● int,匹配正整数,包含0。
● slug,匹配字母、数字以及横杠、下划线组成的字符串。
● uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
● path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/140849.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Jmeter进行http接口性能测试

在进行网页或应用程序后台接口开发时&#xff0c;一般要及时测试开发的接口能否正确接收和返回数据&#xff0c;对于单次测试&#xff0c;Postman插件是个不错的Http请求模拟工具。 但是Postman只能模拟单客户端的单次请求&#xff0c;而对于模拟多用户并发等性能测试&#xf…

【Java】集合(二)Set

1.Set接口基本介绍 无序:存取顺序不一致不重复:可以去除重复无索引:没有带索引的方法&#xff0c;所以不能使用普通for循环遍历&#xff0c;也不能通过索引来获取元素 2.Set集合的实现类 HashSet:无序、不重复、无索引LinkedHashSet: 有序、不重复、无索引TreeSet: 可排序、不…

二维码智慧门牌管理系统升级解决方案:数据可视化助力运营精准决策

文章目录 前言一、升级版二维码智慧门牌管理系统的特点二、数据可视化助力运营精准决策 前言 随着科技的不断进步&#xff0c;传统的门牌管理系统已经无法满足现代社会的需求。为了提高管理效率&#xff0c;减少人力成本&#xff0c;我们引入了升级版的二维码智慧门牌管理系统…

同城服务如何引流和推广 同城小程序制作

客观原因线下实体店经营变得很艰难&#xff0c;而抖音推出的同城号功能&#xff0c;为许多商家带来了新的生机。抖音同城号的操作很简单&#xff0c;只需在短视频发布时打开同城号&#xff0c;短视频将被投入到同城流量池中&#xff0c;可以让位置附近的用户看到&#xff0c;线…

AttributeError: module ‘matplotlib‘ has no attribute ‘get_data_path‘

【报错】使用 AutoDL 下 Notebook 调用 matplotlib 时遇到 AttributeError: module matplotlib has no attribute get_data_path 报错&#xff1a; --------------------------------------------------------------------------- AttributeError …

C语言ZZULIOJ1148:组合三位数之一

题目描述 把1、2、3、4、5、6、7、8、9组合成3个3位数&#xff0c;要求每个数字仅使用一次&#xff0c;使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。 输入:无 输出:按从小到大的顺序输出这三个三位数&#xff0c;由空格隔开。输出占一行。 提示 若一个数能表…

No192.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

2017年计网408

第33题 假设 OSI 参考模型的应用层欲发送 400B 的数据 (无拆分), 除物理层和应用层之外, 其他各层在封装 PDU 时均引入 20 B 的额外开销, 则应用层数据传输效率约为( )A. 80%B. 83%C. 87%D. 91% 本题考察有关数据包逐层封装的相关概念。我们来一起分析一下。 这是要求大家必须…

Egg.js 中 Service 的使用

Service 服务 Service是用来编写和数据库直接交互的业务逻辑代码。Service就是在复杂业务场景下用于做业务逻辑封装的一个抽象层。 简单来说&#xff0c;就是把业务逻辑代码进一步细化和分类&#xff0c;所以和数据库交互的代码都放到Service中。这样作有三个明显的好处。 保…

【leetcode】8.字符串转换整数

题目 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格 检查下一个字符&#xff08;假设还未…

同城小程序怎么运作 本地化生活小程序开发

同城小程序可以采取公域加私域的运营方式&#xff0c;进行运作。 在社交媒体平台上分享有趣的本地生活内容、社区动态&#xff0c;可以通过举办本地活动、合作推广等方式进行线下宣传&#xff0c;可以通过抖音本地化生活服务进行线下门店推广。 本地化生活小程序开发需要结合自…

基于RK3568新零售智能售货柜解决方案

I 方案简介 新零售智能售货柜解决方案&#xff1a; 无人零售除了无人货架外&#xff0c;自动售货机仍是亮点。但仍有很多人认为自动售货机已经过时&#xff0c;不会成为新零售领域的新星。 随着手机支付、人脸支付不断普及&#xff0c;智能售卖不断的推陈出新&#xff0c;无人…

Netty入门指南之Reactor模型

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言单线程…

基因检测技术的发展与创新:安全文件数据传输的重要作用

基因是生命的密码&#xff0c;它决定了我们的身体特征、健康状况、疾病风险等。随着基因检测技术的高速发展&#xff0c;我们可以通过对基因进行测序、分析和解读&#xff0c;更深入地认识自己&#xff0c;预防和治疗各种遗传性疾病&#xff0c;甚至实现个性化医疗和精准健康管…

IDEA 2022创建Spring Boot项目

首先点击New Project 接下来&#xff1a; (1). 我们点击Spring Initializr来创建。 (2). 填写项目名称 (3). 选择路径 (4). 选择JDK------这里笔者选用jdk17。 (5). java选择对应版本即可。 (6). 其余选项如无特殊需求保持默认即可。 然后点击Next。 稍等一会&#xff0c…

堆排序(大根堆、小根堆)

参考视频&#xff1a; 1、数据结构&#xff0c;小根堆的调整&#xff01;必须熟练掌握&#xff01; 2、数据结构建堆筛选输出最小值 | 计算机软件考研期末知识点2

能够定时发送朋友圈的软件

此款软件提供便捷的网页端登录方式&#xff0c;让您轻松管理多个账号&#xff0c;实现多账号聚合管理&#xff0c;只需一个界面即可解决所有问题。 朋友圈内容编辑功能强大&#xff0c;让您在输入框内输入文本内容&#xff0c;点击表情图标选择表情&#xff0c;还能通过“”图标…

9.25 广读论文 思想汇总

数据集MIMIC-VI Learning Patient Static Information from Time-series EHR and an Approach for Safeguarding Privacy and Fairness The dataset analyzed in this study can be found in https://physionet.org/content/mimiciv/2.2/ and https://eicu-crd.mit.edu/about/…

python 使用pygame制作的打飞机小游戏

python基础使用pygame模块实现打飞机小游戏&#xff0c;有最高分记录&#xff0c;每次游戏的分数都会和最高分进行比较然后记录下来。 基础代码实现&#xff1a; class Bullet:def __init__(self):# 初始化成员变量&#xff0c;x&#xff0c;y&#xff0c;imageself.x 0self…

4.5 构建onnx结构模型-Reshape

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以pow 结点进行分析 方式 方法一&am…