一、路由系统
路由先从setting.py
文件中指定的ROOT_URLCONF
主路由文件中的urlpatterns
从上往下依次进行匹配,匹配到后返回相应视图
或匹配到include,将剩余字符发送给其进行继续匹配。
1.1 路由文件位置
主路由文件:默认项目根目录下urls.py
"""mysite URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.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'))
"""
这个文件是在项目目录下setting.py
中指定的,比如:
ROOT_URLCONF = 'mysite.urls'
其它app的路由文件则可以由此主路由文件包含:
from django.contrib import admin
from django.urls import include,path
urlpatterns = [
path('learn/', include('learn.urls')),
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
1.2 路由文件格式
路由是视图的路由,由访问者访问的url进行匹配,定位到具体的View视图。
视图可以直接渲染字符串进行响应,也可以渲染模版进行响应。
而视图一般有三种:
先import相应views文件from my_app import views
,然后添加urlpatternspath('', view.home, name='home')
先引入相应类from other_app.views import Home
,然后添加urlpatternspath('',Home.as_view(), name='home')
先引入include()
函数from django.urls import include, path
,然后添加urlpatternspath('blog/', include('blog.urls'))
注:匹配支持正则表达式。
当设置include时,可以include文件,也可以include其他序列,比如:
from django.urls import include, path
from apps.main import views as main_views
from credit import views as credit_views
extra_patterns = [
path('reports/', credit_views.report),
path('reports/<int:id>/', credit_views.report),
path('charge/', credit_views.charge),
]
urlpatterns = [
path('', main_views.homepage),
path('help/', include('apps.help.urls')),
path('credit/', include(extra_patterns)),
]
二、接收额外参数
2.1 URL传值
比如说我们URLConf添加一个int值的id
参数:
参数格式:<类型:值>
符号 | 说明 |
---|---|
str | 字符串 |
int | 整数 |
slug | 对应ascii所组成的字符 |
uuid | 对应uuid格式字符串 |
path | 对应完整URL路径 |
path('about/<int:id>/', views.about, name='about'),
然后在Views中接收这个参数:
def about(request, id):
return render(request, 'learn/aboutus.html', {'id':id})
之后我们在前端使用这个参数:
<h2>This is about page{{ id}}!</h2>
访问效果:
2.2 POST传值
post 传值的话,是在html中使用表单,
<input type="text" name="<para_name>">
使用的时候在views.py中方法的request方法接收:
def getpara(request):
name = request.POST['<para_name>']
然后就可以使用这个值了。
2.3 传统(get/post)传值
像传统上的?id=xx&name=na
这种方式的传值django会忽略。