加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

day50:django:有名/无名分组&FBV/CBV

发布时间:2020-12-20 09:57:46 所属栏目:Python 来源:网络整理
导读:目录 1.URL有名分组和无名分组 2.FBV和CBV URL有名分组和无名分组 有名分组 使用简单的正则表达式分组匹配(通过 圆括号 )来捕获URL中的值并以 位置参数 形式传递给视图 urls.py from app01 import viewsurl( ' ^book/(?Pyeard)/(?Pmonthd+) ' ,views.boo

目录

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.htmltitle':xx'})  title这个名字随便起的,html文件会使用这个名字
    return redirect(/index/ 重定向 后面接路径

可以修改HttpResponse对象相关的参数'''
    ret = HttpResponse( 这是一个HTTPResponse对象
    ret['] = 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+)FBV和CBV

FBV

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

from django.http  HttpResponse
  
def my_view(request):
     if request.method == GET':
            OK')

CBV

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

 HttpResponse
from django.views  View
  
class MyView(View):
       get(self,request):
            ')

CBV中urls.py的写法

url(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判断,提高代码可读性

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读