Django中urls.py地址管理器

Django中urls.py地址管理器

在Django中地址映射都在urls.py模块中,

from django.contrib import admin
from django.urls import path
from front_app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    # path('',views.index,name='index'),
    path('',views.IndexView.as_view()),
    path('article',views.article,name='article')
]

path(route,view,name=,**kwargs)

route:表示访问路径,一般用“/”结束,可以带参数
view:route匹配成功后访问的视图,可以是函数(函数调用举例:views.article),可以是视图类(例如:views.IndexView.as_view())。
name:路径代替名称,如果使用name,访问name时候相当于访问匹配route。

ruls.py中地址匹配从urlpatterns列表中进行查找,如果 path(’’,)中route为空,默认为主页,直接进入,views.index访问的视图(如果route为空直接访问),name=’’ 为名字,主要是用在反向解析,也就是说如果使用了name,就可以直接用name定义对象进行访问,代表前面的route。,

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/<html>',views.index,name='book')
]

在urls.py中, path(‘book/’,views.index,name=‘book’)
route部分可以能带有参数书。如上,对于上述参数接收可以有多种类型,默认为str,之外还有int,slug,uuid,path

str:匹配的一个非空字符串,出去“/”。

def index(request,html):
    return HttpResponse("{}".format(html))

例如:http://127.0.0.1:8000/book/abc,返回结果为“abc”,如果使用带’/'字符串,出现必能匹配错误。

int:匹配整数

例如下列代码。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/<int:a>/<int:b>',views.index,name='book')
]

视图调用如下:

def index(request,a,b):
    return HttpResponse("{}".format(a+b))

浏览器使用连接http://127.0.0.1:8000/book/1/2,结果为3

slug:匹配通过“-”连接的ASCII字母或者数字

示例代码如下:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/<slug:slugstr>',views.index,name='book')
]

视图代码:

def index(request,slugstr):
    return HttpResponse("{}".format(slugstr))

浏览器地址:
http://127.0.0.1:8000/book/abc-123,返回结果为:‘abc-123’

uuid:匹配uuid格式字符串

UUID通用唯一识别码(Universally Unique Identifier)的缩写,UUID是国际标准化组织(ISO)提出的一个概念。UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和随机数。
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。 [2]
(4)在 hibernate(Java orm框架)中, 采用 IP-JVM启动时间-当前时间右移32位-当前时间-内部计数(8-8-4-8-4)来组成UUID(上述文字来自百度百科)
例如:http://127.0.0.1:8000/book/00000000-0000-0000-0000-000000000000
通过下列代码:
URL

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/<uuid:uuidstr>',views.index,name='book')
]
view
def index(request,uuidstr):
    return HttpResponse("{}".format(uuidstr))

浏览器访问http://127.0.0.1:8000/book/00000000-0000-0000-0000-000000000000结果“00000000-0000-0000-0000-000000000000”,

path:匹配一个路径(包括’/'字符)

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/<path:pathstr>',views.index,name='book')
]

view.py

def index(request,pathstr):
    return HttpResponse("{}".format(pathstr))

浏览器访问:http://127.0.0.1:8000/book/a/b/c.html
结果显示:a/b/c.html.

include()

在有些时候,我们不只是使用项目中urls.py模块。在地址映射过多时候显得繁琐,于是可以在APP中使用urls.py
在这里插入图片描述在这里插入图片描述
创建urls.py前后。如何使用app中,urls.py呢?
例如:APP中urls.py代码。
book.urls.py

from django.urls import path
from .views import index
urlpatterns = [
    path('',index,name='index'),
]

项目下urls.py

from django.contrib import admin
from django.urls import path,include
from book import urls

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include(urls))
]

book.view.py

def index(request):
    return HttpResponse("这里是视图函数返回")

结果浏览器显示:“这里是视图函数返回”
include()使用方式。
上述中为最简单使用
上述方式中另外一种用法是在同意个urls模块中使用include(),例如下列代码:

from django.urls import path,include
from book import views

urlpatterns1 = [
    path('',views.index)
]
urlpatterns = [
    path('',include(urlpatterns1))
]

path()中name使用。

为了验证name实用性,做如下简单代码,这是模板文件index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p><a href={% url 'book:index' %}>首页</a></p>
    <p><a href={% url 'book:book' %}>book</a></p>
    <p><a href={% url 'book:news' %}>news</a></p>
</body>
</html>

urls.py

from django.urls import path
from .views import index,book,news
urlpatterns = [
    path('',index,name='index'),
    path('book/',book,name='book'),
    path('news/',news,name='news'),
]

view.py

from django.shortcuts import render,HttpResponse

def index(request):
    return render(request,'index.html')

def book(request):
    return HttpResponse("BOOK")

def news(request):
    return HttpResponse("news")

在这里插入图片描述浏览器正常使用
当更换浏览器访问路径时候。
比如更改如下路径。
在这里插入图片描述在这里插入图片描述
访问正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值