当前位置: 首页 > news >正文

Django路由层之有名分组和无名分组、反向解析、路由分发、伪静态的概念、名称空间、虚拟环境、Django1和Django2的区别

【1】无名分组

无名分组:就是把正则中小括号里噩匹配到的内容以位置参数的形式传递给视图函数

 

url(r'^test/(\d+)$',view.text)

        

get请求的第一种方式:

        http://127.0.0.1:8000/test/?a=1&b=2

get请求的第二种方式:

        http://127.0.0.1:8000/test/12/1

【2】有名分组

有名分组:就是把正则中括号里的匹配的内容以关键字参数的形式传递给视图函数

 

        

url(r'^test/(?P<year\d+>)/(?P<mon\d+>)$',view.test)

【3】有名分组和无名分组是否可以使用多次

有名分组和无名分组不要混合使用,要么全是有名分组,要么全是无名分组

 

有名分组和无名分组可以多次使用

 

有名分组合无名分组的使用有了接收参数的方法

【4】反向解析

反向解析的概念:

        反向解析就是每一个路由都可以起一个别名,通过Django提供的一些方法去解析这个别名,得到一个别名对应的路由。

 

url(r'^v1/v2/home$',view.home,name='home')
        【4.1】后端反向解析

后端反向解析就是要使用reverse()方法

 

res = reverse('home')
print(res)'''home就是别名的名字'''
        【4.2】前端反向解析

前端反向解析就是使用 {%  %}

 

<a href"{% url 'home' %}"=>点击</a>
        【4.3】有名分组和无名分组的反向解析
                【4.3.1】无名分组的反向解析
url(r'v1/v2/home/(\d+)$',view.home,name='home')# 后端解析res = reverse('home',args=(12,))    # 解析出来的地址:v1/v1/home
print(res)# 前端解析<a href="{% url 'home' 1 %}">点击</a>
                【4.3.2】有名分组的反向解析
url(r'^v1/v2/home/(?P<year>\d+)/(?P<mon>\d+)/$',view.home,name='home')# 后端反向解析res = reverse('home',kwargs={year:1,mon:2})res = reverse('home' args=(1,2))'''args和kwargs都可以接收到参数'''print(res)# 前端的反向解析<a href={% url 'home' year=21 mon=3 %}>点击</a>

【5】路由分发

        【5.1】全局路由文件(主路由文件)

Django的全局路由文件就是urls.py

        【5.2】为什么要使用路由分发?

随着Django项目的浮渣程度越来越大,路由肯定也会越来越多,总路由文件中的路由地址就会越来越多。会导致总路由文件不好关系,不够清晰。路由分发可以很好的解决这个问题

        【5.3】如何使用路由分发

路由分发:就是在每个web应用的下面都分发一个路由(子路由)

 

注意:路由分发以后,总路文件就不作为地址匹配了,只是为了分发而已

 


路由分发:需要导入include方法

       

 from django.urls import path,include

  第一种方式:

        在总路由文件中导入每个web应用的子路由文件,不同的路由文件的名字可能存在重复的可能性,可以通过起别名的方式(as)进行区分

        

 from django.urls import path,includefrom app01 import urls as app01_urlsfrom app02 import urls as app02_urls# 路由分发url(r'^app01/',include(app01_urls)),url(r'^app02/',include(app02_urls)),

        

第二种方式:

        

url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls')),'''第二种方式可以不用导入w每个web应用的路由地址'''

        

注意:分发的路由第一个参数最好不要加$

 【6】名称空间

用于解决,在反向解析时,不同应用起的别名可能一致的问题。


                

        第一种方式:就在在反向解析时就注意下别名的定义

 

        第二种方式:

        

url(r'^app01/',include('app01.urls',namespace='app01')),
url(r'^app02/',include('app02.urls',namespace='app02')),'''解析'''res = reserve('app01:login',arg=(11,22))
res = reserve('app02:login',args=(11,222))

【7】伪静态的概念

        【7.1】静态文件和动态文件

动态文件:它是根据后端的数据变化而变化,不是在html页面中固定的,

                从数据库查询出来都是动态页面

                                       

                        

静态页面:在html文件内中写死了,不会变化。例:html,css等

        【7.2】伪装的作用

为了更好的被各大搜素引擎抓到。静态页面最容易被抓住,动态页面比较难抓

 

两种方式:

seo:优化关键字被容易搜索到

sem:广告

        【7.3】如何进行伪装

在路由文件的后缀中.html就行

 

url(r'^v1/v2/test.html/$',views.test)

【8】虚拟环境

针对每一个项目,都会去配置一个解释器,原则上多个项目可以使用同一个解释器

 

针对不同的项目单独配置一个新的解释器,每一个解释器只装针对这个项目的模块

  


虚拟环境就是纯净版本的python解释器。

虚拟环境需要自己下载,是哪个python解释器的版本,下载的就是这个版本的解释器

 

无必要的话不要频繁的创建虚拟环境,过多的虚拟环境会占用资源

【9】django1和django2的区别

1、路由文件:

        django1.x中使用的是url:支持正则

        django2.x中使用的是path:不支持正则,是精准匹配(写的是什么就按什么查找)

        django2.x中还使用re_path:re_path相当于django1.x中的url

 

path:支持5种转换器

 

Django默认支持的5个转换器:

        

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

 

1.1、自定义转换器

 


2、创建表关系:

        django1中不用指定on_delete,级联删除,级联更新

        django2中必须指定参数:on_delete:CASCADE

相关文章:

  • 国内领先的五大API接口供应商
  • 【golang】探索for-range遍历实现原理(slice、map、channel)
  • python科研绘图:圆环图
  • 程序员的绝望和欢笑:当拼写错误搞乱了我的代码
  • 前端设计模式之【代理模式】
  • 【Java 进阶篇】JQuery 遍历 —— For 循环的奇妙之旅
  • react hook ts 实现 列表的滚动分页加载,多参数混合混合搜索
  • ctf之流量分析学习
  • 沉浸式航天vr科普馆VR太空主题馆展示
  • Beautiful Soup爬取数据html xml
  • 查询ip地址
  • Java版B/S架构云his医院信息管理系统源码(springboot框架)
  • 0基础学习VR全景平台篇第121篇:认识视频剪辑软件Premiere
  • 酷开系统 酷开科技,将家庭娱乐推向新高潮
  • 为什么LDO一般不用在大电流场景?
  • [LeetCode] Wiggle Sort
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • FastReport在线报表设计器工作原理
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • MySQL用户中的%到底包不包括localhost?
  • windows下使用nginx调试简介
  • 安卓应用性能调试和优化经验分享
  • 对JS继承的一点思考
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记录:CentOS7.2配置LNMP环境记录
  • 记一次用 NodeJs 实现模拟登录的思路
  • 批量截取pdf文件
  • 实现菜单下拉伸展折叠效果demo
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 树莓派 - 使用须知
  • 通过git安装npm私有模块
  • 物联网链路协议
  • ​Java并发新构件之Exchanger
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​香农与信息论三大定律
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)Android开发优化---------UI优化
  • (1)SpringCloud 整合Python
  • (33)STM32——485实验笔记
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (过滤器)Filter和(监听器)listener
  • (区间dp) (经典例题) 石子合并
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • .NET DataGridView数据绑定说明
  • .NET NPOI导出Excel详解
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • @Transient注解
  • [20170713] 无法访问SQL Server
  • [ABC294Ex] K-Coloring
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [CSS] - 修正IE6不支持position:fixed的bug