Django的路由

453 阅读2分钟

URL结构

Uniform Resource Locator,标识互联网上的某个资源的地址 protocol://hostname[:port]/path[?query][# fragment]

protocol,传输协议,如http,https,ftp
hostname,服务器地址,
ip:port/域名
path, 访问路径,即路由 ?query,查询字符串
#fragment,锚点,用于跳到指定位置

如: http://127.0.0.1:8000/book/update/?title="机器学习" 在浏览器地址栏,输入上面地址,回车

django的处理流程:
1.根据配置文件中ROOT_URLCONF 找到主路由配置文件 主路由匹配/book/update/这个路径 当主路由匹配到book/(根据实际设定),则分发到book 应用,继续在应用下的路由配置文件中继续匹配剩下的内容
2. 若能完全匹配该URL,则执行相应的视图函数
3. 否则,返回404

示例代码

# 主路由 urls.py
from django.urls import path,include
from django.contrib import admin

urlpatterns = [
	path("admin/",admin.site.urls),
	#在URL开头匹配到book/,则分发到book应用
	path("book/",include("book.urls")),
]

# 分布式路由
# book/urls.py
from django.urls import path,include
from book.views import update
urlpatterns = [
	path("update/",update),#匹配到url,则执行对应的视图函数
]

#视图函数
#book/views.py
from django.http import HttpResponse
def update(request):
	#逻辑处理
	#调用模型类 读写数据
	return HttpResponse("更新成功")
	

path转换器

str,匹配除了 / 以外的非空字符串 path("v1/book/<str:name>")

urlpatterns = [
	path("v1/book/<str:name>",func)
]


#请求URL
#/v1/book/tom
#/v1/book/jack
#/v1/book/lucy
#最后的人名 为变化的字符串,为捕获到这部分内容,需使用str path转换器

#视图函数
#str path转换器匹配到的内容,以位置参数的方式,传给视图函数
def func(request,name):
	return HttpResponse("当前的人名:%s"%name)
	

同样有其他的path 转换器
int,匹配非负整数 path("v1/book/<int:number>")
slug,匹配任意的字母,数字,下划线组成 path("v1/book/<slug:sl>")
path,匹配非空字段,包括 /

正则匹配URL

from django.urls import re_path
from django.conf.urls import url

urlpatterns = [
	re_path("regex",view_func),
	url("regex",view_func),
]

练习

  1. 路由http://127.0.0.1:8000/3/add/5 浏览器请求以上地址,返回计算结果8计算结果8 的响应 功能说明 add, 3+5 sub,3-5 mul,3*5 div, 3/5

  2. 路由http://127.0.0.1:8000/birthday/2015/12/10 浏览器请求以上地址,返回201512102015年12月10日 的响应

代码实现 提取码:ys6w

上一篇:Django常见问题
下一篇:请求与响应