Django Day 2
Django处理URL请求
1.Django从配置文件中根据ROOT_URLCONF找到主路由文件
2.Django加载主路由文件中的urlpatterns(是一个包含很多路径的一个列表) 其中格式是path(文件名字,视图函数)
3.一次匹配其中的path路径,匹配到第一个后中断后续匹配
4.匹配成功->调用对应的视图函数;匹配失败->返回404.
视图函数
用于接收一个浏览器请求并通过HttpResponse对象返回相应的函数。即接请求反响应
语法
def view_xxx(requests[]):# 函数名 参数要是request
return HttpResponse #必须return这么一个对象
我们可以拿一个例子来说明这个用法,比如我们需要访问一个下图这种页面。
首先我们需要在urls.py中配置对应的路由
from django.contrib import admin
from django.urls import path
from . import views #从当前目录下导入views文件
urlpatterns = [
path('admin/', admin.site.urls),# 官网中已经写好的
path('page/2003/', views.page_2003_view),# path匹配的是http://127.0.0.1:8000/page/2003/
]
可以看到我们用了相对路径引用文件的方法,所以我们还需要新建一个views.py文件 .
就是相当于操作系统中的当前文档
文件内容如下:
from django.http import HttpResponse
def page_2003_view(request): # 参数一定是request
html = "<hl>这是第一个测试页面</h1>" #这是网页内的内容
return HttpResponse(html) #这是返回 一定返回的是HttpResponse对象
所以我们需要先配置urls.py中的路由,然后通过path转到相应的视图函数进行处理。
路由配置 -- path
导入
from django.urls import path
语法
path(route, views, name = None)
1.route:匹配请求的路径
2.views:指定路径所对应的视图函数 此处函数不要加括号
3.name:地址的别名,在开发时方便书写。
path转换器
现在有一个需求是需要做100个上面例子给出的网页,我们应该如何去做?难道要一层层的复制吗?这显然是不可取的,django中为我们提供了path转换器
语法
<转换器类型:自定义名>
例子
path('page/<int:page>', views.xxx) #views是视图函数
如果转换器匹配到了对应的数据,则将数据按照关键字传参的方式传递给视图函数
转换器类型
slug:匹配任意由ASCII字母或数字以及连字符和下划线组成的短标签(详情请看leetcode)
str:匹配除'/'以外的非空字符串
path:匹配非空字符串包括'/'
总结
我们可以通过path转换器得到动态页面,通过int和str两种转换器可以得到很多不同的动态页面。
比如我们可以用这个技术来实现一个网页计算器,我们需要匹配的网页时http://127.0.0.1:8000/page/num1/op/num2。其中num1是其中第一个数,op是操作符,num2是第二个数。
我们先在urls的path中加入:
path('page/<int:add1>/<str:op>/<int:add2>', views.op_view) #配置的是http://127.0.0.1:8000/1/add/2
然后通过关键字传参些视图函数
def op_view(request, add1, op, add2):
if(op == "add"): html = add1 + add2
elif(op == "sub"): html = add1 - add2
elif(op == "multiply") :html = add1 * add2
else:html = add1 / add2
return HttpResponse(str(html)) #注意HttpResponse中的参数一定得是一个字符串哦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!