Django(四)视图(View)

    视图是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中获取.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。