Django笔记&教程 2-3 视图(view)函数介绍
Django 自学笔记兼学习教程第2章第3节——视图(view)函数介绍
点击查看教程总目录
参考文献:https://docs.djangoproject.com/en/2.2/topics/http/views/
1- 视图(view)函数介绍
先上一段官方说明:
A view function, or view for short, is simply a Python function that takes a Web request and returns a Web response.
This response can be the HTML contents of a Web page, or a redirect, or a 404 error, or an XML document, or an image . . . or anything, really.
The view itself contains whatever arbitrary logic is necessary to return that response.
This code can live anywhere you want, as long as it’s on your Python path.
There’s no other requirement–no “magic,” so to speak.
For the sake of putting the code somewhere, the convention is to put views in a file called views.py, placed in your project or application directory.
这里我翻译一下上面的意思:
视图函数(或简称为视图,view), 简单来说,就是一个python函数,这个函数有什么特点呢:它接受Web请求(request)并返回Web响应(response)。
这个Web响应(response)可以是网页的HTML内容(HTML contents of a Web page),重定向(redirect),404错误,XML文档或图像...或任何东西!
而视图函数本身(内部)包含返回这个响应所需的任意逻辑,视图函数的代码可以存在于任何您想要的地方,只要这个地方位于您的Python路径上。
没有什么其他的要求,没有什么特殊的技巧或者什么神奇的用法。
但是,为了方便,还是会将其代码集中写在某个地方,惯例是将视图放在名为views.py的文件中,该文件位于项目或应用程序(app)目录中。
回顾我们之前写的一个最简单的视图函数hello
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello")
一行一行来解释一下这些代码:
- 首先,从
django.http
模块中导入HttpResponse
类 - 接下来,我们定义一个名为
hello
的函数。 这是视图功能。 每个视图函数都将HttpRequest
对象作为其第一个参数,通常将其命名为request
。
注意:视图函数的名称并不重要;它不需要遵循特定的方式命名才能让Django识别它。这里我们将它称为hello,因为这个名称清楚地表明了它的作用。 - 该视图返回一个
HttpResponse
对象,其中包含生成的响应,这里是一个简单的"Hello"
文本。每个视图函数都需要返回一个HttpResponse对象。(也有例外情况,具体遇到了后面再补充)
注意:返回一个HttpResponse
对象,不代表视图函数一定要写成return HttpResponse("...")
,也可以返回一个看起来像其他东西,但实际是HttpResponse
对象的或者能生成HttpResponse
对象的函数
2- HttpRequest
介绍
当页面被请求时,Django会自动创建一个包含请求元数据的HttpRequest
对象。
然后Django加载适当的视图,将HttpRequest
作为第一个参数传递给视图函数。
视图函数里,通常将其命名为request
。
简单介绍HttpRequest
对象的几个常用属性:
method
请求中使用的HTTP方法的字符串(这个字符串是大写的)
这个属性常用于判断这是什么请求
示例如下
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
GET
一个类似字典的对象QueryDict
,包含所有给定的HTTP GET
参数。HTTP GET
参数即get请求通过url传递的参数
以之前的视图函数和url为例,访问http://127.0.0.1:8000/hello?a=1&a=2&c=3
, 其中?
后面是get请求传递的参数,所以该request
的GET
为<QueryDict: {'a': ['1', '2'], 'c': ['3']}>
,其中的键值对获取方法和字典的语法等同POST
一个类似字典的对象QueryDict
,包含所有给定的HTTP POST参数,前提是请求包含表单数据。
3- HttpResponse
介绍
与Django自动创建的HttpRequest
对象不同,HttpResponse
对象由开发者负责编写对应的代码去生成。具体来说,开发者要在每个视图中,都负责实例化、填充和返回HttpResponse
。
HttpResponse
对象的内容可以是一个纯文本,比如上面的HttpResponse("Hello")
HttpResponse
对象的内容也可以是html文本(通常都是),比如
def hello(request, name):
html = "<html><body>Hello, %s</body></html>" % name
return HttpResponse(html)
上面是一个非常简单的html文本例子,我们可以想像一下,如果html文件一长,这里面就是各种html代码和python代码交错,可读性很差。
所以html文本一般都会放在专门的html文件中
但是我们进一步想一下,如果一个html的内容是写死的话,那么不同的name就不需要不同的html文件了,这不科学,也不现实。
我们有这样一种需要,即html中的内容可以由视图中的python变量动态生成,比如能由视图函数中的name
变量生成html中的对应文本。
想要动态的生成html的内容,我们需要使用到模板(template
),这个下一章将会讲到。
Django笔记&教程 2-3 视图(view)函数介绍的更多相关文章
- Django笔记&教程 2-1 URL与View关系
Django 自学笔记兼学习教程第2章第1节--URL与View关系 点击查看教程总目录 参考:how-django-processes-a-request 1- Django处理请求(request ...
- Django笔记&教程 4-1 模型(Models)介绍
Django 自学笔记兼学习教程第4章第1节--模型(Models)介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/db/mo ...
- Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Django笔记&教程 2-2 URL详细匹配规则
Django 自学笔记兼学习教程第2章第2节--URL详细匹配规则 点击查看教程总目录 本章第一节中我们简单介绍了URL与View关系 简单概括来说,网页请求的url会通过urls.py里面的urlp ...
- Django笔记&教程 5-1 基础增删查改
Django 自学笔记兼学习教程第5章第1节--基础增删查改 点击查看教程总目录 第四章介绍了模型类models.Model和创建模型,相当于介绍了数据库表和如何创建数据库表. 这一章将介绍如何使用模 ...
- Django笔记&教程 2-4 视图常用
Django 自学笔记兼学习教程第2章第4节--视图常用 点击查看教程总目录 1 - shortcut 视图函数需要返回一个HttpResponse对象或者其子类对象. 不过很多时候直接手写建立一个H ...
- Django笔记&教程 3-1 模板(Template)基础
Django 自学笔记兼学习教程第3章第1节--模板(Template)基础 点击查看教程总目录 1 介绍 模板文件:让Django能够自动生成html代码 作为一个web框架,Django需要需要在 ...
- Django笔记&教程 7-3 拓展CBVs(Class-based views)
Django 自学笔记兼学习教程第7章第3节--拓展CBVs(Class-based views) 点击查看教程总目录 一般而言,直接使用原生的Class-based views,能展现的样式和内容是 ...
随机推荐
- IE浏览器报400错误:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
前言: 在用IE浏览器时访问tomcat项目时,页面报400错误,后台错误: java.lang.IllegalArgumentException: Invalid character found i ...
- SQL Server附加数据库错误5120处理方法
SQL Server附加数据库5120错误 当我们从另外一台服务器复制过来的数据库,可能会有如下错误: 解决方法 1.给数据库所在文件夹增加用户Everyone并赋予完全控制权限 2.以管理员身份运行 ...
- css新增属性之边框
css3新增属性 边框属性 背景属性 文字属性 颜色属性 边框属性 属性 说明 border-radius 设置边框圆角 border-image 设置图像边框 border-shadow 设置边框阴 ...
- 极简SpringBoot指南-Chapter05-SpringBoot中的AOP面向切面编程简介
仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...
- SphereEx 登陆 ApacheCon Asia|依托 ShardingSphere 可插拔架构体系打造数据应用完整生态
2021 年 8 月 8 日,ApacheCon 首次亚洲大会于线上正式闭幕.作为久负盛名的开源盛宴,本届 ApacheCon Asia 受到了海内外众多开源领域人士的关注. 作为 Apache 软件 ...
- 题解 有标号DAG计数
题目传送门 题目大意 给出\(n\),求出对于任意\(t\in[1,n]\),点数为\(t\)的弱联通\(\texttt{DAG}\)个数.答案对\(998244353\)取模. \(n\le 10^ ...
- bzoj4712 洪水(动态dp)
看起来很模板的一个题啊 qwq 但是我还是wei 题目要求的是一个把根节点和所有叶子断开连接的最小花费. 还是想一个比较\(naive\)的做法 我们令\(dp1[i]\)表示,在\(i\)的子树内, ...
- 常用的SQL查询思维/场景
前言 现在大多数开发工作中,已经可以使用一些组件或框架提供的强大的条件构造器来完成查询数据了,虽然强大而且方便,但也还是存在很多业务场景需要实打实的编写传统SQL语句.特别一些测试.维护.问题排查的时 ...
- noip模拟78
考试过程:先读题,然后觉得开题顺序1 4 2 3. 首先是T1,要是不考虑重复这题很简单,但是考虑重复就比较复杂了,我打完,对拍完差不多用了两个小时,然后就是忘了算内存,结果内存爆了,\(100pts ...
- python函数参数类型:位置参数、默认参数、动态参数、关键字参数
1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 ...