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

写一个FBV的实例:在views中代码 :就是写了个函数

 

def book(request):
''' :param request:
:return:
'''
all_book = models.Book.objects.all()
# <QuerySet [<Book: python>, <Book: 水浒传>]>
'''
要把数据库中的数据显示到前端页面,必然要通过html文件,而在视图view中可以通过models获取数据库的参数
(这里指的是实例化对象(类-表;对象-行;对象.属性-字段),实例化对象时需要传参(关键字参数),这个参数要考虑从什么地方获得(get/post或其他方式能传过来)),
同时通过view中的函数传参到html中.orm就是数据库中表与models中的类具有对应关系,可以读取数据
.objects相当于创建了一个控制器
'''
# print('11111')
# print(all_book)
return render(request, 'book_lst.html', {'all_books': all_book})

在urls中路由的写法:         url(r'^book_list/', views.book,name = 'book_list'),

                 views模块.book函数名

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

Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。这样做的优点主要下面两种:

  1. 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
  2. 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

写一个CBV的实例:在views中代码

from django.shortcuts import render, HttpResponse, reverse, redirect
from app01 import models
from django.views import View class MyView(View): def get(self,request):
return render(request,'am.html')
def post(self,request):
return HttpResponse('hello')

注意在urls中路由的写法:

    注意:view.MyView.as_view()

      view模块.类名.as_view()  ###加''()''了

from app01 import views #app01为自定义文件夹

url(r'^my', views.MyView.as_view(),name = 'MyView'),

CBV基本类视图中有get方法和post方法,如果返回的请求是get请求,直接执行类中的get方法,如果是post方法请求,直接执行view中的post方法...

实例xxx

class Myd(View):
name = 'xx' def get(self,request,n):
print('get方法执行了')
print('>>>',n)
return render(request,'cvpost.html',{'name':self.name}) def post(self,request,n):
print('post方法被执行了')
return HttpResponse('post')

传参:

  

CBV传参,和FBV类似,有名分组,无名分组 见路由系统(url)

    url写法:无名分组的

 url(r'^cv/(\d{2})/', views.Myd.as_view(),name='cv'), #无名
 url(r'^cv/(?P<n>\d{2})/', views.Myd.as_view(name='xxx'),name='cv'),#有名分组
#如果想给类的name属性赋值,
前提你的Myd类里面必须有name属性(类属性,定义init方法来接受属性行不通,但是可以自行研究一下,看看如何行通,意义不大),并且之前类里面的name属性的值会被覆盖掉

在传给类方法时也是在request后加上形参,来接受参数

class MyView(View):

    def get(self,request,n):
return render(request,'am.html')
def post(self,request,n):
return HttpResponse('hello')

添加类的属性可以通过两种方法设置,第一种是常见的Python的方法,可以被子类覆盖。

from django.http import HttpResponse
from django.views import View class GreetingView(View):
name = "yuan"
def get(self, request):
return HttpResponse(self.name) # You can override that in a subclass class MorningGreetingView(GreetingView):
name= "alex"

    第二种方法,你也可以在url中指定类的属性:

    在url中设置类的属性Python

urlpatterns = [
url(r'^index/$', GreetingView.as_view(name="egon")), #类里面必须有name属性,并且会被传进来的这个属性值给覆盖掉
]

  

Django之CBV\FBV的更多相关文章

  1. Django 之 CBV & FBV

    FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django随笔中,一直使用的是这种方式,不再赘述. CBV CBV(class base views) ...

  2. Django 的 CBV&FBV

    Django FBV, function base view  视图里使用函数处理请求 url 1 url(r‘^users/‘, views.users), views 1 2 3 4 5 from ...

  3. Python/Django(CBV/FBV/ORM操作)

    Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...

  4. django中的FBV和CBV

    django中请求处理方式有2种:FBV 和 CBV 一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 看代码: urls.py from django.c ...

  5. Django的CBV与FBV

    FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base v ...

  6. Django的 CBV和FBV

    FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以 ...

  7. Django之CBV和FBV

    Django之CBV和FBV CBV和FBV是C和F的区别: C是Class,F是Function 在请求中,有GET请求和POST请求. 在写CBV时,url是可以对应一个类的,在类中,分别写出GE ...

  8. django补充CBV和FBV模式

    django补充CBV和FBV模式FBV模式---函数:经常用的方式CBV模式---类CBV中url连接时函数名后面要接.as_view()class index(views.View): @... ...

  9. Django之 CBV和FBV

    FBV FBV(function base views) 就是在视图里使用函数处理请求. CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的 ...

随机推荐

  1. ARC085F NRE

    看了题解. 题目大意 你有一个长度为 \(N\) 的全为 \(0\) 的序列 \(A\),给你一个长度同样为 \(N\) 的 \(0/1\) 序列 \(B\),允许你对把 \(A\) 的一些区间中的数 ...

  2. vue2.9.5 引入vue-strap时报错

    1.vue2.9.5 引入vue-strap时出错 2.组件中引入vue-strap的具体代码如下: 1 import DatePicker from 'vue-strap/src/Datepicke ...

  3. 忘记秘密利用python模拟登录暴力破解秘密

    忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...

  4. Redis深入学习笔记(二)client list 命令详解

    Redis的client list 命令可以获取当前连接到redis server端的所有客户端以及相关状态,本篇主要介绍每一个参数的作用. clisnt list 命令输出结果如下: (1)标识:i ...

  5. keepalive配置mysql自动故障转移

    keepalive配置mysql自动故障转移 原创 2016年02月29日 02:16:52 2640 本文先配置了一个双master环境,互为主从,然后通过Keepalive配置了一个虚拟IP,客户 ...

  6. 织梦dede文章列表调用标签的用法和规则

    织梦dede列表标签在任何模板的网站中都可能会使用到,而且我们在仿站的时候也经常要使用到列表标签.这里主机吧就给大家讲一下文章列表以及图片列表.软件列表以及分类信息列表标签的用法,和结合div+css ...

  7. java——collection总结

    Collection 来源于Java.util包,是非常实用常用的数据结构!!!!!字面意思就是容器.具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景.   ...

  8. 快速傅里叶变换(FFT)时间复杂度

    图:信号在时域上和频域上的直观表示 1. 计算一维离散傅里叶变换(DFT)公式如下: 其中,N表示数据长度.由上式可知,DFT的时间复杂度是O(N*N) 2. 一维FFT的时间复杂度为O(N*logN ...

  9. selenium常用的模块

    from selenium import webdriver #select模块处理下拉框from selenium.webdriver.support.ui import Select # Keys ...

  10. 容器(docker)内运行Nginx

    容器内运行nginx其实很简单,但是一开始还是浪费了我很多时间.这里写下来给大家省点时间. 1.创建nginx文件夹,放置各种配置及日志等. mkdir /docker/nginx docker 文件 ...