美文网首页
Django(四)视图(View)

Django(四)视图(View)

作者: 虐心笔记 | 来源:发表于2019-08-11 16:18 被阅读0次

    视图是Django的MTV架构模式的V部分,主要负责处理用户请求和成相应的响应内容,然后在页面或其他类型文档中显示。主要处理功能和业务上的逻辑。

Response响应类型

    HttpRResponse('hello world'): HTTP状态码200,请求成功

    HttpResponseRedirect('/admin'):HTTP状态码302,重定向admin站点的URL

    HttpResponsePermanenrRedirect('/admin'): 永久重定向

    HttpResponseBadRequest('Nothing'): HTTP状态码400,访问的页面不存在或者请求错误

    HttpRespnseForbidden('NotFound'): HTTP状态码403,没有访问权限

    HttpResponseNotAllowed('NotAllowedGet'): HTTP状态码405,不允许使用该请求方式

    HttpResponseServerError('ServerError'): HTTP状态码500,服务器错误

上述是一些常用的响应方式,实际开发过程中,使用最多的是render()、redirect(),其实是对HttpResponse函数进行封装,render具体解释说明如下:

    request: 请求对象,包含用户请求的相关信息

    template_name: HTML模板文件名,用于生成HTML网页

    context: 对HTML模板的变量赋值,以字典格式表示,默认情况下是一个空字典

    content_tyep: 响应数据的格式,一般情况下使用默认值

    status: HTTP状态码,默认200

    using: 设置HTML模板转换生成HTML网页的模板引擎


数据视图

    视图除了接收用户请求和返回响应内容之外,还可以与模型Model实现数据交互。视图相当于一个处理中心,负责接收用户请求,根据请求信息读取并处理数据库,最后返回生成HTML网页给用户。

    数据视图实质是从models.py导入数据库映射对象,是通过Django内置的ORM框架构建数据库映射,从而生成数据库对象。下面的代码就是将Prduct模型类与数据库表Product构成映射关系:

from django.db import models

# Create your models here.

class Product(models.Model):

    id = models.IntegerField(primary_key=True)

    name = models.CharField(max_length=50)

    type = models.CharField(max_length=20)

数据库库表的迁移和建立这里就不做描述了,后续文章有详细讲解。

视图函数index的处理流程讲解:

    1.type_list用于查询数据表字段type的数据并去重处理,name_list查询数据表字段type和name的数据,查询方式都是由Django内置的ORM提供

    2.将查询所得的数据以字典的数据格式写入变量context,其作用是将该数据返回给HTML模板

    3.当HTML模板接受到变量type_list、name_list后,模板引擎解析并生成对应的HTML文件内容

locals()使用注意:变量context是以字典的形式传参给HTML模板,实际开发过程中,如果传递的变量过多,不易维护和更新,因此使用locals()代替context。在视图函数中所定义的变量名一定要与HTML模板的变量名相同才能生效。


Request的常用属性

    COOKIES: 获取客户端浏览器Cookies信息.实例: data = request.COOKIES

    FILES: 字段对象,包含所有的上载文件,三个键:filename文件名、content-type为类型、content为内容。 实例: file = request.FILES

    GET: 获取get请求的请求参数,字典形式储存。实例: request.GET.get('name')

    META:获取客户端的请求头信息,字典形式储存。实例: request.META.get('REMOTO_ADDR')

    POST: 获取post请求的参数,字典形式储存。实例: request.POST.get('name')

    method: 获取该请求的请求方式,实例: data = request.method

    path: 获取当前请求的URL地址。实例:path = request.path

    user: 获取当前请求的用户信息,实例: name = request.user.username


通用视图

    web开发是一项无聊而且单挑的工作,特别是在视图编码功能方面,为了减少工作量,Django植入了通用视图功能,封装了视图开发常用的代码和模式,可以在无需编码大量代码的情况下,快速完成数据视图的开发 。通用视图是通过定义和声明类的形式实现的,主要分为三类,具体说明如下:

        TemplateView:直接返回HTML模板,但无法将数据库的数据库展示出来

        ListView:能将数据库的数据传递给HTML模板,通常获取某个表的all data.

        DetailView:能将数据库的数据传递给HTML模板,通常获取某个表的单条数据.

    如果URL所指向的处理程序是由通用视图执行的,那么在编码URL时,必须使用as_view()方法,业务通用视图实质是一个类,使用该方式相当于对类进行实例化并由类方法执行处理。views.py文件下编写通用视图,代码如下:

    代码解释说明:

        1.定义ProductList类,该类继承ListView类,具有父类所有特性。

        2.context_object_name:设置HTML模板的变量

        3.template_name:设置HTML模板

        4.queryset:查询数据库数据,查询结果会赋值给context_object_name所设置的变量

        5.重写函数get_queryset:该函数的功能与queryset实现的功能一致

        6.重写函数get_context_data:该函数设置HTML模板的其他变量

    通用视图的代码编写规则有一定的固定格式,根据这个固定格式可以快速开发数据视图,除此之外,通用视图还可以获取url的参数和请求信息,是的通用视图更加灵活,以get_queryset函数为例:

def get_queryset(self):

    print(self.kwargs['id'])

    print(self.kwargs['name'])

    print(self.request.method)

    type_list = Product.objects.values('type').distinct()

    return type_list

    上述代码演示了如何在通用视图中获取url的参数变量和用户的请求信息,代码具体说明如下:

        1.首先对url设置变量id和参数name,这两种设置方式都是日常开发中经常使用的

        2.通用视图在处理用户请求时,url的变量和参数都会存放在通用视图的属性开kwargs中,因此使用self.kwargs['XXX']可以获取变量值或参数值

        3.要获取用户请求信息,可以从属性self.request中获取.

相关文章

  • Django(四)视图(View)

    视图是Django的MTV架构模式的V部分,主要负责处理用户请求和成相应的响应内容,然后在页面或其他类型文档中...

  • 5.Django视图系统

    Django视图系统 Django的View一个视图函数(类),简称视图,是一个简单的Python 函数(类),它...

  • django视图view

    django的视图有两种,一种function式,一种式class式setting文件里面的ROOT_URLCON...

  • Django基础:drf 源码视图解析

    Django 与drf 源码视图解析 一.原生Django CBV 源码分析:View 二.drf CBV 源码分...

  • django rest framework 中的三种视图写法

    一、基本视图类 (APIView/@api_view) 1、类基础视图(APIView) DRF不同于django...

  • Django web框架-----url path name详解

    Django web框架-----url path name详解 quicktool/view.py文件修改视图函...

  • Django的View(视图)

    前言 视图:即一个python函数,可以叫 视图函数,或者简称 视图,定义在 应用/views.py 文件中。作用...

  • zTree文件树状图

    Django+zTree构建组织架构树 js代码 后端view视图代码 呈现效果图:

  • django 类视图解析 -FormView

    django 类视图可以帮我们轻松处理特定功能的逻辑,django 基本类视图分为四类: 基础类视图:ViewTe...

  • Django视图

    什么是Django的View 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求...

网友评论

      本文标题:Django(四)视图(View)

      本文链接:https://www.haomeiwen.com/subject/hkqsjctx.html