一、视图函数的理解

视图函数的作用是,对指定的url执行业务逻辑,视图函数将会作为model层和template层的桥梁,最主要的逻辑是操作数据库以及完成模板渲染前的上下文准备。

视图系统的模块:

  1. 请求对象
  2. 业务逻辑

    2.1 连接model

    2.2 连接template
  3. 响应对象

二、视图函数的定位

所有实现wsgi协议的web框架都必须实现如下接口形式的application函数,完成对http请求的http响应,web应用程序和web服务器的分界即从此函数开始。

application函数在web应用程序中被定义,而在wsgi服务器(web服务器)上被无限循环调用,在django中,application函数中会通过路由系统根据url来寻找对应的view,然后执行view视图函数处理业务逻辑。

# 伪代码

def application(environ, start_response):
# 此函数在web应用程序上被定义,在web服务器上被无限循环调用
view = route(environ.url) # 路由系统
response = view(environ, *args, **kw) # 视图系统 return response

django视图功能定位图示

视图函数的本质作用就是:接收一个reqeust请求,正确处理,然后返回一个reponse响应。

为了方便在视图函数中处理请求与响应,reqeust请求报文在web框架中被封装成HttpRequest请求对象,而reponse响应报文也被封装成HttpResponse响应对象。

所以视图函数中,除了处理逻辑之外,还有两个重要的对象,就是请求对象和响应对象。

三、请求对象HttpRequest

请求对象就是对http请求报文的封装,django自动执行封装并传入视图函数第一参数,我们需要在视图函数中调用。

请求对象中有很多需要被进一步处理的数据,常用的接口如下:

常用接口:
HttpRequest.method 请求方法
HttpRequest.GET 对应GET请求类型的数据字典
HttpRequest.POST 对应POST请求类型的数据字典
HttpRequest.path 请求的路径
HttpRequest.get_full_path() 请求的路径+get数据
HttpRequest.is_ajax() 判断是否为ajax形式的请求

四、响应对象HttpResponse

响应对象就是对http响应报文的封装,响应对象需要我们在视图函数中创建,并在视图函数最后return给上层函数即底层控制循环。响应对象意味着web服务程序通过业务逻辑处理后返回的响应信息。

在视图函数中返回响应对象主要有两种形式的方法:

方式1: 以字符串字面量为接口:return HttpResponse('xxx') ,直接返回的字符串会作为html页面的内容,会被浏览器所执行,即,可以返回一个<h1>xxx</h1>

方式2: 以html文件或模板文件为接口:return render(request, 'index.html', {xxx}),可以直接返回最终形态的html字符串。通过render函数调用渲染引擎对模板文件执行渲染操作,

模板文件中包含模板语法,这些模板语法被认为是html文件中的占位符,用于后续填充动态数据,render函数内部最后会执行return HttpResponse操作。

注意:为了提高安全性,render函数在处理{xxx}渲染上下文时,如果包含有可执行的html数据的时候会自动转义成特殊字符,这主要是为了防止插入类似link或者script等这些浏览器会执行的html代码给客户端带来的安全性问题。render函数流程是进行渲染得到http响应报文中的响应体字符串,然后再返回一个HttpResponse对象,这相对于方式1,就是多了渲染的流程。

django框架--视图系统的更多相关文章

  1. Django框架----路由系统(详细)

    Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...

  2. django框架--中间件系统

    目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...

  3. django框架--路由系统

    目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...

  4. Django框架-模板系统

    来看一段代码 def current_datetime(request): now = datetime.datetime.now() html = "<html><bod ...

  5. python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)

    12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名) ...

  6. Django框架----路由系统、视图和模板(简单介绍)

    一.路由配置系统(urls) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表: 你就是以这种方式告诉Django,对于这个URL ...

  7. Python学习(三十二)—— Django之视图系统

    转载自:http://www.cnblogs.com/liwenzhou/articles/8305104.html Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Pyth ...

  8. Django框架----视图(views)

    Django的Views(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误 ...

  9. Django之视图系统

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的python函数(类),它接受web请求并返回web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,或者 ...

随机推荐

  1. 2018.08.28 集合堆栈机(模拟+STL)

    描述 中学数学里集合的元素往往是具体的数字,比如A = {1,2,3},B = {}(空集)等等.但是要特别注意,集合的元素也可以是另一个集合,比如说C = {{}},即说明C有且仅有一个元素--空集 ...

  2. hdu-1121(差分法--数学问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1121 参考文章:https://blog.csdn.net/fengzhizi76506/articl ...

  3. Java 增强 for 循环

    Java 增强 for 循环 Java5 引入了一种主要用于数组的增强型 for 循环. Java 增强 for 循环语法格式如下: for(声明语句 : 表达式) { //代码句子 } 声明语句:声 ...

  4. org.apache.cxf 官方骨架

    mvn archetype:generate -DarchetypeCatalog=remote 用 cxf 筛选结果 官方三大项目骨架 org.apache.cxf:cxf-http-basic ( ...

  5. MFC中添加新的对话框

    MFC工程中,除了系统自动生成的一些对话框之外,还需要根据自己的需求,添加新的对话框.这里总结下自己最近使用的方法. 首先,找到Resource View中自己新建的工程,然后右键,选择Add Cla ...

  6. 【LeetCode】 Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  7. Oracle sql 优化の索引监控

    1.监视索引是否使用 除了主键是完整性约束而自动变为索引外,创建普通索引的目的就是为了提高查询速度,如果我们创建了索引而没有被使用,那么这些不被使用的索引将起到阻碍性能的作用. 语法: --检查某个索 ...

  8. 笔记本U盘安装CentOS 7

    1. 下载镜像,制作U盘安装盘,设置BIOS启动等内容网上有大量的文章,本文不再赘述. 2. 开机U盘启动后会看到这样的界面: 3. 笔记本安装CentOS最容易出问题的地方在于USB安装盘的选择,如 ...

  9. Checkpoint--实现步骤

    Checkpoint 实现步骤: 1.将CheckPoint标记写入日志(标记中包含当前数据库中活动的事务信息),并将Log Block写入持久化存储 2.将Buffer Pool中所有的脏页写入磁盘 ...

  10. SQL Server基础优化

    1.先过滤简单且能筛选大部分数据出去的条件: 2.只查询有用的数据 不返回自己不需要的列,尽量不要使用select *: 不要返回自己不需要的行,尽量使用where条件来过滤自己需要的内容: 考虑使用 ...