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) ...
随机推荐
- 【Qt开发】解决Qt程序在Linux下无法输入中文的办法
解决Qt程序在Linux下无法输入中文的办法 一位网友问我如何在Linux的Qt的应用程序中输入中文,我一开始觉得不是什么问题,但是后面自己尝试了一下还真不行.不仅是Qt制作的应用程序,就连Qt Cr ...
- 推荐Calendar操作日期
package com.example.demo.Calender; import java.text.SimpleDateFormat;import java.util.Calendar;impor ...
- 63 (OC)* NSAutoreleasePool 自动释放池
目录 0:ARC 1: 自动释放池 2:NSAutoreleasePool实现原理 3:autorelease 方法 4: Runloop和Autorelease的关系 5: Using Autore ...
- 红帽学习笔记[RHCSA] 第四课[用户相关、破解root密码]
第四课 关于Linux 的用户 用户分类: # UID 是用户ID UID 0分配给超级用户(root) UID 1-200 是一系列的 系统用户 静态分配给红帽的系统进程 UID 201 ...
- Nginx服务器优势是什么
nginx介绍.功能,优势 https://www.cnblogs.com/wcwnina/p/8728391.html#!comments Nginx负载均衡,session共享问题,几种解决方案 ...
- springboot+dubbo基于zookeeper快速搭建一个demo
由于小编是在windows环境下搭建的,故该示例均为在windows下操作,这里只是提供一个快速搭建思路,linux操作也基本上差不多. 首先本示例的dubbo是基于zookeeper发布订阅消息的, ...
- qt 获取磁盘空间大小,cpu利用率,内存使用率
转自:http://www.qtcn.org/bbs/read-htm-tid-60613.html. 1:封装成一个类,直接调用即可.已经在多个商业项目中使用.2:所有功能全平台 win linux ...
- 画一个心送给心爱的小姐姐,Python绘图库Turtle
Python绘图库Turtle Turtle介绍 Turtle是Python内嵌的绘制线.圆以及其他形状(包括文本)的图形模块. 一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对 ...
- 小白学Python(20)—— Turtle 海龟绘图
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...
- JCTF 2014 小菜两碟
测试文件:https://static2.ichunqiu.com/icq/resources/fileupload//CTF/JCTF2014/re200 参考文章:https://blog.csd ...