day06 视图层

今日内容

  • 视图层

    小白必会三板斧
    JsonResponse
    form表单发送文件
  • FBV与CBV

    FBV基于函数的视图
    CBV基于类的视图
  • 模板层

    模板语法的传值
    模板语法之过滤器
    模板语法之标签
    自定义过滤器、标签、inclusion_tag
    模板的继承与导入

HttpResponse对象

# 视图函数必须返回一个HttpResponse对象
为什么这么说呢? HttpResponse
class HttpResponse: # 直接定义一个HttpResponse类
pass render
def render(...):
return HttpResponse(...) # 返回一个HttpResponse类 redirect
def redirect(...)
# redirect_class是继承HttpResponse子类
return redirect_class(...)

JsonResponse

# 向前端返回一个json格式字符串的两种方式

第一种方式:
import json
dic = {'name':'meng','age':18,'gender':'男'}
json_str = json.dumps(dic,ensure_ascii=False) # json格式默认会对中文字符进行转码,加上参数不转码
return HttpResponse(json_str) 第二种方式:
from django.http import JsonResponse
def index(request):
dic = {'name':'meng','age':18,'gender':'男'}
return JsonResponse(dic,json_dumps_params={'ensure_ascii':False})
# 由源代码中**kwargs打散成 ensure_ascii=False list = [1,2,3,4,5]
return JsonResponse(list,safe=False) # 要想传入列表,必须把safe设置False # 注:只有json格式打印出来才会是""双引号

form表单文件上传

想要form表单提交文件的前提有两个:
1.method必须是post
2.enctype参数必须是multipart/form-data
request.POST无法获取到文件类型的数据
request.FILES获取文件类型的数据 # 使用这个获取出普通数据外的数据 后端:
def index(request):
if request.method == 'POST':
# print(request.POST)
# print(request.FILES) # <MultiValueDict: {'file': [<InMemoryUploadedFile: 生命周期流程图.png (image/png)>]}>
file_obj = request.FILES.get('file') # 与request.POST.get('file') 一个意思
print(file_obj.name)
with open(file_obj.name,'wb') as f:
for line in file_obj:
f.write(line)
return render(request,'index.html') 前端:
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" > # 不加multiple参数只能选一个
<input type="file" name="file" multiple> # 加上可以选多个上传

FBV与CBV

# CBV基于类的视图(Class base view)和FBV基于函数的视图(Function base view)

FBV:基于函数的视图
# FBV
url(r'^index/',views.index),
def index(request):
pass CBV:基于类的视图函数
# CBV
url(r'^login/',views.Mylogin.as_view()) # as_view经过变形之后返回view,加上括号调用 from django.views import View
class Mylogin(View):
def get(self,request):
return HttpResponse('get请求') def post(self,request):
return HttpResponse('post请求')
# CBV会自动判断当前请求方法并自动匹配类中的方法执行

对象查找属性或方法的顺序(***)

# 对象查找属性或方法的顺序
永远都是先从自己身上找
然后去产生对象的类中找
再去类的父类中找 如果都没有才会报错

CBV源码剖析

"""
函数名或者方法名遇到括号执行优先级最高 对象查找属性或方法的顺序
永远都是先从自己身上找
然后去产生对象的类中找
再去类的父类中找 如果都没有才会报错 闭包函数
定义在函数内部并且使用了外层函数名称空间中的名字
"""
# 其实FBV与CBV在路由匹配上本质其实是一样的,都是正则表达式对应函数名 # 经过变形后:url(r'^login',views.view) ,看源码发现返回view
# 当匹配到login,自动调用view加括号执行
url(r'^login/',views.Mylogin.as_view()) 源代码:
def as_view(cls, **initkwargs):
def view(request, *args, **kwargs):
# cls使我们自定义的类 MyLogin
self = cls(**initkwargs) # 产生一个MyLogin类的对象 obj
return self.dispatch(request, *args, **kwargs) # 调用disoatch函数
return view def dispatch(self, request, *args, **kwargs):
# 判断当前的请求方法是否在这八个方法内
if request.method.lower() in self.http_method_names:
# 从自己写的类产生的对象,找请求的方法
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs) # 执行这个方法 # 用自己的话说:
1、路由匹配url调用了一个绑定给类的as_view()函数
2、as_view()里面定义了一个view函数,调用了dispatch函数
3、在dispatch函数中判断发来的请求方式是否在 http_method_names变量名
4、在的话,用getattr方法去自己定义的类产生的对象寻找
5、在自己定义的类找的对应的请求方法,并执行相应请求下面的代码
class Mylogin(View):
def get(self,request):
return HttpResponse('get请求') def post(self,request):
return HttpResponse('post请求')

day06 视图层的更多相关文章

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

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

  2. django 实战篇之视图层

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

  3. Django视图层

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

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

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

  5. springboot整合视图层之jsp

    在springboot中不推荐视图层使用jsp展示,但是人们以前已经习惯使用jsp,所以对jsp也有支持,但是是解耦性的.也就是说并没有像其他组件一样直接集成到启动器中,所以像jsp引擎之类的需要额外 ...

  6. 小程序学习笔记三:页面文件详解之视图层WXML、WXS、WXSS文件

      视图层:Pages主要有 wxml页面文件和模板文件.wxs脚本文件.wxss样式文件:component是抽取出来的业务单元,同样拥有wxml页面文件和模板文件.wxs脚本文件.wxss样式文件 ...

  7. DjangoMTV模型之视图层views及模板层template

    Django视图层中views的内容 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容(render),也可以是一个重定向( ...

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

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

  9. ORM之视图层

    1.request对象 前台POST传来的数据,包装到POST字典中request.POST 前台浏览器窗口携带的数据,包装到GET字典中request.GET 前台请求的方式,request.met ...

随机推荐

  1. HTML bootstrap 模态对话框添加用户

    HTML 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> ...

  2. Redis 专栏(使用介绍、源码分析、常见问题...)

    一.介绍相关 说Redis : 介绍Redis特性,使用场景,使用Jedis操作Redis等. 二.源码分析 1. 数据结构 Redis源码分析(sds):Redis自己封装的C语言字符串类型. Re ...

  3. Linux 系统分区方案 详细教程

    简单分区方案 实际上,很多时候我们只需要分两个区:/和交换分区,日常使用基本不会有任何影响,甚至于交换分区对于现在的电脑来说都不是必要的,我们完全可以只分配一个根分区.linux只需要一个/根分区就可 ...

  4. Python使用ConfigParser模块读取配置文件(config.ini)以及写入配置文件

    前言 使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser.configPars ...

  5. Springboot 整合RabbitMq ,用心看完这一篇就够了

    该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...

  6. 在Vs code中使用sftp插件以及连接windows远程sftp协议部署指导(解决vscode的sftp插件中文目录乱码问题)

    一.启动SFtp 二.上手vs code SFTP插件 2.1 初始配置 2.2解决乱码问题 三.SFTP配置 3.1常用配置 3.2示例配置 四.SFTP使用 五.扩展阅读 一.启动SFtp 话说小 ...

  7. Python-Unittest多线程生成报告

    前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了. 环境必备 ...

  8. dart系列之:创建Library package

    目录 简介 Library package的结构 导入library 条件导入和导出library 添加其他有效的文件 library的文档 发布到pub.dev 总结 简介 在dart系统中,有pu ...

  9. 重新整理 .net core 实践篇——— 权限源码阅读四十五]

    前言 简单介绍一下权限源码阅读一下. 正文 一直有人对授权这个事情上争论不休,有的人认为在输入账户密码给后台这个时候进行了授权,因为认为发送了一个身份令牌,令牌里面可能有些用户角色信息,认为这就是授权 ...

  10. SpringCloud升级之路2020.0.x版-40. spock 单元测试封装的 WebClient(上)

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们来测试下前面封装好的 WebClient,这里开始,我们使用 spock 编写 gro ...