Django(五)-Django路由url
前面讲到了Django项目在创建之后的默认文件夹中的文件,比如我们在创建一个名为“djang1”的项目后(如果不会创建Django项目,请看“Django(一)-Django环境的搭建”),我们打开Django为我们创键的文件,会发现里面有一个叫“django1”的文件夹,打开后,会看到如下文件:
django1
__init__.py
settings.py
urls.py
wsgi.py
本篇就是讲url的相关内容
一、添加一个最基础的路由
我们打开urls.py文件,看一下这个文件里面的内容:
"""fresh_shop URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
基本上大家新建的django项目中默认创建的urls.py文件都是这样,这里面的注释大家可以看一下,大概就是讲解这个东西的相关配置,在这下面的urlpatterns变量就是设置路由的地址,比如Django默认为我们写的path(‘admin/’, admin.site.urls),这个是Django自带的一个管理系统的路由,在我们进行第一次迁移之后,运行Django,在地址后面输入admin就可以进入Django自带的系统(这儿就不细讲了)。
所以,最简单的路由配置格式就是:
path('路由/', 视图文件),
比如,当我们创建了一个名为app的应用时,在app下的views视图文件下创建一个名为“index"的函数时,路由配置就是:
path('index/', app.views.index),
当然,这个地方的app.views.index需要导包。
这样就添加了一个最简单,也是最基础的路由,我们就可以在地址中通过访问”index“查看这个视图。
二、路由的相关参数
1、变量为path时
当使用的是path时,在路由中我们可以传相关参数。比如我们在访问一些网址时会发现,有的网址后面有一串数字,字母什么的,这就是路由中传过去的一些参数。具体参数如下表(都以"/index/"为例):
参数类型 | 设置格式 | 使用方式 |
---|---|---|
整型 | ‘index/<int:变量名>/’ | /index/参数值/ |
字符串 | ‘index/<srt:变量名>/’ | /index/参数值/ |
uuid | ‘index/<uuid:变量名>/’ | /index/参数值/ |
路径 | ‘index/<path:变量名>/’ | /index/参数值/ |
当接收的参数类型为整数时,大多适用在传相关ID的地方,比如商城系统中,查看单个商品信息时,往往需要传商品对应的ID,从而在数据库中查询商品的具体信息,在这儿就比较适用。在渲染页面的时候,只需要在视图函数的参数中接收对应参数就可以使用了。
字符串类型、uuid类型与整数使用的方式差不多,只是各自的使用场景不太一样,根据相应的场景,灵活选用参数才行。
在这儿需要注意一下路径类型,也就是path时,它可以接收一切类型的数据,只要能显示出来的字符,它都可以接受,所以在使用的时候需要注意的地方比较多。大多时候,前面三种类型就足够了。
2、变量为re_path时
当变量是re_path,这个与path使用的方式,以及各式差不多,只是需要导re_path这个包。
不知道大家看到re会不会想到正则。没错,这个里面参数没有固定的类型,就是依靠正则去进行匹配。我们来看看怎么使用的:
一个最简单的路由:
re_path('index/(\d+)/', app.views.index),
这个就是一个匹配数字的路由,在进行访问的时候也和整型差不多,地址:/index/数字/ 进行访问。
re_path传多个参数:re_path(‘params/(\d+)/(\d+)/(\d+)’, app.views.index),注意:接收方法中,接收参数的顺序和路由器中定义的正则表达式的顺序一致。
还可以传多个时间参数:re_path(‘params/(?P\d+)/(?P\d+)/(?P\d+)/’, app.views.index),注意:已经定义了多个参数的参数名,接收数据时,对于位置没有影响。