博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django框架(六)—— 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传...
阅读量:5334 次
发布时间:2019-06-15

本文共 3112 字,大约阅读时间需要 10 分钟。

视图层

一、视图函数

一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。

from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirectimport datetime// 视图函数current_datetime使用HttpRequest对象作为第一个参数,并且通常称之为requestdef current_datetime(request): now = datetime.datetime.now() html = "It is now %s." % now // 视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象 return HttpResponse(html)
b          request         sr   ----------------->     eo   <----------------- 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 中的每个键为 中的name,值则为对应的数据。 # 注意,FILES 只有在请求的方法为POST 且提交的
带有enctype="multipart/form-data" 的情况下才有 # 包含数据。否则,FILES 将为一个空的类似于字典的对象。

三、视图层之HttpResponse对象

响应对象主要有三种形式:

HttpResponse()render()redirect()

1、render()

结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象

render(request, 'index.html'[,context])# 第一个参数是用于生成相应的的请求对象,第二个参数是要使用的模板的名称,第三个参数是添加到模板上下文的字典
# render方法就是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体,render函数相当于temp=Template('

{
{ user }}

')con=Context({
'user':'lqz'}) ret=temp.render(con) print(ret) # return render(request,'index.html') return HttpResponse(ret)

2、redirect()

传递要重定向的一个硬编码的URL

def test(request): ... #return redirect('/showbooks/') return redirect('http://127.0.0.1:8888/showbooks')

四、视图层之JsonResponse对象

from django.http import JsonResponsedef 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、前端

  • 编码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')
博客内容仅供参考,部分参考他人优秀博文,仅供学习使用

转载于:https://www.cnblogs.com/zhuzhiwei-2019/p/10779098.html

你可能感兴趣的文章
like tp
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Maven之setting.xml配置文件详解
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>
String比较
查看>>
Django之Models
查看>>
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>