Django-路由初步

当⽤户在您的Web应⽤程序上发出⻚⾯请求时,Django会获取url中请求路径(端 ⼝之后的部分),然后通过urls.py⽂件查找与路径相匹配的视图,然后返回HTML 响应或404未找到的错误(如果未找到)。在urls.py中,最重要的是 “urlpatterns” 列表。这是您定义URL和视图之间映射的地⽅。映射是URL模式中的path对象,例如

一、建立到app的路由

我们创建了一个app名字就叫app,我们想向这个app分发路由请求,我们的项目朱目录有一个urls.py,我们写入下面的代码

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

urlpatterns = [
    path('admin/', admin.site.urls),
    # 我们用include就可以使 http://127.0.0.1:8000/app 的内容指向app的urls.py
    path('app/', include('app.urls'))
]

我们在我们的app目录下创建一个urls,写入下面的代码

from django.urls import path
from app import views

urlpatterns = {
    # 这样我们访问 http://127.0.0.1:8000/app/index 就会使用views中的index函数来处理
    path('index/', views.index, name='index'),
}

我们写一下我们视图函数views.py

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello Django")

我们启动这个项目,访问 http://127.0.0.1:8000/app/index/ 会得到一个我们返回的字符串"Hello Django"

到此我们基本学会了怎么简历一个路由以及返回数据

二、路径转换器

默认情况下,以下路径转换器可用:

  • str- 匹配任何非空字符串,不包括路径分隔符 。如果表达式中未包含转换器,则这是默认设置。'/'
  • int- 匹配零或任何正整数。返回 .int
  • slug- 匹配由 ASCII 字母或数字以及连字符和下划线字符组成的任何辅助字符串。例如。building-your-1st-django-site
  • uuid- 匹配格式化的 UUID。为防止多个URL映射到同一网页,必须包含短划线,字母必须小写。例如075194d3-6885-417e-a8a8-6c931e272f00
  • path- 匹配任何非空字符串,包括路径分隔符 。这允许您与完整的 URL 路径进行匹配,而不是像 匹配 。'/' str
2.1、str
urlpatterns = {
    path('index/<str:name>', views.index, name='index'),
}
from django.http import HttpResponse


def index(request,name):
    return HttpResponse(name)

我们访问http://127.0.0.1:8000/app/index/ok的到的结果是 ok

2.2、int
urlpatterns = {
    path('index/<int:name>', views.index, name='index'),
}

我们访问http://127.0.0.1:8000/app/index/12的到结果12

2.3、slug
urlpatterns = {
    path('index/<slug:name>', views.index, name='index'),
}

我们访问http://127.0.0.1:8000/app/index/django-url的到结果django-url

2.4、uuid
urlpatterns = {
    path('index/<uuid:name>', views.index, name='index'),
}

我们访问http://127.0.0.1:8000/app/index/075194d3-6885-417e-a8a8-6c931e272f00的到结果075194d3-6885-417e-a8a8-6c931e272f00

这里有些许不同的就是,我们访问别的的不到结果,但是例如str中我们写int值也能的到结果

2.5、path
urlpatterns = {
    path('index/<path:name>', views.index, name='index'),
}

我们访问http://127.0.0.1:8000/app/index/django/urls的到结果django/urls

三、使用正则表达式

如果我们的path已经无法满足我们对路由的需求了,我们可以使用正则表达式

下面是之前使用正则表达式重写的示例 URLconf:

from django.urls import path, re_path

from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]

这完成的事情与前面的示例大致相同,除了:

  • 将匹配的确切 URL 受到的约束稍多。例如,年份 10000 将不再匹配,因为年份整数被限制为正好四位数字。
  • 每个捕获的参数都作为字符串发送到视图,而不管正则表达式的匹配类型如何。

四、错误处理

当 Django 找不到所请求 URL 的匹配项时,或者当引发异常时,Django 会调用错误处理视图。

用于这些情况的视图由四个变量指定。对于大多数项目来说,它们的默认值应该足够了,但是可以通过覆盖它们的默认值来进一步自定义。

可以在根 URLconf 中设置此类值。在任何其他 URLconf 中设置这些变量将不起作用。

值必须是可调用的,或者是表示应调用以处理手头的错误条件的视图的完整 Python 导入路径的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值