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是一个面向对象的 ...
随机推荐
- [OutLook]关闭Outlook时最小化
关闭Outlook时最小化 dll 11.首先把dll 文件复制到C:\Users\hetao\AppData\Roaming\Microsoft\AddIns 22.然后以管理员的方式运行cmd.e ...
- WPF常用TriggerAction用法 (一)
Microsoft.Expression.Interactivity 常用TriggerAction-> CallMethodAction ChangePropertyAction Contro ...
- pycharm 激活码
http://www.cnblogs.com/itfat/p/9388829.html
- JAVA的单元测试技术
1.选定开发工具 选定eclipse为开发工具,用JAVA进行编程,实现此次测试. 2.编写需要被测试的java类 此次我们以顺序查找与二分查找法为例. package com.mycode.tuil ...
- java连Oracle连接字符串写法
JDBC URL: 1.ServiceName方式:jdbc:oracle:thin:@//<host>:<port>/ServiceName 如果是集群,不知道为什么是在配置 ...
- springboot学习二:配置文件配置
springboot默认读取application*.properties #######spring配置####### spring.profiles.active=dev //引入开发配置文件 a ...
- 2018-2019-2 20165205 《网络对抗技术》 Exp6 信息收集与漏洞扫描
2018-2019-2 20165205 <网络对抗技术> Exp6 信息收集与漏洞扫描 实验目标 掌握信息收集的最基本技能与常用工具的方式 实验内容 各种搜索技巧的应用 DNS IP注册 ...
- c++堆和栈(转)
想要学好C++的C++堆栈,那么就要了解什么是C++堆栈,所为C++堆栈就是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除,分为堆和栈两部分. 在C++中,内存分 ...
- 监测c3动画过渡完成的事件
监测css3动画完成的事件 transitionend 用法: let element = document.getElementById("slidingMenu"); elem ...
- 运用node真机调试移动web项目
很多时候我们对移动端进行测试的时候,有pc端的测试,也有真机上的测试,pc的测试就不多说了,因为其实基本上大家都懂的.真机测试上也有几种方法,这里就推荐三种: 移动端真机调试方法 chrome真机调试 ...