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) ...
随机推荐
- 重载Prometheus配置
发送SIGHUP信号给应用程序的主进程: pid ‘’-1‘’是指“终端断线” 发送post请求给指定端点: curl -XPOST http://ip:9090/-/reload 对于此种方法要注意 ...
- ContextLoaderListener错误
在web.xml中添加如下配置 <context-param> <param-name>contextConfigLocation</param-name> < ...
- Win10使用自带功能创建系统映像备份时D盘被包含进去问题的解决
在使用Windows10系统时,使用Windows自带功能创建系统映像备份文件时碰到了一些问题,所以在此记录一下. 创建系统映像文件的步骤,如下: 1.打开 控制面板 -> 选择 系统和安全 - ...
- [Vim] 02 用 Windows 下的 gVim 假装 Linux 下的 Vim
0. 前言 这应该是极简配置,"极简"就是字面意思 我安装的版本是 8.1.1 来看个素颜 1. 找到 _vimrc 文本 我装在 E:\Program Files (x86)\V ...
- Linux /dev/shm
/dev/shm是Linux下的一个目录,/dev/shm目录不在磁盘上,而是在内存中,因此使用Linux /dev/shm的效率非常高,直接写进内存 可以通过两个脚本验证Linux /dev/shm ...
- uva-315.network(连通图的割点)
本题大意:求一个无向图额割点的个数. 本题思路:建图之后打一遍模板. /**************************************************************** ...
- Vue 2.0 入门系列(15)学习 Vue.js 需要掌握的 es6 (2)
类与模块 类 es6 之前,通常使用构造函数来创建对象 // 构造函数 User function User(username, email) { this.username = username; ...
- dfs(最佳路径)
http://acm.hdu.edu.cn/showproblem.php?pid=1242 Rescue Time Limit: 2000/1000 MS (Java/Others) Memo ...
- 如何将DataTable转换成List<T>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- mongodb连接警告修复
问题 Node.js中mongoose模块连接MongoDB数据库时提示(node:12580) DeprecationWarning: current URL string parser is de ...