关于Django中的路由系统相关知识点的总结

1、路由

1.1、URL路由简介

        在Django中URL路由,由成为URL调度器,其作用是完成URL与Python视图函数的映射。

1.2、URL路由位置

        路由写在了项目文件下的url.py这个Python文件中,该文件是创建项目时自动创建的。在该文件中,路由定义格式如下:

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

1.3、URL路由三部曲

        a.在url.py文件中定义路由,并指定视图函数;

        b.定义路由中指定的视图函数,即Python函数

        c.通过浏览器进行访问。

1.4、URL路由工作流程

2、path函数

2.1、什么是path函数

        path的作用是返回一个元素,以便包含在urlpatterns列表中,该函数需要导入(from django.urls import path),已在创建项目时完成。

2.2、path函数语法结构

path的语法格式如下:

path(route,view,kwargs=None,name=None)#参数含义如下:

        route参数是一个匹配URL规则的字符串,当Django在处理请求时,会从urlpatterns的第一项开始,按顺序依次匹配列表中的每一项,直到找到为止。匹配的原则是:匹配到即停止;
        view参数是一个视图函数名,视图函数用于处理用户的请求,并且返回响应。视图函数必须将HttpRequest对象作为第一个参数,参数建议一般以request命名。后一节将详细介绍;
        kwargs 代表向模板传递的参数,必须在字典(dict);
        name 为url命名(在应用中一般以“应用名_配置项名称”命名),以便Django在任意地方可以唯一引用它。

2.3、分布式路由include()函数

        在Django中,每个项目的独立业务模块就称为一个应用。在每个应用中可 以包含其相对独立的模板、静态文件、视图函数、路由等。

        在Django中创建应用分两步:a、创建:python3 manage.py startapp name(例如:python3 manage.py startapp users);b、注册:在 settings.py 的 INSTALLED_APPS 列表中添加已创建的应用,如:

INSTALLED_APPS = [ # ...
'users.apps.UsersConfig'
]

        应用的目录结构有:views.py 指视图函数的处理文件;models.py 指模型类文件;migrations 是数据迁移目录;还需要用户自行创建urls.py 文件,用于存储应用的 路由信息。

        分布式路由,仍然写在项目目录下的urls.py中,格式如下:

from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [
    path('',views.index),
    path('admin/', admin.site.urls),
    path('blog/',include('users.urls')),
]

3、路径转换器

3.1、路径转换器简介

        Django 中的路径转换器用于捕获 URL 模式中特定部分的值,并将其作为参数传递给视图函数。

3.2、路径转换器的作用

        路由系统中通过路径转换器传递参数,需要强调的是:在视图函数中也必须存在同名的参数,以接收路径转换器传递来的参数。

urlpatterns = [ path('user/<int:id>/name/<str:name>',userinfo),
]

对应的视图函数则需要书写成:

from django.http import HttpResponse
def userinfo(request,id,name): ...
...

3.3、路径转换器的分类

主要有以下五种格式:

        a、整数,匹配 0 及其他正整数,返回 int <int:parameter_name> ,如:

# urls.py中的代码
def article(request,id):
        return HttpResponse('文章详情')
urlpatterns = [ path('article/<int:id>',article),
]

        b、字符串,匹配除 / 外的任何非空字符串,直到遇到下个斜线 <str:parameter_name> ,如:

def user(request,username):
        return HttpResponse(f"username is: {username}")
urlpatterns = [
        path('admin/', admin.site.urls),
        path('user/<str:username>',user),
]

        c、路径,匹配非空字符串,包括路径分隔符( / ) <path:parameter_name> ;

        d、uuid ,匹配 UUID 格式的字符串,其格式为 8-4-4-4-12 <uuid:parameter_name>;

        e、slug ,匹配任何的 ASCII 字母,数字、短横线及下划线,<slug:parameter_name>。

4、用re_path()方法正则匹配复杂路由(了解)

        路由中的正则表达式的语法格式如下:(?P<name>pattern)其中,那么是匹配的字符串,pattern是要匹配的模式。

常见的正则表达式如下:

正则表达式说明
.匹配任意单个字符
\d匹配任意一个数字
\w匹配字母、数字、下划线
*匹配0个或者多个字符(如“\d*”代表匹配0个或者多个数字)
[a-z]匹配a~z中任意一个小写字符
{1,5}匹配1~5个字符

代码示例:

urls.py代码:

from django.urls import path, re_path
from app2 import views
urlpatterns = [
    re_path('list/(?P<year>\d{4})',views.list),
    re_path('page/(?P<page>\d+)&key=(?P<key>\w+)',views.page),
]

        第一条路由:接收以“app2/list/”开头,后面跟4位整数

        第二条路由:接收以“app2/page/”开头、后面跟任意位整数,且第二个参数可以是字母、数字和下划线

在app2应用的views.py中增加视图函数如下:

def list(request,year):
    return HttpResponse(f"今年是:{year}")
def page(request,page,key):
    return HttpResponse(f"这是书本的第{page}页,里面的内容是{key}")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值