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

智能推荐

8051单片机——TTL电平与RS232电平与USB电平_pc的串口rs232电平和单片机的ttl电平有什么区别,怎样转换-程序员宅基地

文章浏览阅读534次。详情请见:RS232电平和TTL电平有什么不同?如何转换? - 知乎 (zhihu.com)_pc的串口rs232电平和单片机的ttl电平有什么区别,怎样转换

Jiangsheng的CSDN Digest(April 3, 2006)-程序员宅基地

文章浏览阅读1.4w次。 为了便于搜索,这里尽可能保留了论坛上讨论的原文,但是这并不表示本人赞同帖子中的表述方式和观点。CSDN 讨论总结系列: Jiangsheng的CSDN Digest(March 4, 2006) (http://blog.csdn.net/jiangsheng/archive/2006/03/05/615714.aspx) Jiangsheng的CSDN Digest

虚拟机通过nat模式端口映射实现内网穿透_虚拟机端口映射-程序员宅基地

文章浏览阅读490次。【代码】虚拟机通过nat模式端口映射实现内网穿透。_虚拟机端口映射

vue中使用图片预览插件v-viewer_vue中 图片预览不装插件可以吗-程序员宅基地

文章浏览阅读885次。安装依赖npm install v-viewer --savemain.js中配置//引入图片查看器import Viewer from 'v-viewer'import 'viewerjs/dist/viewer.css'Vue.use(Viewer, { defaultOptions: { zIndex: 9999 }})在vue单文件组件..._vue中 图片预览不装插件可以吗

实现计算机系统并行性的主要策略,西南民族大学计算机系统结构试卷B有答案...-程序员宅基地

文章浏览阅读128次。《西南民族大学计算机系统结构试卷B有答案》由会员分享,可在线阅读,更多相关《西南民族大学计算机系统结构试卷B有答案(4页珍藏版)》请在人人文库网上搜索。1、试卷一、填空题(每空1分,共10分)1.实现程序移植的主要途径有统一高级语言、系列机、模拟和___(1)___。2.衡量计算机系统性能可采用各种尺度,但最为可靠的衡量尺度是____(2)___。3.计算机系统中的数据表示是指可由硬件直接辨认的_..._采用先行控制技术必需增设

想加薪吗?26项大数据专业认证能帮您_26套大数据-程序员宅基地

文章浏览阅读373次。当前大数据产业如火如荼,数据科学家、数据分析师和数据工程师的需求量很大,获得这三个领域内的认证将为您的职业生涯带来强大优势。 在任何成功的企业, 数据和大数据分析都是生命线。获得正确的技术本来就很有挑战,建立合适的团队并用适当的技能来发起大数据项目可能会更加困难。毫不奇怪,这一挑战反映在对大数据技能和认证的不断增长的需求上。如果您正在寻找获得优势的方法,那么获得大数据认证就是一个很好的选..._26套大数据

随便推点

面向大数据的异构内存系统-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏9次。面向大数据的异构内存系统王孝远, 廖小飞, 刘海坤, 金海华中科技大学计算机学院,湖北 武汉 430074摘要:受限于DRAM和新型非易失性存储器(non-volatil..._llvm pmu

python用遗传算法优化神经网络_自动机器学习:利用遗传算法优化递归神经网络...-程序员宅基地

文章浏览阅读1.2k次。最近,在自动机器学习方面有很多工作,从选择合适的算法到特征选择和超参数调优。有几种可用的工具(例如:AutoML和TPOT),可以帮助用户高效地执行数百个实验。同样,深层神经网络结构通常由专家设计;通过试验和错误的方法。通过这种方法,在几个领域研发出了最先进的模型,但是这种方法非常耗时。最近,由于可用计算能力的增加,研究人员正在使用强化学习和进化算法来自动化搜索最优的神经结构。在本文中,我们将学习..._population = toolbox.population(n=population_size)

BT656解码FPGA实现-程序员宅基地

文章浏览阅读618次,点赞2次,收藏3次。实现bt656数据解码成标准video数据,数据格式为yuv4:2:2。_bt656

vs环境下qt中按钮切换页面_vs+qt点击按钮实现界面跳转-程序员宅基地

文章浏览阅读3.6k次,点赞5次,收藏22次。 搜索切换qt页面,网上大都给出的是不同窗口之间的切换,做登录界面时可以用这种,但是当我们在主界面做的按钮比较多时,切换界面总是比较麻烦,而且项目中大多使用Stacked Widget,下面我们来看看怎么实现。首先在ui界面拖出几个按钮,在按钮下面拖出Stacked Widget,并把Stacked Widget拉大一点,在Stacked Widget中拖出label记为页面1。右击Stacked..._vs+qt点击按钮实现界面跳转

Qt教程4-Ubuntu(x86_64)上用QEMU建立arm64(aarch64)的模拟开发环境_qemu 安装qt-程序员宅基地

文章浏览阅读1.4k次,点赞27次,收藏25次。最近由于项目需要做国产系统适配,软件需要适配不同架构CPU!同时又随时需要将x86_64架构下交叉编译的程序部署在ARM64环境进行运行验证,为了便捷开发过程,故在本机x86_64架构下采用QEMU 来模拟出ARM64的开发环境!这样就可以临时脱离ARM64硬件实物,方便调试!_qemu 安装qt

推荐文章

热门文章

相关标签