博客
关于我
Django知识点之urls.py路由设置
阅读量:737 次
发布时间:2019-03-22

本文共 4135 字,大约阅读时间需要 13 分钟。

路由系统

路由系统分类

在Django中,路由系统分为两种类型:FBV(Function-Based View)CBV(Class-Based View)。两种路由类型都支持,但有些框架只支持一种。

1.1 FBV(Function-Based View)

FBV使用函数处理请求,通常在Django 1.XX及更早版本中使用。在views.py中,你可以用函数来处理请求。

1.2 CBV(Class-Based View)

CBV使用类来处理请求,通常在Django 2.XX及更晚版本中使用。CBV需要继承django.views.generic.View类。在URLS.py中,你使用as_view()方法将类转换为可用的路由。


URLS.PY 文件路由配置

URL配置文件用于定义路由规则,包括直接调用函数或转发到子路由文件。Django支持使用正则表达式和固定字符串匹配。

示例配置

from django.conf.urls import urlfrom django.urls import include, pathurlpatterns = [    path(r'blog/', blog.views.index),    path(r'bbs/', bbs.views.index),    path(r'pathreg/', include('app.urls'))]
  • path()用于固定字符串或格式匹配。
  • include()用于包含子路由文件。

URL规则模块的匹配方式

2.1 url 函数

url()函数用于定义路由规则,可使用正则表达式或固定字符串。

url 的用法

from django.conf.urls import urlurlpatterns = [    url(r'^test/$', views.test_views.view),    url(r'^test/(?P\d+)$', views.test_views.view, name='test_url'),]

2.2 path 函数

path()函数在Django 2.1X以后替代url(),它支持固定的匹配模式(如int, str, slug等)。

path 的用法

from django.urls import pathurlpatterns = [    path(r'pathtest/', pathtest.views.index),    path(r'pathtest/
/', pathtest.views.index), path(r'pathtest/
/', pathtest.views.index),]

2.3 re_path 函数

re_path()函数用于正则表达式匹配,适用于复杂的路由规则。

re_path 的用法

from django.urls import re_pathurlpatterns = [    re_path(r'^test/(?P\d+)$', views.test_views.view),]

path 函数的匹配规则

path()函数支持以下匹配模式:

  • int:匹配正整数。
  • str:匹配字符串。
  • slug:匹配字母、数字和短划线的组合。
  • uuid:匹配UUID对象。
  • path:匹配所有字符串,包括斜杠。

示例

urlpatterns = [    path(r'pathtest/
', pathtest.views.index), path(r'pathtest/
', pathtest.views.index),]

视图处理

3.1 FBV 加载方式

FBV直接从views.py加载函数。例如:

from django.shortcuts import renderdef index(request):    return render(request, 'pathtest.html')

3.2 CBV 加载方式

CBV需要继承View类,并在URLS.py中使用as_view()方法。例如:

from django.views.generic import Viewclass CBV1(View):    def get(self, request):        return render(self.request, 'pathtest.html')

URLS.py中:

urlpatterns = [    path(r'pathtest1/', pathtest.views.CBV1.as_view()),    path(r'pathtest2/', pathtest.views.CBV2.as_view()),]

4.1 视图参数传递

视图函数可以通过kwargs接收参数。例如:

from django.urls import pathimport pathtest.viewsurlpatterns = [    path(r'pathtest1/
', pathtest.views.CBV1.as_view(), name='pathtest1'),]

视图函数示例

class CBV1(View):    def get(self, request, url_args, *args, **kwargs):        return render(request, 'pathtest.html', {'url_args': url_args})

5.1 URL 的命名空间

使用name参数可以为路由赋予命名空间,便于模板中引用。例如:

urlpatterns = [    path(r'pathtest1/', pathtest.views.CBV1.as_view(), name='pathtest1'),]

模板中使用:

{% url 'pathtest1' %}

自定义匹配规则

6.1 定义自定义转换器

URLS.py中定义自定义匹配规则,例如:

class NumLine:    regex = '[-0-9]+'    def to_python(self, value):        return str(value)    def to_url(self, value):        return str(value)from django.urls import register_converter, pathregister_converter('numline', NumLine, 'numline')urlpatterns = [    path(r'pathtest1/param', pathtest.views.CBV1.as_view(), name='pathtest1'),]

模板中使用

{% url 'pathtest1' '-0--' 1111 %}

路由文件的包含方式

7.1 子路由文件

使用include()函数包含子路由文件。例如:

urlpatterns = [    path(r'pathreg/', include('app.urls')),]

子路由文件中:

from django.urls import pathurlpatterns = [    path(r'index/', views.CBV1.as_view()),]

高级路由功能

8.1 自定义方法

View类中定义多种HTTP方法。例如:

from django.views.generic import Viewclass CBV1(View):    http_method_names = ['get', 'post']    def get(self, request):        return HttpResponse('GET请求')    def post(self, request):        return HttpResponse('POST请求')

将视图注册路由时:

urlpatterns = [    path(r'pathtest1/', CBV1.as_view()),]

命名空间优化

8.1 全局命名空间

project/urls.py中定义全局命名空间。例如:

from django.urls import include, pathurlpatterns = [    path(r'/', include('pathtest.urls'), name='pathtest'),]

8.2 应用命名空间

pathtest/urls.py中定义应用命名空间。例如:

from django.urls import path, includeurlpatterns = [    path('', CBV1.as_view(), name='pathtest1'),    path('index/', CBV2.as_view(), name='pathtest2'),]

通过reverse()函数可快速获取URL路径。例如:

reverse('pathtest:pathtest1')

进阶路由配置

9.1 正则表达式匹配

使用re_path()定义正则表达式路由。例如:

urlpatterns = [    re_path(r'^test/(?P\d+)$', views.test_views.view),    re_path(r'^test/', views.test_views.view, name='test_url'),]

通过以上配置,你可以灵活定义路由规则,支持正则匹配、参数传递和命名空间。路由系统是Django应用的核心部分,灵活配置能帮助你快速构建高效的Web应用。

转载地址:http://ntggz.baihongyu.com/

你可能感兴趣的文章
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
vue3+Element-plus icon图标无法显示的问题(已解决)
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
nodejs支持ssi实现include shtml页面
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>