django 中路由的使用 path 和 re_path的区别 url_django re_path 使用方法-程序员宅基地

技术标签: python  django  后端  

目录

一、区别

二、url

二、path

1、简单的正则表达式

三、re_path

re正则表达式

要点:

 附:正则表达式用法小结


一、区别

path:用于普通路径,不需要自己手动添加正则首位限制符号,底层已经添加。

re_path:用于正则路径,需要自己手动添加正则首位限制符号。

url() 方法:普通路径和正则路径均可使用,需要自己手动添加正则首位限制符号。

二、url

from django.conf.urls import url # 用 url 需要引入

urlpatterns = [
    url(r'^admin/$', admin.site.urls),
    url(r'^index/$', views.index), # 普通路径
    url(r'^articles/([0-9]{4})/$', views.articles), # 正则路径
]

二、path

# coding=utf-8
from django.urls import path,re_path
from .views import *

urlpatterns = [
    path('login1/', login,name="login"),
    path('login2/', LoginView.as_view()),# 通过类方法调用,as_view 是from django.views import View中的方法

]

1、简单的正则表达式

尖括号为标志,表达式写成<变量类型:变量名>的形式,这种正则不需要import额外的方法。

from django.urls import path
from . import views

urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('<int:id>/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('<int:id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:id>/vote/', views.vote, name='vote'),
]

三、re_path

Django是不喜欢用GET方法的url参数的,通常Django使用正则表达式来解析url,提取出其中的变量并传递给方法。

re正则表达式

使用re_path()代替path(),并在字符串的引号前加r
Python正则表达式前的 r 表示原生字符串(rawstring),该字符串声明了引号中的内容表示该内容的原始含义,避免了多次转义造成的反斜杠困扰。大概意思就是加了r的不用再考虑字符串中标点的转义,程序会自动帮忙转义。

1、使用GET请求获得参数时,斜杠(/)、句点(.)一般不可取到字符串参数内。一串“/”隔开的url取参数需要每个单独取。如:

2、django2.0中,使用正则表达式进行路由的话需要使用re_path()

from django.urls import path, re_path
from . import views
urlpatterns = [
    re_path('^hello/$', views.hello),
    re_path('^hello/(?P<yy>[0-9]+)/', views.hello),
]

要点:

1、匹配头用尖号^,前部固定,后部自由:

 2、匹配尾用$,后部固定,前部自由:

3、匹配变量参数:
字符串:(?P<prm>\w+),+表示多个字符
数字:(?P<int>\d+),+表示多个数字
类型、个数匹配:(?P<p>[0-9]{4}) //4个0-9的数字
尖括号内是变量名,会作为views中的方法的参数传给views

 附:正则表达式用法小结

#正则表达式:
# 元字符: \w \d \s \n \t  \W \S \D \b  ^ 尖角号 $  . []  [^] ()  |
#   [0-9]  \d
#   [1-9]
#   [\da-zA-Z]
#. :匹配除换行符"\n"以外的任意字符
#\ :转义字符,使后一个字符改变原来的意思.如果字符串中有字符*需要匹配,可以使用\*或者字符集{*}
#[...]:字符集,对应的位置可以是字符集中任意字符.字符集中的字符可以逐个列出,也可以给出范围,如[abc]
#或者是[a-c],第一个字符如果是^,则表示取反,如[^abc]表示不是abc的其他字符.所有的特殊字符在字符集中
# 都失去其原有的特殊含义.在字符集中如果要使用].-或^,可以在前面加上反斜杠,或者把],-放在第一个字符,把^
#放在非第一个字符

#\d   数字:[0-9]
#\D   非数字:[^\d]
#\s   空白字符:[<空格> \t\r\n\f\v]
#\S   非空白字符:[^\s]
#\w   单词字符:[0-9a-zA-Z_]包括了数字字母下划线
#\W   非单词字符:[^\w]


#量词 :  {n}  {n,}  {n,m}  * ? +
#* :匹配前一个字符0或无限次  abc*
#+:匹配前一个字符1次货无限次. abc+
#?:匹配前一个字符0次或1次.    abc?
#{n}:匹配前一个字符n次        ab{2}c  匹配字符:abbc
#{n,}:至少匹配n次,至无限次
#{n,m}:匹配前一个字符n到m次   ab{1,2}c 匹配字符abc,abbc

#*?,  +?,  ??  {m,n}?,使* + ? {m,n}变成非贪婪模式

#边界匹配:
#^ :匹配字符串开头,
# 在多行模式中匹配每一行的开头.  ^abc   匹配字符abc
#$ :匹配字符串末尾,
# 在多行模式中匹配每一行的末尾.   abc$  匹配字符abc
#\A  仅匹配字符串开头           \Aabc  匹配字符abc
#\Z  仅匹配字符串末尾           abc\Z  匹配字符abc
#\b  匹配\w和\W之间            a\b!bc  a!bc

# |:|代表左右表达式任意匹配一个.它总是先尝试匹配左边的表达式
#一旦左边的表达式成功匹配则跳过右边的表达式
#如果|没有被包括在()中,则它的范围是整个正则表达式   abc|def

#(...) :被括起来的表达式将作为分组,从表达式左边开始每遇到
#一个分组的左括号"(",编号+1.另外,分组表达式作为一个整体,可以接数量词.
#表达式中的|仅在该组有效.
#(?P<name>...):分组,除了原有的编号外再指定一个额外的别名.
#\<number>:引用编号为<number>的分组匹配到的字符串. (\d)abc\1
#(?P = name):引用别名为<name>的分组匹配到的字符串

#转义符:
        # python str : '\'
        # 正则表达式中的'\'到了python中都会变成'\\'
        # r'\w' 在python当中\不转义了,在Python中就是一个普通的'\',但是在正则表达式中它还是表示一个转义符
    # 贪婪匹配/惰性匹配 :
        # .*x 贪婪 匹配任意内容最多次,直到最后一个X停止 回溯算法
        # .*?X 惰性 匹配任意内容最少次,遇到第一个X就停止

# re模块
    # findall 匹配所有 列表
    # search 匹配第一个 变量.group(),没匹配到返回None
    # match 从头开始匹配第一个
    # split sub subn
    # finditer compile
        # finditer 返回一个迭代器,所有匹配到的内容需要迭代取到,迭代取到的每一个结果都需要group取具体值
            # -- 节省内存空间
        # compile 编译,先把一个正则表达式编译,编译之后,在之后多次使用的过程不用重新编译
            # -- 节省时间 提高效率

# 分组:()
    # 1.给不止一个字符的整体做量词约束的时候 www(\.[\w]+)+    www.baidu.com
    # 2.优先显示,当要匹配的内容和不想匹配的内容混在一起的时候,
        # 就匹配出所有内容,但是对实际需要的内容进行分组
    # 3.分组和re模块中的方法 :
        # findall : 分组优先显示 取消(?:正则)
        # search :
            # 可以通过.group(index)来取分组中的内容
            # 可以通过.group(name)来取分组中的内容
                # 正则 (?P<name>正则)
                # 使用这个分组 ?P=name
        # split : 会保留分组内的内容到切割的结果中

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51715424/article/details/128217686

智能推荐

C++ 学习笔记(对双端队列进行封装,实现数据生产者消费者)-程序员宅基地

文章浏览阅读698次。#pragma once #include <deque>#include <condition_variable>template <typename T>class MsgList { public: void add(const T& msg) { std::unique_lock<std::mutex> lock(mutex); queue.

python水表识别图像识别深度学习 CNN_水表 深度学习 识别-程序员宅基地

文章浏览阅读551次,点赞8次,收藏8次。重点:项目和文档是本人近期原创所作!程序可以将水表图片里面的数据进行深度学习,提取相关信息训练,lw1.3万字重复15%,可以直接上交那种!具体和看下面的目录。python水表识别,图像识别深度学习 CNN,Opencv,Keras。_水表 深度学习 识别

【DataSet】遥感图像方面的人工智能数据集_群智感知 图像数据集-程序员宅基地

文章浏览阅读288次。遥感图像方面的人工智能数据集数据集类别常用数据集目标检测数据集DSTL 卫星图像数据集;RSOD-Dataset 数据集;NWPUVHR-10地理遥感数据集图像分割数据集Inria AerialImage Labeling Dataset 遥感图像数据集遥感图像分类数据集UCMerced Land-Use Data Set 土地遥感数据集_群智感知 图像数据集

python使用镜像安装opencv_opencv_python安装镜像-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏11次。如何在pycharm中安装opencv_opencv_python安装镜像

手把手教你IDEA创建SSM项目结构_idea创建ssm web项目-程序员宅基地

文章浏览阅读595次,点赞2次,收藏8次。我的小站SSM项目需要用来管理依赖,所以我们需要先配置好,配置很容易,我就不演示了。首先,我们新建项目,勾选,选择模板,然后创建。这里耐心等待下载完成。可以看到,这里没用相关的文件夹。我们直接在文件夹上右键新建文件夹,下面会显示一个,直接创建就可以。此时,我们按照规范来,创建一个包。项目结构多种多样,比如三层架构啥的,按照你的需求来。我这里就稍微演示一下。这里这些结构都是可以自己按照规范命名,结构也有很多,分层架构方法也有很多,这里权当借鉴一下。我这里整合了一份依赖,如需使用可按照自己需求和对于版本进_idea创建ssm web项目

2022年-2023年中职网络安全web渗透任务整理合集_server2280 中职组-程序员宅基地

文章浏览阅读3.2k次。2022年-2023年中职网络安全web渗透任务整理合集_server2280 中职组

随便推点

WPF TabControl 滚动选项卡_wpf 使用tabcontrol如何给切换的页面增加滚动条-程序员宅基地

文章浏览阅读1.3k次,点赞27次,收藏19次。我原本以为是很简单的事情,但是没想到实际做起来还是有很多的基础知识点的。我们平常写TabControl的时候,可能都很习惯了直接写TabControl+TabItem。但是TabControl负责了什么布局,TabItem负责了什么布局,我们都不知道。在《深入浅出WPF》中,我们可以看到TabControl属于ItemsControl我们去看看控件模板样式副本。WPF的xaml的优点是每个控件都是单独的逻辑,耦合低。缺点是写起来麻烦,每次改动约等于重新写一个新的。通过增加自己的工作量来降低了耦合我们可以看_wpf 使用tabcontrol如何给切换的页面增加滚动条

Apache Jmeter常用插件下载及安装及软硬件性能指标_jmeter插件下载-程序员宅基地

文章浏览阅读2.1k次,点赞24次,收藏47次。Apache Jmeter常用插件下载及安装_jmeter插件下载

SpringBoot 2.X整合Mybatis_springboot2.1.5整合mybatis不需要配置mapper-locations-程序员宅基地

文章浏览阅读5.9k次,点赞6次,收藏18次。实际上Mybatis的整合过程像极了我们程序员的一生。在SpringBoot 整合Mybatis之前,我们回忆回忆以前 MyBatis 单独使用时,myBatis 核心配置文件要配置数据源、事务、连接数据库账号、密码....是的全是这货一个人干,都要亲力亲为。这就是我们的低谷期myBatis 与 spring 整合的时候,配置数据源、事务、连接数据库的账号什么的都交由 spring 管理就行,就不用什么都自己管理自己去干。这就是我们春风得意的时候,事业有着落...再后来,Spring_springboot2.1.5整合mybatis不需要配置mapper-locations

ios刷android8.0,颤抖吧 iOS, Android 8.0正式发布!-程序员宅基地

文章浏览阅读162次。原标题:颤抖吧 iOS, Android 8.0正式发布!如果现在选一个最好用的手机操作系统,多数人还是认为 iOS。不过最近几年,苹果和安卓的竞争越来越激烈,苹果的优势也越来越小。眼看 Android 8.0 就要来了,下面就让我们扒一扒 Android 8.0 到底有哪些更新? 后台限制机制,从此告别卡顿安卓手机比较坑爹的一个地方就是后台越多应用,就会越卡顿,导致用户需要偶尔清理后台,一定程度..._苹果刷安卓8

【halcon】C# halcon 内存暴增_halcon 读二维码占内存-程序员宅基地

文章浏览阅读344次。如果不使用halcon引擎,直接调用lines_gauss虽然内存会飙升,但是属于图片占用的内存还是会立刻被释放,但是如果在halcon引擎中,这个就会释放很慢,如果连续处理图片,你的内存就会“爆炸”!一个6M的图片通过halcon进行加载,大约会消耗200M的内存,如果等待GC回收,而你又在不停的读取图片,你的内存占用,将在短时间内飙升。目前给我的感觉是,如果我封装了一个算子,然后通过halcon引擎调用,然后这个算子需要传入图片参数,这个图片传入引擎后,过很久才会被释放掉。_halcon 读二维码占内存

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

推荐文章

热门文章

相关标签