Django FBV视图

注明

本笔记主要参考《Djangoxxx》《Django企业开发实战》,这两本书前者详细,后者精炼。学习之后真的是感觉自己进步了很多。极力推荐



前言

视图view是Django的MTV框架模式的v部分,主要负责处理用户请求、生成相应的响应内容。我们可以用两种方式处理HTTP请求一种是视图函数,即在视图里定义def视图,这种方式称为FBV,另一种是用视图类,这部分内容会在CBV视图中扩展。关于什么时候适合使用FBV,什么时候适合使用CBV在后面的文章将会讲述。


一、返回响应内容

视图函数通过return返回响应内容,然后生成网页呈现在浏览器上。return是内置语法,用于设置函数的返回值,设置不同的响应方式还需要内置的Django响应类和响应函数。

Httpresponse(content,status_code=200, content_type= ‘text/html’)

参数解释:
content:返回的内容。一般是网页内容或JSON数据为主
status_code:返回的HTTP响应状态码。
content_type:返回的数据的MIME类型,默认为text/html。浏览器会根据这个属性,来显示数据。
如果是text/html,那么就会解析这个字符串,如果text/plain,那么就会显示一个纯文本。
常用的Content-Type如下:返回的数据的MIME类型,默认为text/html。浏览器会根据这个属性,来显示数据。如果是text/html,那么就会解析这个字符串,如果text/plain,那么就会显示一个纯文本。
常用的Content-Type如下:text/html(默认的,html文件)、text/plain(纯文本)、text/css(css文件)、text/javascript(js文件)、multipart/form-data(文件提交)、application/json(json传输)、application/xml(xml文件)一般在使用‘text/plain’时,都会添加‘charset=utf-8’,否则是会乱码的。
	注意:django.shortcuts与django.http均可以导出Httpresponse

示例:


from django.shortcuts import (render,HttpResponse)
# Create your views here.
def test(request):
    return HttpResponse('<h1>标题</h1>',status=200,content_type='text/html')

render

在上面示例中发现返回网页内容会非常麻烦,因此在此基础上封装处理定义了函数render、render_to_response函数。两者语义完全一致,但render_to_response已被废弃。render的语法格式如下。

render(request, template_name,context=None,content_type=None,status=None,using=None)
参数解释:
request浏览器像服务器发送的请求对象,包含许多有用信息后文会详细讲述。
template_name:设置templates文件夹下的模板文件名,用于生成网页内容
context:对模板变量进行赋值,以字典格式表示。也可以用local()函数代替local会将所有的处在函数中的变量赋值给context,但不建议这么做,因为不便于后期的维护。我们常常会这么做
#--------
context={
   
    'post_list':post_list,
    'tag':tag,
    'category':category,
         }
return render(request,'blog/list.html',context)
#return render(request,'blog/list.html',context=context)
#----------
content_type:使用默认即可
status:使用默认即可
using:模板解析引擎,后面会详细讲述

JsonResponse类

Httpresponse是Django响应过程的核心类,它是所有响应类的基础。在Httpresponse类的基础上封装一个JsonResponse类。目的是能够更加方便返回一个json 。
示例

from django.http import HttpResponse,JsonResponse
def jsonresponse_view(request):
    persion = {
   
        'username':'ziliao',
        'age':18,
        'height':180
    }
    # persion_str = json.dumps(persion)
    # response = HttpResponse(persion_str,content_type='application/json')
    response = JsonResponse(persion)
    return response

默认情况下JsonResponse只能对字典进行dump,如果想要对非字典的数据进行dump,那么需要给JsonResponse传递一个safe=False参数。示例代码如下:

def jsonresponse_view(request):
    persions = [
        {
   
            'username': 'ziliao',
            'age': 18,
            'height': 180
        },
        {
   
            'username': 'ziliao1',
            'age': 20,
            'height': 180
        }
    ]
    # persion_str = json.dumps(persion)
    # response = HttpResponse(persion_str,content_type='application/json')
    response = JsonResponse(persions,safe=False)
    return response

文件的下载功能

views.py文件函数中的响应内容除了返回网页信息,其实还可以实现返回文件,即实现文件下载功能。

实现文件下载的相关类或方法
•	HttpResponse:是响应过程的核心类,它的底层功能类是HttpResponseBase.实现文件下载功能具有很大的弊端,其工作原理:将文件读取到内存,然后输出到浏览器上实现下载功能。不推荐使用,下载文件过大,则会占用过多内存
•	StreamingHttpResponse:是在HttpResponseBase的基础上进行继承与重写的,它实现流式响应输出【使用python迭代器将数据分段处理并传输】,使用于大规模数据响应和文件传输响应。参数介绍,如下部分源码
def __init__(self, streaming_content=(), *args, **kwargs):
参数解释
- streaming_content:代表文件或数据内容。可以为迭代器对象或字节流
- *args, **kwargs:可以设置响应内容的数据格式content_type、响应状态码
•	FileResponse:在StreamingHttpResponse上继承和重写的,它适用于文件的流式响应输出,只用于文件的传输响应。参数介绍:
def __init__(self, *args, as_attachment=False, filename='', **kwargs):
参数解释
- as_attachment:是否提供文件下载功能,False文件会在浏览器中打开,打不开才会将文件内容下载到本地,但没有设置文件后缀名,此时filename不起作用。
- filename:设置文件名,filename与as_attachment有关,as_attachment为Flase则不起作用。若as_attachment为True,但filename为空则默认为原文件的名字
具体用哪种方法看心情。

HTTP请求对象

即request参数。
下面对request参数即WSGIRequest对象的一些常用属性、方法进行说明:
属性:

1.	COOKIE获取浏览器的的Cookie信息,以字典的形式表示
2.	FILFS:包含所有上传文件的所有信息
3.	GET获取GET请求参数,操作起来类似于字典
4.	POST:获取POST请求参数
5.	META:获取客户端的请求头参数
6.	method:获取当前请求的请求方式(GET/POST请求)
7.	path:获取当前请求的路由地址。
8.	session:一个类似于字典的对象,用来操作服务器的会话信息,可临时存放用户信息
9.	user:AUTH认证系统时,会详细介绍

方法:

is_secure():是否采用HTTPS协议
is_ajax()是否采用AJAX发送HTTP请求。
get_host()获取服务器域名,如果在访问的时候设有端口,就会加上端口号。
get_full_path():返回路由地址
get_raw_uri();获取完整的网址信息。
set_cookie:用来设置cookie信息
delete_cookie:用来删除cookie信息。
write:HttpResponse是一个类似于文件的对象,可以用来写入数据到数据体(content)中。

文件上传


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值