Django框架(五)-- 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传
一、视图函数
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。
- from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
- import datetime
- // 视图函数current_datetime使用HttpRequest对象作为第一个参数,并且通常称之为request
- def current_datetime(request):
- now = datetime.datetime.now()
- html = "<html><body>It is now %s.</body></html>" % now
- // 视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象
- b request s
- r -----------------> e
- o <----------------- r
- w response ve
二、视图层之HttpRequest对象
django将请求报文中的 请求行、首部信息、内容主体 封装成 HttpRequest 类中的属性。 除了特殊说明的之外,其他均为只读的
- # 1.前台Post传过来的数据,包装到POST字典中
- request.POST
- # 2.前台浏览器窗口里携带的数据,包装到GET字典中
- request.GET
- # 3.前台请求的方式
- request.method
- # 4.post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1
- request.body
- # 5.取出请求的路径,取不到数据部分
- request.path # /test/blog/
- # 6.取出请求的路径,能取到数据部分
- request.get_full_path() # /test/blog?id=1&name=tom
- # 7.META,一个标准的Python 字典,包含所有的HTTP 首部
- request.META
- # 8.一个类似于字典的对象,包含所有的上传文件信息
- request.FILES
- #FILES 中的每个键为<input type="file" name="" /> 中的name,值则为对应的数据。
- # 注意,FILES 只有在请求的方法为POST 且提交的<form> 带有enctype="multipart/form-data" 的情况下才有
- # 包含数据。否则,FILES 将为一个空的类似于字典的对象。
三、视图层之HttpResponse对象
响应对象主要有三种形式:
- HttpResponse()
- render()
- redirect()
1、render()
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象
- render(request, 'index.html'[,context])
- # 第一个参数是用于生成相应的的请求对象,第二个参数是要使用的模板的名称,第三个参数是添加到模板上下文的字典
2、redirect()
传递要重定向的一个硬编码的URL
- def test(request):
- ...
- #return redirect('/showbooks/')
- return redirect('http://127.0.0.1:8888/showbooks')
四、视图层之JsonResponse对象
- from django.http import JsonResponse
- def test(request):
- dic = {'id':1,'name':'tom'}
- # JsonResponse默认只支持字典
- return JsonResponse(dic)
- # 等价于
- import json
- def test(request):
- dic = {'id':1,'name':'tom'}
- return HttpResonse(json.dumps(dic))
- JsonResponse默认只支持字典
- 要用其他类型,可以将JsonResponse参数中的safe设为False,即 return JsonResponse(list, safe=False)
五、CBV和FBV
CBV基于类的视图(Class base view)和FBV基于函数的视图(Function base view)
1、CBV(基于类的视图)
- # 路由层
- url(r'test/', views.Test.as_view()) # 后面视图必须加括号,源码中是返回一个内存地址
- # 视图层
- # 1.导入view
- from django.views import View
- # 2.写类
- class Test(view): # 必须继承view
- def get(self, request): # 方法名字必须为get、post,参数中必须要有request
- return HttpResponse('get_test')
- def post(self, request):
- return HttpResponse('post-test')
2、FBV(基于函数的视图)
- # 路由层
- url(r'test/', views.show)
- # 视图层
- def show(request):
- return HttpResponse('showbooks')
六、文件上传
1、前端
- <form action="" method="post" enctype="multipart/form-data">
- <input type="file" name="myfile">
- <input type="text" name="password">
- <input type="submit" value="提交">
- </form>
- 编码enctype用 ‘ multipart/form-data ’
2、后台,文件上传,存到本地
- def fileupload(request):
- if request.method=='GET':
- return render(request,'fileupload.html')
- if request.method=='POST':
- # 从字典里根据名字,把文件取出来
- myfile=request.FILES.get('myfile')
- # 文件名字
- name=myfile.name
- # 打开文件,把上传过来的文件存到本地
- with open(name,'wb') as f:
- # for line in myfile.chunks():
- for line in myfile:
- f.write(line)
- return HttpResponse('ok')
Django框架(五)-- 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传的更多相关文章
- Django day05 视图层之 (HttpRequest) \ (HttpResponse) \ (JsonResponse) 对象
一:视图层之HttpRequest对象 # 前台Post传过来的数据,包装到POST字典中 # request.POST # 前台浏览器窗口里携带的数据,包装到GET字典中 # request.GET ...
- 一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.
一.虚拟环境 ''' 解决版本共存 1. 用pycharm选择File点击NewProject然后选择virtualenv创建一个纯净环境 2. 打开下载的目录将venv文件夹下的所有文件(纯净的环境 ...
- [Django框架之视图层]
[Django框架之视图层] 视图层 Django视图层, 视图就是Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来专门处理客户端访问请求后处理请求并且返回相应的数据,相 ...
- java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))
1.自定义拦截器: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- django设置并获取cookie/session,文件上传,ajax接收文件,post/get请求及跨域请求等的方法
django设置并获取cookie/session,文件上传,ajax接收文件等的方法: views.py文件: from django.shortcuts import render,HttpRes ...
- Django框架(六)—— 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传
目录 视图层 一.视图函数 二.视图层之HttpRequest对象 三.视图层之HttpResponse对象 四.视图层之JsonResponse对象 五.CBV和FBV 六.文件上传 视图层 一.视 ...
- Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传
视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...
- $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django, 1 用pychanrm创建--->files-->newproject--->选择虚拟环境 2 setting ...
- Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...
随机推荐
- 论文阅读笔记五十八:FoveaBox: Beyond Anchor-based Object Detector(CVPR2019)
论文原址:https://arxiv.org/abs/1904.03797 摘要 FoveaBox属于anchor-free的目标检测网络,FoveaBox直接学习可能存在的图片种可能存在的目标,这期 ...
- 【oracle】oracle11g安装失败 提示找不到文件,模板General_Purpose.dbc不存在
先确定一下自己的安装包是不是一起解压的! 不是就重新解压,重新装. 是,剩下的我也不会
- Xamarin.Forms移动开发系列3:项目剖析
摘要 本文主要进行Xamarin.Forms应用程序剖析. 前言 本文介绍Xamarin.Forms应用程序剖析. 由于本系列重点研究对象为Xamarin.Forms,所以对Xamarin.Andro ...
- C语言实现计算器,附源码,超简单!
#include<stdio.h> #include<math.h> void main() { calculator(); } double calculator() { / ...
- Python--单元四练习
一.算24 描述: 给出4个小于10的正整数,可以使用加.减.乘.除4种运算以及括号把4个数连接起来得到一个表达式.现在问题是,是否存在一种方式使得所得表达式的结果等于24. ...
- 算法&设计模式
这里更新Python 算法&设计模式部分的博客(或目录链接)
- Visual Studio 调试系列10 附加到正在运行的进程
系列目录 [已更新最新开发文章,点击查看详细] 可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程. 进程运行后,在 Visual Studio 中选择“调试” & ...
- nodejs的child_process
child_process 模块提供了衍生子进程的能力 异步方式:spawn.exec.execFile.fork 同步方式:spawnSync.execSync.execFileSync 说明: ...
- asp.net core 2.1 容器中使用 System.Drawing.Common 的问题
- idea类存在找不到解决办法
清除idea缓存,