Django 笔记3 – URL


Django 系列笔记是笔者学习、实践使用 Django 的相关笔记,大量参考了知了课堂的《Django零基础到项目实战》教程。

参考文档:
Django官方文档(英文)
Django 中文文档


一、URL


1、URL

URL 是 Uniform Resource Locator的简写,统一资源定位符。对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

2、URL 格式

scheme://host:port/path/?query-string=xxx#anchor
  • scheme:访问的协议,一般为http或者https以及ftp等
  • host:主机名,域名,比如www.baidu.com
  • port:端口号,当你访问一个网站的时候,浏览器默认使用80端口。
  • path:查找路径,比如:www.jianshu.com/trending/now ,后面的 trending/now 就是path
  • query-string:查询字符串,比如:www.baidu.com/s?wd=python ,后面的 wd=python 就是查询字符串。
  • anchor:锚点,前端页面定位标记
  • URL中的所有字符都是ASCII字符集,如果出现非ASCII字符,比如中文,浏览器会进行编码再进行传输

二、URL 分发


1、URL 映射配置:在 urls.py 的 urlpatterns 列表中配置

# 如果需要配置 URL 映射,需要导入相关的视图文件
from front import viewsurlpatterns = [# 默认的 URL 映射,后台管理入口# 如果只有默认的 URL 映射,Django 会提供一个默认的主页path('admin/', admin.site.urls),# 自己配置 URL 映射,即把首页映射到,并且可以给该 URL 取个别名path('', views.index, name='index'),
]

2、URL 中添加参数

url 中包含了一些参数需要动态调整,比如获取某本书的url。

path 中带参数:

# url 格式 .../book/book_id/---------------------------------------------
# url 映射# 根据传入的 id 查找书本,格式<param>
path('book/<book_id>/', views.book_detail)
# 可以设置参数的数据类型,格式<type:param>,type 可以是 int、str 等
path('book/<int:book_id>/', views.book_detail)----------------------------------------------
# 对应的视图函数# 函数中必须有 book_id 这个参数,且必须和 url 中的名称一样
#
def book_detail(request,book_id):# 可以根据 book_id 进行数据库查询后返回具体的内容text = "这本书是:%s" % book_idreturn HttpResponse(text)

query-string 中带参数:

# url 格式 .../book/detail/?id=1---------------------------------------------
# url 映射 path('book/detail/', views.book_detail)----------------------------------------------# 对应的视图函数
def book_detail(request):# 获取查询字符串中的参数book_id = request.GET.get("id")text = "这本书是:%s" % book_idreturn HttpResponse(text)

默认参数:

# url 映射# 两个 path 映射到同一个视图函数
urlpatterns = [path('book/', views.book_detail),path('book/<int:num>/', views.book_detail),
]----------------------------------------------
# 视图函数# 视图函数中可以为 num 指定默认参数,这样当 url 中没有 num 这个参数时会使用默认值
def book_detail(request, num=1):

3、URL 映射包含 app 的 urls 模块

项目的 urls 配置:

from django.urls import path,includeurlpatterns = [# 即把包含 index/ 的 URL,都映射到 index 模块中的 urls.py 中的 urlpatterns# URL 不需要写主机名和端口号path('index/',include("index.urls"))
]

app 的 urls 配置:

from django.urls import path,includeurlpatterns = [# app 中的 urls.py 中的 urlpatterns 的 path 直接从项目映射的 url 后面开始# 例如:下面的 path 映射的是 'index/first/path('first/', views.first)
]

三、URL 匹配


1、path 函数

path(route,view,name=None,kwargs=None)
  • route参数:url的匹配规则。这个参数中可以指定url中需要传递的参数,比如在访问文章详情页的时候,可以传递一个id。传递参数是通过 <> 尖括号来进行指定的。并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的id都是int类型,那么可以这样写< int:id>,以后匹配的时候,就只会匹配到id为int类型的url,而不会匹配其他的url,并且在视图函数中获取这个参数的时候,就已经被转换成一个 int 类型了。常用的类型:

    • str:非空的字符串类型。默认的转换器。但是不能包含斜杠。
    • int:匹配任意的零或者正数的整形。到视图函数中就是一个int类型。
    • slug:由英文中的横杠-,或者下划线_连接英文字符或者数字而成的字符串。
    • uuid:匹配uuid字符串。
    • path:匹配非空的英文字符串,可以包含斜杠。
  • view参数:可以为一个视图函数或者是类视图.as_view()或者是django.urls.include()函数的返回值。
  • name参数:这个参数是给这个url取个名字的,这在项目比较大,url 比较多的时候用处很大。
  • kwargs参数:有时候想给视图函数传递一些额外的参数,就可以通过kwargs参数进行传递。这个参数接收一个字典。传到视图函数中的时候,会作为一个关键字参数传过去。
    path('blog/<int:xx>/', views.xxx, {'key': 'value'})
    

2、re_path 函数:

re_path 使用正则表达式进行 url 匹配,re_path 的 route参数可以为一个正则表达式

# re_path 函数
re_path(route,view,name=None,kwargs=None)# route 参数格式
r'.../(?P<year>[0-9]{4})/'
  • r:表示这个字符串是一个原生字符串
  • ?P< name>:正则表达式的名称为 name
  • <>后面:正则表达式

三、URL 反转


已知视图函数,反转得到它的 url

1、url反转:reverse()

# 格式
reverse('命名空间')# 如果有应用/实例命名空间,应当指明
reverse('命名空间:命名空间')# 如果 url 中需要传递参数,可以通过kwargs来传递参数
reverse('命名空间:命名空间', kwargs={'key':value})# reverse 反转url 的时候不区分GET请求和POST请求
# 只能手动添加查询字符串的参数
reverse('命名空间:命名空间') + "?q=xxx/"

2、自定义 URL 转换器

步骤:

  • 定义一个类
  • 在类中定义一个属性 regex 用来保存 url 转换器规则的正则表达式
  • 实现 to_python(self,value) 方法,将 url 中的值转换后传给视图函数
  • 实现 to_url(self,value) 方法,url 反转时将传进来的参数转换后,拼接成一个正确的url
  • 将定义好的转换器,注册到django中

示例:

# 匹配四个数字年份的 url 转换器# 1. 定义一个类
class FourDigitYearConverter:# 2. 定义一个正则表达式regex = '[0-9]{4}'# 3. 定义to_python方法def to_python(self, value):return int(value)# 4. 定义to_url方法def to_url(self, value):return '%04d' % value     # 5. 注册到django中
from django.urls import register_converter
register_converter(converters.FourDigitYearConverter, 'convert')# 使用
path('book/<convert:year>/'

GOOD LUCK!


Django 笔记3 -- URL相关推荐

  1. Django 笔记4 -- 模板

    Django 笔记4 – 模板 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django官 ...

  2. Django 笔记2 -- Django 项目

    Django 笔记2 – Django 入门 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: ...

  3. Django笔记-5-视图

    2019独角兽企业重金招聘Python工程师标准>>> Django笔记-5-视图 概述 作用 视图接受web请求, 并相应web请求; 本质 视图就是一个Python中的函数 相应 ...

  4. Django笔记(1)

    首先,安装Python和django,安装完成后,就可以开始创建项目. 1.新建项目: 运行命令:django‐admin.py startproject mysite mysite是项目名称. 如果 ...

  5. Django笔记总结

    1.web框架的本质 web通信流程 web我们这里指的就是通过浏览器去访问服务端,请求页面或者数据的通信方式,属于B/S架构.就是我们常见的网站.浏览器与服务端的通信流程:浏览器客户端发送一个请求信 ...

  6. Django 笔记6 -- 多表查询

    Django 笔记6 – 多表查询 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

  7. Django 笔记5 -- 数据库

    Django 笔记5 – 数据库 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...

  8. Django 笔记1 -- 环境搭建

    Django 笔记1 – 环境搭建 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

  9. Django视图、URL、模版简介

    Django视图.URL.模版简介 文章目录 Django视图.URL.模版简介 一.视图 1.简介 2.使用视图时需要进行两步操作: 3.定义视图 二.配置URLconf 1.查找视图的过程 2.U ...

最新文章

  1. Lintcode108 Palindrome Partitioning || solution 题解
  2. 36张图详解网络基础知识
  3. 用户画像从0到100的构建思路
  4. javascript调用父窗口(父页面)的方法
  5. 十六、Redis三种特殊类型之三Bitmap
  6. flutter从0到1构建大前端应用 pdf_推荐前端热门GitHub代码库「值得收藏」
  7. 中兴的芯片,到底什么水平?
  8. typecho支持html,为Typecho文章增加HTML标签支持
  9. 介绍4个大神常用而你不常用的python函数--assert,map,filter,reduce
  10. 卸载北信源内网桌面监控的完全攻略
  11. Javase MINA框架
  12. java 斜率求角度_计算两条线之间的角度而不必计算斜率? (Java)
  13. Leetcode str
  14. 51单片机C语言访问外ram,C51中访问外部RAM的方法
  15. excel2003打开后找不到工作表
  16. js面向数据编程(DOP)一点分享(转载)
  17. 积分与微分电路 (转)
  18. 计算机科学导论考试A卷试题,计算机科学导论试题a1.doc
  19. 通过修改mateMask的nonce值修复replacement transaction underpriced的问题
  20. Ubuntu解决播放wmv格式视频

热门文章

  1. 2018~2019-11 20165107 网络对抗技术期末免考 Exp10 Final Powershell学习应用与渗透实践...
  2. linux在执行时提示无此文件的一个处理办法
  3. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
  4. Android源码学习(3) Handler之MessageQueue
  5. HDU5593 ZYB's Tree 树形DP +分治
  6. iOS xocde编译报错 NSObjCRuntime.h
  7. MVC与三层架构的区别
  8. AS3中 is,as,typeof的区别 .
  9. spring核心:bean工厂的装配 1
  10. c语言用double最大,C语言里double类型的最大值和最小值是多少?