浏览器传参,子路由,CBV
浏览器向后端传递数据
第一种方式:普通传参(不常用)
-
浏览器中输入数据
-
配置路由中定义参数接收数据
urlpatterns = [
path('admin/', admin.site.urls),
path("demo/<name>/",demo), # <name>:参数,接收数据
# 若数据是整数的话,需要加上int转换为整型 例:<int:num>
]
- 在视图函数中也需要传参
from django.http import HttpResponse
def demo(request,name): # name:参数,注意:这里的参数名必须要和路由中的参数名保持一致
# 打印一下这个参数,看是否和浏览器输入的数据一致
print(name)
# 将参数再返回到浏览器中
return HttpResponse(name)
第二种方式:利用get方式获取(常用)
-
浏览器中输入数据
**注意:输入的格式,?键名=值 (键名:参数名 值:**数据)
若是两个参数的话需要用 & 来连接 例如:name=迪丽热巴 &age=29
-
在视图函数中接收数据
def demo2(request): # 接收数据,参数名要和浏览器中的参数名一致 name=request.GET.get('name') # 将参数再返回到浏览器中 return HttpResponse(name)
区别:与第一种方式不同,这种方式不需要再配置路由中接收数据
子路由与主路由
子路由和主路由介绍:子应用中是没有子路由的,需要提前将主路由复制到子应用中变为子路由
在主路由中关联子路由
# 在配置子路由前需要导一个include包
from django.urls import path,include
from users.views import *
urlpatterns = [
path('admin/', admin.site.urls),
# 配置users子应用的子路由
path("users/",include("users.urls"))
]
# 若是关联上了子路由,主路由中可以不用写那么多路由,全在对应的子路由中写就可以
子路由配置该子应用中的视图函数
from django.contrib import admin
from django.urls import path
from users.views import *
urlpatterns = [
# 和主路由中一样写
path("demo2/", demo2),
]
注意:如果是在子路由中配置路由,在浏览器中需要加上子应用的名字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRjrDGak-1612188331764)(D:\作业\python\P4\笔记\image\day02\子路由访问浏览器.PNG)]
FBV和CBV
-
基于函数的视图,被称为 FBV(不常用)
def demo2(request): return HttpResponse("FBV")
urlpatterns = [ path("demo2/", demo2), ]
-
基于类的视图,别称为CBV(常用)
# 用CBV的方式需要先导包
from django.views import View
# CBV(常用):以类的方式存在
class demo3(View): # View:参数,固定的
# 需要用get请求的方式
def get(self,request):
# 和FBV一样传参,接收参数
name1=request.GET.get("name1")
return HttpResponse(name1)
# 用CBV可以定义多个def,实现多个效果
urlpatterns = [
# CBV的配置路由
path("demo3/",demo3.as_view())
#.as_view():是固定的不可改变 针对不同的请求方式,分发到 视图的具体方法中
]
```python
urlpatterns = [
# CBV的配置路由
path("demo3/",demo3.as_view())
#.as_view():是固定的不可改变 针对不同的请求方式,分发到 视图的具体方法中
]