Django - 视图层

Django如何处理请求

当一个用户请求一个页面时, Django根据以下逻辑执行操作

  1. 决定要使用的根URLconf模块 通常是ROOT_URLCONF设置的值, 但是如果传入的HttpRequest对象具有urlconf属性, 则其值会代替ROOT_URLCONF设置.
  2. 加载该模块并寻找可用的urlpatterns.
  3. 依次匹配每个URL模式, 在与请求的URL相匹配的第一个模式停下来.
  4. 导入并调用匹配行中给定的视图

path转换器

str : 匹配任何非空字符串, 但不包含斜杠, 如果没有专门指定转换器, 默认使用该转换器
int : 匹配0和正整数, 返回一个int类型
slug : url在最后的一部分解释性字符
uuid : 匹配一个uuid格式的对象.
path : 匹配任何非空字符串. 可以包含路径分隔符’/’ .

自定义path转换器

path转换器其实就是一个类, 包含以下成员和属性

  • 类属性regex : 一个字符串形式的正则表达式属性.
  • to_python(self, value) 方法 : 一个用来将匹配到的字符串转换为想要的数据类型, 并传递给视图函数
  • to_url(self, value) 方法 : 将Python数据类型转换为一段url的方法,

例如 : 新建一个converters.py文件, 与urlconf同目录

class FourDigitYearConverter:
	regex = '[0-9]{4}'
	
	def to_python(self, value):
		return int(value)
	
	def to_url(self, value):
		return '%04d' % value

在URLconf中使用register_converter注册它 :

from django.urls import register_converter, path
from . import converters, views

register_converter(converters.FourDigitYearConverterm 'yyyy')

urlpatterns = [
	path('articles/<yyyy:year>/', views.year_archive)
]

使用正则表达式

使用re_path()方法.

匹配部分

请求的URL被看做是一个普通的Python字符串, URLconf在其上进行匹配时将不包括GET或POST请求方式的参数以及域名
例如, 在https://www.myblog.com/myapp/的请求中, URLconf将查找 myapp/
https://www.myblog/myapp/?page=3 的请求中, URLconf也将查找 myapp/

指定视图参数的默认值

from django.urls import path
from . import views

urlpatterns = [
	path('blog/', views.page),
	path('blog/page<int:num>/', views.page),
]
# 视图
def page(request, num=1):
	pass

上面的URL模式指向同一个视图views.page. 但是第一个模式不会从URL中捕获任何值, 如果第一个模式匹配, page()函数将使用num参数的默认值 “1” , 如果第二个模式匹配, page()将使用捕获的num值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值