Django,作为一个强大的Python Web框架,提供了一套完整的工具来构建这些动态页面。在Django的架构中,视图(Views)是处理用户请求并生成响应的关键组件。...本文将深入探讨Django视图的工作原理,以及如何使用它们来构建动态Web页面。 1....它们通常继承自 django.views.View 类,并重写 get、post 等方法来处理不同的HTTP请求方法 2. 处理模板 Django视图通常与模板一起工作,以生成动态HTML内容。...模板是使用Django模板语言编写的HTML文件,它们可以包含变量和标签,这些变量和标签在视图中被渲染。 3. 传递上下文数据 上下文是Django视图和模板之间的桥梁,它允许视图向模板传递数据。...通过本文的介绍,你应该对如何在Django中使用视图来处理请求、渲染模板、传递上下文数据、处理表单以及错误处理有了深入的理解。这些技能是构建复杂且功能丰富的Web应用的基础。
Django,作为一个强大的Python Web框架,提供了一套完整的工具来构建这些动态页面。在Django的架构中,视图(Views)是处理用户请求并生成响应的关键组件。...本文将深入探讨Django视图的工作原理,以及如何使用它们来构建动态Web页面。1. Django视图简介Django视图是Web应用的心脏,它们负责接收用户的请求,处理这些请求,并返回相应的响应。...它们通常继承自 django.views.View 类,并重写 get、post 等方法来处理不同的HTTP请求方法2. 处理模板Django视图通常与模板一起工作,以生成动态HTML内容。...模板是使用Django模板语言编写的HTML文件,它们可以包含变量和标签,这些变量和标签在视图中被渲染。3. 传递上下文数据上下文是Django视图和模板之间的桥梁,它允许视图向模板传递数据。...通过本文的介绍,你应该对如何在Django中使用视图来处理请求、渲染模板、传递上下文数据、处理表单以及错误处理有了深入的理解。这些技能是构建复杂且功能丰富的Web应用的基础。
对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的。首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...将 index 视图函数改写为类视图 针对这种从数据库中获取某个模型列表数据(比如这里的 Post 列表)的视图,Django 专门提供了一个 ListView 类视图。...这个方法返回的值是一个字典,这个字典就是模板变量字典,最终会被传递给模板。...最终传递给浏览器的 HTTP 响应就是 get 方法返回的 HttpResponse 对象。 还是无法理解么?在不涉及源码的情况下我也只能讲这么多了。...此外,这里是 Django 官方文档对类视图的讲解,尽管我觉得这部分文档对类视图也讲得不是很清楚,不过也值得作为参考吧 基于类的视图概述。
在 Django 中,视图的全称应该叫『视图函数』,简称视图(Views)。从字面上理解视图就是 Python 函数,是处理用户请求并返回相应内容的核心组件。...在 Django 中,当你使用类视图时,需要调用 as_view() 方法来将类视图转换为可调用的视图函数。...这是因为 Django 的 URL 路由系统需要将视图映射到 URL 模式,而类视图本身只是Python 类,无法直接作为视图函数使用。...因此,需要使用 as_view() 方法将类视图转换为可调用的函数,以便在 URL 配置中使用。...【方法1】 将项目配置文件的 django.middleware.csrf.CsrfViewMiddleware 注视掉。
表单类通常是从Django中的forms.Form类派生而来。在定义表单类时,我们需要为每个要显示的表单字段定义一个类属性。...在模板中显示表单在Django中,我们可以使用模板系统来渲染表单并在Web页面中显示它们。为了在模板中显示表单,我们需要将表单类实例化,并将其作为上下文变量传递到渲染模板的函数中。...在Django中,我们通常使用视图函数来处理表单数据。...如果是,我们实例化ContactForm表单类,并将POST数据作为参数传递给它。我们接着检查表单是否有效,如果是,我们可以通过访问表单的cleaned_data属性来获取已验证的表单数据。...最后,我们将用户重定向到成功页面。如果HTTP方法不是POST,我们实例化表单类,并将其作为上下文变量传递给渲染模板的函数。
的static文件夹,将里面所有的文件复制到STATIC_ROOT。...URLconf不检查请求的方法。换句话将,所有的请求方法---同一个URL的POST、GET、HEAD等等--都将路由到相同的函数。...2.1.4 捕获的参数永远是字符串 每个捕获的参数都作为一个普通的Python字符串传递给视图,无论正则表达式使用的是什么匹配方式。...), url(r'^blog/', include('blog.urls')), ] 2.2 传递额外的选项给视图函数(了解) URLconfs具有一个钩子,让你传递一个Python字典作为额外的参数传递给视图函数...* 没有* 使用圆括号 而且也无法给该方法传递参数;你只能调用不需参数的 # 方法。
这些内容相对比较固定,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取然后传递给模板,则每个页面对应的视图函数里都要写一段获取这些内容的代码,这会导致很多重复代码。...首页视图函数中从数据库获取文章列表并保存到 post_list 变量,然后把这个 post_list 变量传给模板,模板使用 for 模板标签循环这个文章列表变量,从而展示一篇篇文章。...两个括号括起来的地方是两个命名组参数,Django 会从用户访问的 URL 中自动提取这两个参数的值,然后传递给其对应的视图函数。...我们可以看到评论表单和评论列表是位于文章详情页面的,处理文章详情页面的视图函数是 detail,相应地需要更新 detail,让它生成表单和从数据库获取文章对应的评论列表数据,然后传递给模板显示: blog...下的全部评论 comment_list = post.comment_set.all() # 将文章、表单、以及文章下的评论列表作为模板变量传给 detail.html 模板,以便渲染相应数据
它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。 注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。...然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。...Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。...() 函数 一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称 一个绝对的或相对的URL,将原封不动的作为重定向的位置。...传递一个具体的ORM对象(了解即可) 将调用具体ORM对象的get_absolute_url() 方法来获取重定向的URL: from django.shortcuts import redirect
此外,在 博客从“裸奔”到“有皮肤”[3] 中提过,所有模型的字段都接受一个 verbose_name 参数(大部分是第一个位置参数),django 在根据模型的定义自动生成表单时,会使用这个参数的值作为表单字段的...django 会根据表单类的定义自动生成表单的 HTML 代码,我们要做的就是实例化这个表单类,然后将表单的实例传给模板,让 django 的模板引擎来渲染这个表单。 那怎么将表单类的实例传给模板呢?...因为表单出现在文章详情页,一种想法是修改文章详情页 detail 视图函数,在这个视图中实例化一个表单,然后传递给模板。...': post, } 从定义可以看到,show_comment_form 模板标签使用时会接受一个 post(文章 Post 模型的实例)作为参数,同时也可能传入一个评论表单 CommentForm...首先视图函数被 require_POST 装饰器装饰,从装饰器的名字就可以看出,其作用是限制这个视图只能通过 POST 请求触发,因为创建评论需要用户通过表单提交的数据,而提交表单通常都是限定为 POST
它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。 注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。...然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。...() 函数 一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称 一个绝对的或相对的URL,将原封不动的作为重定向的位置。...传递一个具体的ORM对象(了解即可) 将调用具体ORM对象的get_absolute_url() 方法来获取重定向的URL: from django.shortcuts import redirect
在模板中显示表单要在模板中显示表单,您需要将表单类实例化,并将其传递到模板上下文中。然后,在模板中使用Django模板语言(DTL)来呈现表单字段。...这是Django防止跨站请求伪造(CSRF)攻击的一种机制,它生成一个隐藏的表单字段,其中包含一个随机的令牌值。在处理表单提交时,Django将检查令牌是否有效。...处理表单数据在Django中,表单数据是由视图函数处理的。当用户提交表单时,Django将请求发送到视图函数,并将表单数据作为POST请求参数传递给函数。...如果是POST,我们使用提交的数据初始化表单类,并检查表单数据是否有效。如果表单数据有效,则从表单中提取数据并进行相应的处理。最后,我们将用户重定向到一个“感谢”页面。...如果请求的HTTP方法不是POST,则说明这是第一次请求该页面,我们将表单类实例化,并将其传递到渲染模板的上下文中。
5.2.使用Django模板系统 这基本上就上 Django 的开发流程了,写好处理 HTTP 请求和返回 HTTP 响应的视图函数,然后把视图函数绑定到相应的 URL 上。 但是等一等!...这是 Django 规定的语法。用 {{ }} 包起来的变量叫做模板变量。Django 在渲染这个模板的时候会根据我们传递给模板的变量替换掉这些变量。最终在模板中显示的将会是我们传递的值。...我们前面在视图函数 index 里给模板传了一个 post_list 变量,它里面包含着从数据库中取出的文章列表数据。...P[0-9]+) 表示命名捕获组,其作用是从用户访问的 URL 里把括号内匹配的字符串捕获并作为关键字参数传给其对应的视图函数 detail。...,它根据我们从 URL 捕获的文章 id(也就是 pk,这里 pk 和 id 是等价的)获取数据库中文章 id 为该值的记录,然后传递给模板。
我们知道每一个 URL 对应着一个 Django 的视图函数,于是 Django 调用这个视图函数,我们在视图函数中写上处理用户通过表单提交上来的数据的代码,比如验证数据的合法性并且保存数据到数据库中,...我们可以看到评论表单和评论列表是位于文章详情页面的,处理文章详情页面的视图函数是 detail,相应地需要更新 detail,让它生成表单和从数据库获取文章对应的评论列表数据,然后传递给模板显示: blog...下的全部评论 comment_list = post.comment_set.all() # 将文章、表单、以及文章下的评论列表作为模板变量传给 detail.html 模板,以便渲染相应数据...我们在表单的视图函数里传递了一个 form 变量给模板,这个变量就包含了自动生成 HTML 表单的全部数据。在 detail.html 中通过 form 来自动生成表单。...显示评论内容 在 detail 视图函数我们获取了全部评论数据,并通过 comment_list 传递给了模板。
然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。 ? ...cbv的实现原理通过看django的源码就很容易明白,大体就是由url路由到这个cbv之后,通过cbv内部的dispatch方法进行分发,将get请求分发给cbv.get方法处理,将post请求分发给cbv.post...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。 ...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。...传递一个具体的ORM对象(了解即可) 将调用具体ORM对象的get_absolute_url() 方法来获取重定向的URL: from django.shortcuts import redirect
对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...将 index 视图函数改写为类视图 针对这种从数据库中获取某个模型列表数据(比如这里的 Post 列表)的视图,Django 专门提供了一个 ListView 类视图。...template_name:指定这个视图渲染的模板。 context_object_name:指定获取的模型列表数据保存的变量名,这个变量会被传递给模板。...最终传递给浏览器的 HTTP 响应就是 get 方法返回的 HttpResponse 对象。 还是无法理解么?在不涉及源码的情况下我也只能讲这么多了。...此外,这里是 django 官方文档对类视图的讲解,尽管我觉得这部分文档对类视图也讲得不是很清楚,不过也值得作为参考吧 基于类的视图概述[3]。
框架中由url传递给视图函数参数的一种方法。...如果抛出异常,那么页面上返回执行的html文字 return render(request,'ljyblog/ljyEditUser.html',{'currentUser':curuser}) ##将当前用户实例传递到模板页面...url通过userID这个参数传递到视图函数getLjyUserByUserID,然后视图函数就可以根据这个用户编号去数据库中获取对应的用户对象了。...现在我们对这个页面进行编写,我们使用ljyEditUser.html作为页面模板,模板的代码如下所示: 将“编辑”页面通过form表单POST过来的所有数据利用request的POST字典接收并保存到查询出来的用户的相应的字段,最后通过save方法保存到数据库即可。
Django视图层主要工作是衔接模型和模板,接收请求,进行处理,返回应答。...URL参数 进行url匹配时,把所需要传递的参数设置成一个正则表达式组,Django框架就会自动把匹配成功后相应组的内容作为参数传递给视图函数。...def login(request): # 读取Cookie中username的值,并将值传递给模板 username = request.COOKIES.get('username',...def login(request): # 读取Cookie中username的值,并将值传递给模板 username = request.COOKIES.get('username',...'') # 读取Session中password的值,并将值传递给模板 password = request.session.get('password', '') return
Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。 ?...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。 其实request参数就接收了页面请求....因此,不应该使用 if request.POST 来检查使用的是否是POST 方法;应该使用 if request.method == "POST" 另外:如果使用 POST 上传文件的话,文件信息将包含在...参数可以是: 一个模型:将调用模型的get_absolute_url() 函数 一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称 一个绝对的或相对的URL,将原封不动的作为重定向的位置...传递一个具体的ORM对象(了解即可) 将调用具体ORM对象的get_absolute_url() 方法来获取重定向的URL: from django.shortcuts import redirect
如果请求方法是POST,视图函数将获取用户提交的文章标题和内容,并创建一个新的Post对象,然后将用户重定向到新创建的文章的详细页面。...如果请求方法是GET,视图函数将渲染一个包含创建新文章表单的HTML模板。 第二个视图函数是post_detail,它显示单个博客文章的详细信息。...视图函数获取文章的slug,并使用get_object_or_404函数从数据库中获取文章对象。然后,视图函数将文章对象传递给包含文章详细信息的HTML模板。...第三个视图函数是post_edit,它允许用户编辑现有的博客文章。如果请求方法是POST,视图函数将获取用户提交的文章标题和内容,并更新现有的Post对象,然后将用户重定向到更新后的文章的详细页面。...这个视图函数使用Django的通用视图类CreateView来处理创建新文章的表单,然后重定向到post_list视图函数,这个视图函数将渲染一个包含所有文章的列表的HTML模板。
'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ] #注意:上面匹配都加了小括号,这些括号里面的值会当作参数传递到后面的视图函数中...P[0-9]{2})/$', views.article_detail), ] 这个实现与前面的示例完全相同,只有一个细微的差别:捕获的值作为关键字参数而不是位置参数传递给视图函数。...注意: 无论正则表达式使用的是什么匹配方式,每个捕获的参数都作为一个普通的Python 字符串传递给视图 例如,下面这行URLconf 中: url(r'^articles/(?...URLconf 不检查请求的方法。换句话讲,所有的请求方法 —— 同一个URL的POST、GET、HEAD等等 —— 都将路由到相同的函数。...在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查: 在模板中:使用url 模板标签。
领取专属 10元无门槛券
手把手带您无忧上云