Django之CBV\FBV
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。这样做的优点主要下面两种:
- 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
- 可以用不同的函数针对不同的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的更多相关文章
- Django 之 CBV & FBV
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django随笔中,一直使用的是这种方式,不再赘述. CBV CBV(class base views) ...
- Django 的 CBV&FBV
Django FBV, function base view 视图里使用函数处理请求 url 1 url(r‘^users/‘, views.users), views 1 2 3 4 5 from ...
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...
- django中的FBV和CBV
django中请求处理方式有2种:FBV 和 CBV 一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 看代码: urls.py from django.c ...
- Django的CBV与FBV
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base v ...
- Django的 CBV和FBV
FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以 ...
- Django之CBV和FBV
Django之CBV和FBV CBV和FBV是C和F的区别: C是Class,F是Function 在请求中,有GET请求和POST请求. 在写CBV时,url是可以对应一个类的,在类中,分别写出GE ...
- django补充CBV和FBV模式
django补充CBV和FBV模式FBV模式---函数:经常用的方式CBV模式---类CBV中url连接时函数名后面要接.as_view()class index(views.View): @... ...
- Django之 CBV和FBV
FBV FBV(function base views) 就是在视图里使用函数处理请求. CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的 ...
随机推荐
- 学习笔记《Java多线程编程实战指南》一
1.1什么是多线程编程 多线程编程就是以线程为基本抽象单位的一种编程范式,和面向对象编程是可以相容的,事实上Java平台中的一个线程就是一个对象.多线程编程不是线程越多越好,就像“和尚挑水”的故事一样 ...
- 持续更新scrapy的错误,ValueError: Missing scheme in request url:
只需要将 for href in response.xpath('XX').extract(): yield Request(hrefs) 修改为下面,就可以显示出来 for href in resp ...
- Apartment 2019
Apartment 2019 最近在学习3D建模,Apartment 2019是我的个人项目. 初步的想法是,先在网上找公寓建筑的平面图以及室内效果照片,根据这些参考图像来练习建模与渲染. 建模顺序与 ...
- Tomcat中acceptCount,maxConnections、maxThreads的含义及关系
个人对tomcat连接器3个属性maxConnections.maxThreads.acceptCount的理解: 先摘取官网对这3个属性的描述: acceptCount The maximum qu ...
- php curl使用 常用操作
1. http Get 简单的只需要 这四行 就 $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, "http://site" ...
- Java、中Date的格式初始化以及Calendar的使用
使用字符串初始化Date String dateString = “2018-02-23”; Date date= new SimpleDateFormat(“yyyy-MM-dd”).parse(d ...
- Postman A请求的返回值作为B请求的入参( 之‘’token‘’ ,用代码设置全局变量)
问题: 登陆接口获取token,其他接口访问时需携带token 方案: 在登陆接口访问后设置Postman的全局变量(Globals),例如设置环境变量名:token2,值(实时的不用自己手动设置的) ...
- Target JRE version (1.7.0_79) does not match project JDK version (java version "1.8.0_171"), will use sources from JDK: 1.7
IDEA不会自动匹配系统的JDK环境.如果在IDEA里面没有配置JDK,那么运行程序时就会报错 之前碰到这个问题卡了一下 顺手记录一下 出现此错误说明IDE中配置的jdk版本和你使用的jdk版本不一致 ...
- 从零开始mycat实验环境搭建
版本说明 本机: jdk 8 使用IntelliJ IDEA调试MyCAT 1.6 release 主机一:droplet CentOS 7.5 x86_64 MyCAT 1.6 release O ...
- 分布式 基本理论 BASE
比起CAP的生硬来, 我更加喜欢BASE.BASE 显得更加好理解.尽管BASE 这个名字本身有迎合语言习惯的恶臭味,为什么不是缩写为 BaSsEc 呢? 其实大部分系统是可以 同时 CAP 的, 因 ...