Django-视图和URL

视图

后台管理页面做好了,接下来就要做公共访问的页面了。当我们刚刚在浏览器中输入 http://127.0.0.1:8000/admin/ 之后,浏览器显示出了后台管理的登录页面,那有没有同学想过这个服务器是怎么给我们找到这个页面并返回呢?/admin/是我们想要请求的页面,服务器在收到这个请求之后,就一定对应着一个处理动作,这个处理动作就是帮我们产生页面内容并返回回来,这个过程是由视图来做的。

对于django的设计框架MVT,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者。

使用视图时需要进行两步操作:

		* 1.定义视图函数
		* 2.配置URLconf
1.定义视图

视图就是一个Python函数,被定义在views.py中。

视图的必须有一个参数,一般叫request,视图必须返回HttpResponse对象,HttpResponse中的参数内容会显示在浏览器的页面上。
打开views.py文件,定义视图index如下

from django.http import HttpResponse

def index(request):
	# request必须写
    return HttpResponse("index")
2.配置URLconf

查找视图的过程
请求者在浏览器地址栏中输入url,请求到网站后,获取url信息,然后与编写好的URLconf逐条匹配,如果匹配成功则调用对应的视图函数,如果所有的URLconf都没有匹配成功,则返回404错误。

一条URLconf包括url规则、视图两部分:

  • url规则使用正则表达式定义。
  • 视图就是在views.py中定义的视图函数。

需要两步完成URLconf配置:

  • 1.在应用中定义URLconf
  • 2.包含到项目的URLconf中

在urls.py文件,定义代码如下:

from django.urls import path, re_path
from . import views
urlpatterns = [
    path('', views.index),
    re_path(r'^$',views.index),
]

path函数的参数

  1. route:字符串类型,匹配的请求路径
  2. views:指定路径所对应的视图处理函数的名称
  3. name: 为地址起名,在模板中地址反向解析时使用

re_path函数是按照正则表达式匹配的模式包含了一个尖号(^)和一个美元符号($)。这些都是正则表达式符号,并且有特定的含义: 上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。

你大多数的URL模式会以^开始、以$结束,但是拥有复杂匹配的灵活性会更好。

你可能会问:如果有人申请访问/hello(尾部没有斜杠/)会怎样。 因为我们的URL模式要求尾部有一个斜杠(/),那个申请URL将不匹配。 然而,默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。 (这是受配置文件setting中APPEND_SLASH项控制的。)

如果你是喜欢所有URL都以’/’结尾的人(Django开发者的偏爱),那么你只需要在每个URL后添加斜杠,并且设置”APPEND_SLASH”为”True”. 如果不喜欢URL以斜杠结尾或者根据每个URL来决定,那么需要设置”APPEND_SLASH”为”False”,并且根据你自己的意愿来添加结尾斜杠/在URL模式后.
APPEND_SLASH 为True 你访问时没写/会自动帮你加上

3.处理URL情求
  • 浏览器 地址栏 -> http://127.0.0.1:8000/page
  1. Django 从配置文件中根据ROOT_URLCONF找到主路由文件;默认情况下,该文件在项目同名文件夹下的urls.py中
  2. Django加载主路由文件中的urlpattrens 变量
  3. 从上往下一次匹配urlpatterns中的path,匹配到第一个合适的中断后续匹配
  4. 匹配成功-调用对应的视图函数请求,返回响应
  5. 匹配失败 - 返回404响应
4. path转换器

语法: <转换器类型:自定义名>
作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
例子: path(‘page/int:page’, views.xxx)

转换器类型作用样例
str匹配除了’/'之外的非空字符串"v1/users/str:username"匹配 /v1/users/guoxiaona
int匹配或任何正整数。返回一个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
5. re_path

re_path函数是按照正则表达式匹配的模式包含了一个尖号(^)和一个美元符号($)。这些都是正则表达式符号,并且有特定的含义: 上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。
如果 re_path给视图函数传参的话需要用分组命名的方法:

?P<组名>

关键字参数,视图中参数名必须和正则表达式组名一致.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值