开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
一、URL 介绍
URL定义
URL 即统一资源定位符 Uniform Resource Locator。URL 可以用来表示互联网上某个资源的地址。
互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL的一般语法格式为:
protocol :// hostname[:port] / path [?query][#fragment]
复制代码
https://juejin.cn/post/7170369750277554213#heading-3
复制代码
URL 地址中包含了以下信息:
- protocol(协议)
- http 通过 HTTP 访问该资源。 格式
HTTP://
- https 通过安全的 HTTPS 访问该资源。 格式
HTTPS://
- file 资源是本地计算机上的文件。格式:
file:///
- ...
- http 通过 HTTP 访问该资源。 格式
- hostname(主机名)
- 是指存放资源的服务器的域名系统(DNS) 主机名、域名 或 IP 地址。
- port(端口号)
- 整数,可选,省略时使用方案的默认端口;
- 各种传输协议都有默认的端口号,如http的默认端口为80。
- path(路由地址)
- 由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。路由地址决定了服务器端如何处理这个请求
- query(查询)
- 可选,用于给动态网页传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。
- fragment(信息片断)
- 字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。
plus: [] 代表其中的内容可省略
Django 如何处理一个 URL 对应的请求
以浏览器请求 http://127.0.0.1:8000/page/2003/ 为例,Django 的处理过程如下:
- Django 从配置文件中根据 ROOT_URLCONF 找到主路由文件;默认情况下,该文件在项目同名目录下的urls; 例如 mysite2/mysite2/urls.py
- Django 加载 主路由文件中的 urlpatterns 变量
- 依次匹配 urlpatterns 中的 URL, 匹配到第一个合适的中断后续匹配
- 匹配成功 - 调用对应的视图函数处理请求,返回响应
- 匹配失败 - 返回404响应
主路由 urls.py
中配置的路由如下:
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls)
path('page/2003/', views.page_2003),
path('page/2004/', views.page_2004),
]
复制代码
视图函数(view)
视图函数是用于接收一个浏览器请求并通过 HttpResponse 对象返回数据的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的内容给浏览器.
视图处理的函数的语法格式如下:
def xxx_view(request[, 其它参数...]):
return HttpResponse对象
复制代码
视图函数包含了:
- 参数:
- request用于绑定HttpRequest对象,通过此对象可以获取浏览器的参数和数据
- 返回值
- HttpResponse的对象;Django会提供一系列的response对象;
视图处理函数 views.py
示例如下:
# file : <项目同名文件夹下>/views.py
from django.http import HttpResponse
def index_view(request):
html = "<h1>这是第1个页面</h1>"
return HttpResponse(html)
复制代码
二、Django 路由配置
根据 Django 处理 URL 的过程,Django 在 settings.py 中的ROOT_URLCONF
指定了主路由配置列表urlpatterns的文件位置
urls.py 主路由配置文件
# file : <项目同名文件夹>/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
... # 此处配置主路由
]
复制代码
path() 函数
path()
用于描述路由与视图函数的对应关系,所属模块为 django.urls
path()
函数的使用语法:
path(route, views, name=None)
- 参数:
- route: 字符串类型,匹配的请求路径
- views: 指定路径所对应的视图处理函数的名称
- name: 为地址起别名,在模板中地址反向解析时使用
path 转换器
path 转换器可以将数据按照关键字传参的方式传递给视图函数,使用方式为 <转换器类型:自定义名>
转换器 | 效果 | 案例 |
---|---|---|
str | 匹配除了 '/' 之外的非空字符串 | "v1/users/str:username"匹配 /v1/users/guoxiaonao |
int | 匹配0或任何正整数。返回一个 int | "page/int:page" 匹配 /page/100 |
slug | 匹配任意由 ASCII 字母或数字以及连字符和下划线组成的短标签 | "detail/slug:sl" 匹配 /detail/this-is-django |
path | 匹配非空字段,包括路径分隔符 '/' | "v1/users/path:ph"匹配 /v1/goods/a/b/c |
re_path() 函数
re_path()
函数在url 的匹配过程中可以使用正则表达式进行精确匹配
语法格式如下:
- re_path(reg, view, name=xxx)
- 正则表达式为命名分组模式(?P<name>pattern)
;匹配提取参数后用关键字传参方式传递给视图函数
# file : <项目同名文件夹>/urls.py
# 以下示例匹配
# 可匹配 http://127.0.0.1:8000/20/mul/40
# 不可匹配 http://127.0.0.1:8000/200/mul/400
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal_view),
]
复制代码