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

你可能感兴趣的文章
nginx负载均衡的五种算法
查看>>
Nginx运维与实战(二)-Https配置
查看>>
Nginx配置ssl实现https
查看>>
Nginx配置TCP代理指南
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
NHibernate学习[1]
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>