一、URL
Uniform Resource Locator:统一资源定位符
用来表示互联网上某个资源的地址
一般语法格式:protocol://hostname[:port]/path[?query][#fragment]
protocol:协议
hostname:域名
port:端口 【默认80】
path:路由 【精确网站下某一页面】
?query:精确查找
#fragment:信息片段,快速定位网页内某一标题栏
二、Django如何处理URL请求
例如:http://127.0.0.1:8000/page/Yddd
1.Django从配置文件中根据ROOT_URLCONF找到主路由文件,默认在同名目录下urls.py
2.Django加载主路由文件中的urlpatterns变量(列表)-包含很多路由。(引用官方文档例)
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
3.依次匹配urlpatterns中的path,匹配到第一个合适的中断后续匹配
4.匹配成功 - 调用对应的视图函数处理请求,返回响应
5.匹配失败 - 返回404响应
三、视图函数
用于接收一个浏览器请求(HttpRequest对象)并通过HttpResponse对象返回响应的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容给浏览器。
1.语法:
def xxx_view(request[,其它参数...]):
return HttpResponse对象
第一个参数必须是request
必须return HttpResponse对象
2.样例
<项目同名文件夹下>/views.py
from django.http import HttpResponse
def pageYddd_View(request):
html = "<h1>这是第1个页面</h1>"
return HttpResponse(html)
四、路由配置
1.path() 函数
导入 - from django.urls import path
语法 - path(route, views, name=None)
route:字符串类型,匹配的请求路径
views:指定路径所对应的视图处理函数的名称
name:为地址起别名,在模板中地址反向解析时使用 (为第一个参数起别名)
2.path 转换器
语法:<转换器类型:自定义名>
作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数。
例子:path('page/<int:page>', views.xxx)
3.re_path()函数
re:正则表达式,在url匹配中可以使用正则表达式进行精确匹配。
语法:re_path(reg,view,name=xxx)
正则表达式为命名分组模式(?P<name>pattern);匹配提取参数后用关键字传参方式传递给视图函数。
# 正则表达式匹配 http://127.0.0.1:8000/整数1/操作符/整数2 ^:开始 , $:结束
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$', views.cal2_view),
练习:匹配如下网址:http://127.0.0.1:8000/birthday/年4/月2/日2
输出为:您的生日是:XXXX年XX月XX日
# http://127.0.0.1:8000/birthday/年4/月2/日2
re_path(r'^birthday/(?P<y>\d{4})/(?P<m>\d{1,2})/(?P<d>\d{1,2})$', views.birthday_view),
# http://127.0.0.1:8000/birthday/月2/日2/年4
re_path(r'^birthday/(?P<m>\d{1,2})/(?P<d>\d{1,2})/(?P<y>\d{4})$', views.birthday_view)