说明:
1.笔记来源于B站up主达内官方和千锋教育的教学视频、一些书籍以及自己的总结
2.Django官方参考文档:https://docs.djangoproject.com/zh-hans/3.2/
一、URL和视图函数
路由地址格式:
protocol://hostname:port/path?query#[fragment]
1.Django如何处理URL请求
- Django从配置文件settings.py中,根据ROOT_URLCONF找到主路由文件urls.py
- Django加载主路由文件中的urlpatterns变量(包含很多的路由数组)
- 依次匹配urlpatterns中的path,匹配到第一个合适目标后中断匹配
- 匹配成功——调用对应的视图函数处理请求,返回响应
- 匹配失败——返回404
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('page/2022/', views.page_2022)
]
2.视图函数
用于接收浏览器请求(HttpRequest对象)并通过HttpResponse对象返回响应的函数
def xxx_view(request[, 其他参数]):
return HttpResponse对象
# 例子: file:<项目同名文件夹>/views.py
from django.http import HttpResponse
def page1_view(request):
html = '<h1>这是一个标题</h1>'
return HttpResponse(html)
3.path()函数
导入:from django.urls import path
语法:path(route, views, name-None)
参数:
1. route:字符串类型,匹配的请求路径
2. views:指定路径所对应的视图处理函数的名称
3. name:为地址起别名,在模板中地址反向解析时使用
二、转换器
1.path转换器
- 作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
- 语法:
<转换器类型:自定义名>
转换器类型
类型 | 作用 | 例子 |
---|---|---|
str | 匹配除了’/'之外的非空字符串 | /users/str:username匹配/users/pop |
int | 匹配0或任何正整数,返回一个int | /page/int:page匹配/page/100 |
slug | 匹配任意由ASCII字母、数字、连字符和下划线组成的短标签 | /detail/slug:slg匹配/detail/this-is-django |
path | 匹配非空字段,包括路径分隔符’/’ | /users/path:ph匹配/users/goods/a/b/c |
用法
# urls.py
path('page/<int:pg>', views.pagen_view)
# views.py
def pagen_view (request, pg):
html = '这是编号为%d的网页'%(pg)
return HttpResponse(html)
2.re_path转换器
- 在url匹配过程中可以使用正则表达式进行精准匹配
- 语法:re_path(reg, view, name=xxx)
- 正则表达式为命名分组模式(?Ppattern);匹配提取参数后用关键字传参方式传递给视图函数
用法
# 要求
## 1.可匹配http://127.0.0.1:8000/20/mul/40
## 2.不可匹配http://127.0.0.1:8000/200/mul/400
# urls.py
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$', views.cal_view)
# views.py
def cal_view(request, x, op, y):
html = 'X:%s op:%s y:%s'%(x, op, y)
return HttpResponse(html)