django FBV +CBV 视图处理方式总结
1、FBV(function base views)
在视图里使用函数处理请求。
url:
re_path('fbv', views.fbv),
# url(r'^fbv', views.fbv),
func:
def fbv(requset):
return render(requset,'fbv_Cbv.html')
2、CBV (class base views)
url:
re_path('cbv', views.Cbv.as_view()),
# url(r'^cbv', views.Cbv.as_view()),
class:
from django.views import View
#导入View模块
class Home(View): #使用类处理需要继承View(view是Home的父类,Home是子类)
def get(self,request): #自动识别,如果用户请求方式:get,那么自动调用该方法执行结果
print(request.method)
return render(request, 'home.html')
def post(self,request):
print(request.method)#自动识别,如果用户请求方式:post,那么自动调用该方法执行结果
return render(request, 'home.html')
3、FBV+CBV 获取数据、返回数据的命令参数
A.获取数据的几种方式
request.method
request.GET
request.POST
request.FILES
request.path_info
request.COOKIES
reqeust.body #所有内容的原生数据
B.获取checkbox等多选的内容
request.POST.getlist()
request.GET.getlist()
#所以分成两类
request.body #用户请求的原生数据,以字符串形式存放
request.PUT
request.DELECT
request.MOVE
#django对上面3种没有做处理,所以我们操作以上3种的时候就需要通过request.body获取原生数据:字符串形式
request.Meta
#出了数据外,请求头相关的信息,如:判断用户是PC端还是移动端
request.method(POST、GET、PUT..)
request.path_info
request.COOKIES
C.接收上传文件,注意:模板文件html的form标签必须做特殊设置:enctype="multipart/form-data"
obj = request.FILES.get('file')
obj.name #取该文件名
obj.size #取该文件的字节大小
obj.chunks #取该文件的块
file_path = os.path.join('%s\\upload'%os.path.dirname(os.path.abspath(__file__)), obj.name) #当前文件的目录下的upload目录和接收文件名进行拼接成文件路径
f = open(obj.name,mode= 'wb') #如果该路径文件存在就打开,不存在就创建
for item in obj.chunks():
f.write(item) #写入文件
f.close() #关闭文件
D、返回给用户的几种方式
return render(request,'模板路径.html',{'list':[1,2,3,4],'dict': {'k1':'v1','k2':'v2'} }) #返回给用户指定经过模板渲染后的html
retune redirect(’url路径’) #跳转到指定url
retune HttpResponse(‘字符串’) #直接返回给用户字符串
response = HttpResponse(a)
response.set_cookie(‘key’:’value’) #设置客户端cookie
response[‘name’] = ‘bur’ #设置客户端响应头
return response
4、FBV+CBV 添加验证装饰器
A、FBV添加装饰器
def auth(func):
def deco(request, *args, **kwargs):
u = request.get_signed_cookie('username', salt='user', default=None)
if not u:
return render(request, 'login.html')
return func(request, *args, **kwargs)
return deco @auth
def index(request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'index.html', {'user': u}) @auth
def detail(request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'detail.html', {'user': u}) 访问index/detail时,调用auth装饰器,如果验证成功,则执行index/detail(return func(request, *args, **kwargs)语句起的作用);
否则跳转到login.html
B、CBV方式添加装饰器:通过django自带的装饰器method_decorator 的@method_decorator(cookie)来实现
from django.utils.decorators import method_decorator
from django import views # @method_decorator(cookie,name='dispatch') # dispatch的便捷写法
class CBVtest(views.View):
@method_decorator(cookie) # 给dispatch方法添加装饰器,那么下面所有的get,post都会添加
def dispatch(self, request, *args, **kwargs):
return super(CBVtest, self).dispatch(request, *args, **kwargs) # @method_decorator(cookie) # 单独添加
def get(self, request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'houtai.html', {'user': u}) def post(self, request):
return HttpResponse('post ok')
django FBV +CBV 视图处理方式总结的更多相关文章
- Django FBV CBV以及使用django提供的API接口
FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择 看看FBV的代码 URL的写法: from django.conf.urls import url from api import v ...
- Django FBV/CBV、中间件、GIT使用
s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...
- [oldboy-django][2深入django]FBV + CBV + 装饰器
FBV django CBV & FBV - FBV function basic view a. urls 设置 urls(r'^test.html$', views.test) b. vi ...
- Django之CBV视图源码分析(工作原理)
1.首先我们先在urls.py定义CBV的路由匹配. FBV的路由匹配: 2.然后,在views.py创建一名为MyReg的类: 注意:该类必须继续View类,且方法名必须与请求方式相同(后面会详解) ...
- Django 路由视图FBV/CBV
路由层 url路由层结构 from django.conf.urls import url from django.contrib import admin from app01 import vi ...
- django——FBV与CBV
引言 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class bas ...
- 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
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django随笔中,一直使用的是这种方式,不再赘述. CBV CBV(class base views) ...
随机推荐
- 红帽学习笔记[RHCSA] 第六课[进程、服务相关]
第六课 进程 进程:已经启动的可执行程序的运行中的实例.每个进程都有自己的地址空间,并占用了一定的系统资源. 如何产生一个进程 执行程序或命令 计划任务 在终端中对进程管理 运行一个前台进程 [roo ...
- P1118 [USACO06FEB]数字三角形`Backward Digit Su`… (dfs)
https://www.luogu.org/problemnew/show/P1118 看的出来是个dfs 本来打算直接从下到上一顿搜索 但是不会 看了题解才知道系数是个杨辉三角....... 这样就 ...
- Git入门资料
1.廖雪峰老师Git教程 地址:https://www.liaoxuefeng.com/wiki/896043488029600 2.Eclipse eGit连接GitHub教程 地址:https:/ ...
- sql limit order by and where
1 sql limit limit size,返回前size行. limit offset , size,返回offset开始的size行,offset从0行开始. 2 sql limit with ...
- CentOS下搭建docker+.net core
运行环境: CentOS 7.0 容器:Docker 1.13.1 .Net Core版本: .NET Core 2.1,安装详见 CentOS 7 下安装.NET Core SDK 2.1 1.安装 ...
- django -----原生SQL语句查询与前端数据传递?
view.py中 import MySQL def request_data(request): if request.method == "GET": conn = MySQLd ...
- Client does not support authentication protocol requested by server; consider upgrading MySQL client
出现错误 Client does not support authentication protocol requested by server; consider upgrading MySQL c ...
- gradle上sourceSets配置&同名文件合并问题
gradle的sourceSets可以对不同的buildType, productFlavor,buildVariant设置不同的文件路径,进行多样化处理. sourceSets{ main{ man ...
- 生成EXCEL文件是经常需要用到的功能,我们利用一些开源库可以很容易实现这个功能。
方法一:利用excellibrary,http://code.google.com/p/excellibrary/ excellibrary是国人写的开源组件,很容易使用,可惜貌似还不支持.xlsx( ...
- input 限制 中文输入
ime-mode:disabled是什么? 解决: 1. ime-mode版本:IE5+专有属性 继承性:无 语法: ime-mode : auto | active | ina ...