目录

1.URL有名分组和无名分组

2.FBV和CBV

URL有名分组和无名分组

有名分组

使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图

urls.py

from app01 import views
url('^book/(?P<year>\d)/(?P<month>\d+)', views.book)

views.py

有名分组为关键字传参,与参数位置无关

'''request下的一些属性和方法'''
def book(request, month,year): # 参数位置随意
request.GET # 包含所有HTTP GET参数的类字典对象 <QueryDict: {}>
request.POST # 包含所有HTTP POST参数的类字典对象 <QueryDict: {}>
request.method # 请求中使用的HTTP方法的字符串表示 全大写表示 GET
request.path # 返回用户访问url 不包括域名 /book/2020/12
request.path_info # 返回用户访问url 不包括域名 /book/2020/12
request.get_full_path() # /book/2020/12
request.body # 请求体,byte类型 request.POST的数据就是从body里面提取到的 b'' '''在view中定义的视图函数,可以返回如下几种'''
return HttpResponse('xxx') # 一般后面加字符串
return render(request, 'book.html',{'title':'xx'}) # title这个名字随便起的,html文件会使用这个名字
return redirect('/index/') # 重定向 后面接路径 '''可以修改HttpResponse对象相关的参数'''
ret = HttpResponse('xxx') # 这是一个HTTPResponse对象
ret['xx'] = 'oo' # 给对象加一个响应头键值对
ret.status_code = 201 # 设置一个状态码
return ret

request.get_full_path()和request.path区别

    比如发送一个请求的路径为127.0.0.1:8080/class_list/?name = 10

  request.get_full_path返回的是=>/class_list/?name=10

  request.path获取的是不带参数的路径=>/class_list/

无名分组

可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图

urls.py

url('^book/(\d)/(\d+)',views.book)

FBV和CBV

FBV

FBV(function base views) 就是在视图里使用函数处理请求

from django.http import HttpResponse

def my_view(request):
if request.method == 'GET':
return HttpResponse('OK')

CBV

CBV(class base views) 就是在视图里使用类处理请求

from django.http import HttpResponse
from django.views import View class MyView(View):
def get(self, request):
return HttpResponse('OK')

CBV中urls.py的写法

url('^book/(\d)/(\d+)',views.Book.as_view())

CBV的本质

  Django的url是将一个请求分配给可调用的function的,而不是一个class。

  针对这个问题,class-based view提供了一个as_view()静态方法(也就是类方法)

  调用这个方法,会创建一个类的实例,然后通过实例调用dispatch()方法

  dispatch()方法会根据request的method的不同调用相应的方法来处理request(如get() ,post() 等)。

  到这里,这些方法和FBV差不多了,要接收request,得到一个response返回。

  如果方法没有定义,会抛出HttpResponseNotAllowed异常。

CBV相对于FBV的优点

  1. 提高了代码的复用性,可以使用面向对象的技术

  2. 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

day50:django:有名/无名分组&FBV/CBV的更多相关文章

  1. [Django框架之路由层匹配、有名 无名分组、反向解析、路由分发、名称空间、伪静态、本地虚拟环境、django版本区别]

    [Django框架之路由层匹配.有名 无名分组.反向解析.路由分发.名称空间.伪静态.本地虚拟环境.django版本区别] 路由层 路由即请求地址与视图函数的映射关系,如果把网站比喻成一本书,那路由就 ...

  2. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

  3. django之路由分组,反向解析,有名,无名分组

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态的概念 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'test',vi ...

  4. Django之无名分组,有名分组

    在Django 2.0版本之前,在urls,py文件中,用url设定视图函数 urlpatterns = [ url(r'login/',views.login), ] 其中第一个参数是正则匹配,如下 ...

  5. Django框架(四)-- 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别、Django虚拟环境搭建

    路由控制 一.简单路由配置 url(r'^booklist$', views.booklist) 第一个参数是正则表达式,第二个参数是视图函数 每个正则表达式前面的'r' 是可选的但是建议加上.它告诉 ...

  6. Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态

    一.Django请求生命周期 二.路由层  urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...

  7. Django框架(四)—— 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别

    目录 路由控制 一.简单路由配置 二.无名分组 三.有名分组 四.反向解析 五.路由分发 六.名称空间(一般不使用) 七.伪静态 八.Django 2.x和Django 1.x 路由层区别 九.APP ...

  8. Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)

    摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...

  9. django基础之有名分组和无名分组

    在Django 2.0版本之前,在urls,py文件中,用url设定视图函数 urlpatterns = [ url(r'login/',views.login), ] 其中第一个参数是正则匹配,如下 ...

随机推荐

  1. VMware Workstation 15 Pro安装带图形化界面的CentOS7

    1.双击打开“VMware Workstation”,然后选择“创建新的虚拟机” 2.在安装向导中,选择“稍后安装操作系统”,然后点击“下一步”继续安装 3.在“客户机操作系统”中选择“Linux(L ...

  2. 【MySQL】记一次线上重大事故:二狗子竟然把线上数据库删了!!

    写在前面 估计二狗子这几天是大姨夫来了,心情很郁闷,情绪也很低落,工作的时候也有点心不在焉.让他发个版本,结果,一行命令下去把线上的数据库删了!你没听错:是删掉了线上的数据库!运营那边顿时炸了锅:怎么 ...

  3. hook框架-frida使用-环境配置

    一.python安装模块 pip3 install frida pip3 install frida-tools 二.下载frida-server #下载链接 https://github.com/f ...

  4. HDFS概述和Shell操作

    大数据技术之Hadoop(HDFS) 第一章 HDFS概述 HDFS组成架构 HDFS文件块大小 第二章 HDFS的Shell操作(开发重点) 1.基本语法 bin/hadoop fs 具体命令    ...

  5. python 报错错误集合——更新中

    1. #!/usr/bin/env python # -*- coding:utf-8 -*- 'one #报错 File "C:\Users\shuxiu\Desktop\test.py& ...

  6. v-html渲染富文本图片宽高问题

    v-html渲染富文本v-html是用来渲染html的节点及字符串的,但是渲染后富文本里的图片宽高会溢出所在div的区域但是使用css直接给img是没有办法设置img的宽高的,需要使用深层级来给img ...

  7. 【WEB自动化测试之控件定位】基于HTML5控件的唯一控件属性定位

      一.WEB控件定位是什么 要想弄懂这个问题,我们还是基于实践来学习.我们先来看一条入门级别自动化测试用例的构成. DemoCase:正确用户名和密码登录博客园,登录成功 URL: https:// ...

  8. 重温Java Web的技术细节

    目录 一.背景 二.请求与响应 2.1.Http请求 2.2.Http响应 三.ServletConfig 3.1 测试ServletConfig参数 四.ServletContext 4.1 测试S ...

  9. 阿里云体验实验室 教你《搭建Hadoop环境》

    体验平台简介 面向开发者和中小企业打造的一站式.全云端的开发平台,打开浏览器就可以开发.调试.上线,所测即所得,并结合无服务器的模式,重新定义云原生时代的研发工作方法论.旨在降低开发者上手成本和中小企 ...

  10. Spring Validation-用注解代替代码参数校验

    Spring Validation 概念 在原先的编码中,我们如果要验证前端传递的参数,一般是在接受到传递过来的参数后,手动在代码中做 if-else 判断,这种编码方式会带来大量冗余代码,十分的不优 ...