内容概要

  • 小白必会三板斧

  • request对象方法初识
  • form表单上传文件

  • Jsonresponse

  • FBV与CBV

内容详细

1 小白必会三板斧

HttpResponse
render
redirect
# 视图函数必须返回一个HttpResponse对象 # 具体参考HttpResponse源码

2 request方法初识

'''
request对象:(
1:request.method(判断请求格式)
2:request.POST(.get、.getlist)
3:request.GET(.get、.getlist)
4:request.body(一串二进制)
5:request.files(接收文件)
6:request.path
7:request.path_info
8:request.get_full_path(接收完整url及?号后面的参数)
...

'''

3 form表单上传文件

必须要指定的参数
1.method='post'
2.enctype='/multipart/form-data/'
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" multiple>
<input type="submit" class="btn btn-primary btn-block">
</form>

def index(request):
if request.method == 'POST':
# print(request.POST)
# print(request.GET)
# print(request.FILES) # 获取文件数据
file_obj = request.FILES.get('myfile')
print(file_obj.name) # 获取文件名
with open(file_obj.name,'wb') as f:
for chunk in file_obj.chunks():
f.write(chunk)
return render(request,'index.html')

4 Jsonresponse

JsonRespanse:(
return JsonRespanse(dict)(默认只能传字典,需要传其他类型需要将safe参数改为False)

5 FBV与CBVFBV 基于函数的视图

    FBV使用频率较低(基础阶段)
CBV 基于类的视图
CBV实际开发项目使用频率较高(高级阶段)
views.py视图层
视图函数
不仅仅可以是函数也可以是类
1.面向过程式编程
2.面向对象式编程 # FBV
def index(request):
return HttpResponse('')
# CBV
视图层代码
from django.views import View


class Mylogin(View):
def get(self,request):
return HttpResponse('get方法')
def post(self,request):
return HttpResponse('post方法')
路由层代码
url(r'^login/', views.Mylogin.as_view())
========================================================
CBV:
        url(r'^index/',views.类名.as_view())
  FBV:        
        url(r^index/',views.视图函数名)
 
      1:as_view()里面返回了一个view函数(所以CBV本质也是FBV)
      2:匹配路由调用view时,view里面生成了一个当前类(自己写的类)的对象,并返回了一个dispatch方法
      3:dispatch方法里判断了当前请求的格式并将其变形成全小写的字符串,再判断当前请求格式是否合法,如果合法,就将该字符串通过反射方法将其调用并返回(get、post)---> def get:.../def post:...
 
CBV的本质也是和FBV一样,都是路由+视图函数内存地址
 
=====================================
 
CBV添加装饰器的三种方式:(先导入method_decorader模块)
 
1:放方法头上(指名道姓)
 
2:放他父类头上(可针对性的加装饰器,扩展性强)
 
3:重写dispatch方法(放dispatch头上)(作用于所有方法)
 
FBV:导入:from django.view.decorators.csrf import csrf_protect,csrf_exempt

 

csrf_protect:需要校验

 

csrf_exempt:忽视校验

 
 

正常添加装饰器即可

 
 

CBV:csrf_protect:可以正常按CBV三种添加方式

 

csrf_exempt:只能在dispath上加装饰器

 
 

6 CBV源码

# 切入点
url(r'^login/', views.Mylogin.as_view())
'''类名点名字还加括号 名字要么是绑定给类的方法 要么是无参函数'''

1.as_view()绑定给类的方法
@classonlymethod
def as_view(cls, **initkwargs)
2.CBV路由匹配本质与FBV一致
# CBV
url(r'^login/', views.Mylogin.as_view())
# CBV本质
# url(r'^login/', views.view)
3.匹配成功之后执行view函数代码
def view(request, *args, **kwargs):
self = cls(**initkwargs)
return self.dispatch(request, *args, **kwargs)
4.查看dispatch方法(对象查找属性和方法一定要严格按照顺序来)
def dispatch(self, request, *args, **kwargs):
# 判断当前请求方法是否符合八个默认的请求方法中
# 1.get
if request.method.lower() in self.http_method_names:
# getattr(对象,'get','拿不到的报错信息') >>> Mylogin里面的get方法
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs) # get(request,...)

Django基础之视图层的更多相关文章

  1. [Django框架之视图层]

    [Django框架之视图层] 视图层 Django视图层, 视图就是Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来专门处理客户端访问请求后处理请求并且返回相应的数据,相 ...

  2. Django 学习 之 视图层(views)

    一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何 ...

  3. Django的日常-视图层

    目录 Django的日常-3 JsonResponse form表单上传文件 CBV的源码分析 视图层 模板传值 过滤器 标签 自定义过滤器和标签 Django的日常-3 JsonResponse 在 ...

  4. Django学习之视图层

    视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...

  5. web框架开发-Django视图层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

  6. django 实战篇之视图层

    视图层(views.py) django必会三板斧 HttpResponse >>> 返回字符串 render >>> 支持模板语法,渲染页面,并返回给前端 red ...

  7. Django视图层

    本文目录 1 视图函数 2 HttpRequest对象 3 HttpResponse对象 4 JsonResponse 5 CBV和FBV 6 简单文件上传 回到目录 1 视图函数 一个视图函数,简称 ...

  8. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  9. python 全栈开发,Day69(Django的视图层,Django的模板层)

    昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...

随机推荐

  1. 月薪6K和月薪2W的测试,有什么区别?

    之前,我收到了一位朋友的好消息,说自己拿到了接近月薪 20k 的 offer.   说实话,软件测试岗位前期门槛低,但是想要拿到高薪真没那么简单.工作 2-3 年薪资还在原地打转的同学,都大有人在. ...

  2. Spring MVC工作原理及源码解析(二)DispatcherServlet实现原理及源码解析

    1.DispatcherServlet 处理流程 从上一篇文章中Spring MVC原理图中我们可以看出:DispatcherServlet 在 Spring MVC框架 中处于核心位置,它负责协调和 ...

  3. Spring context的refresh函数执行过程分析

    今天看了一下Spring Boot的run函数运行过程,发现它调用了Context中的refresh函数.所以先分析一下Spring context的refresh过程,然后再分析Spring boo ...

  4. CSS层叠性

    比较id,类,标签的数量 谁多就谁在上面 255个类的权重等于一个id 当权重一样时,以后设置的为准 通过继承而来的,权重为0 !important (设置权重无限大)可以影响权重,但只能影响选中的, ...

  5. MSSQL·查询存储过程中的关键字

    阅文时长 | 0.22分钟 字数统计 | 408字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·查询存储过程中的关键字』 编写人 | SCscHero 编写时间 | 20 ...

  6. CentOS7中下载RPM及其所有的依赖包

    CentOS7中下载RPM及其所有的依赖包 转载beeworkshop 最后发布于2019-09-28 07:43:40 阅读数 1096  收藏 展开 利用 Downloadonly 插件下载 RP ...

  7. 攻防世界(七)ics-06

    攻防世界系列:ics-06 1.打开题目 很LiuPi的样子,根据题目提示点开报表中心(其他的点开没什么变化) 注意到URL中有?id=1,测试其他数值无果 3.抓包对id爆破 设置1-10000,爆 ...

  8. mysql 无法执行select查询

    场景:mysql无法执行select命令查询,对于已存在的数据库,除了mysql.information_schema数据库,其它诸如nova.keystone.cinder等数据库都有此现象. 日志 ...

  9. Ansible命令行方式执行

    Ansible ad-hoc 什么是ad-hoc? 临时命令,执行完不会保存,类似于批量执行命令. ansible的选项 -i # 指定主机清单 ansible rsync -m ping -i 1. ...

  10. 。 (有些情况下通过 lsof(8) 或 fuser(1) 可以 找到有关使用该设备的进程的有用信息)

    umount时目标忙解决办法 标签(空格分隔): ceph ceph运维 osd 在删除osd后umount时,始终无法umonut,可以通过fuser查看设备被哪个进程占用,之后杀死进程,就可以顺利 ...