博客
关于我
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/

你可能感兴趣的文章
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
MySQL 常见的 9 种优化方法
查看>>
MySQL 常见的开放性问题
查看>>
Mysql 常见错误
查看>>
mysql 常见问题
查看>>
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
查看>>
MySQL 快速创建千万级测试数据
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
MySql 手动执行主从备份
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>