Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数。 ?...): # 指明要操作的Model(展示 Publisher 的所有对象) model = Publisher # 在模板 context 中 model 的变量名,默认是 object_list...② DetailView:显示一个对象的某个属性详细信息 用于显示某一 Model 中的一个 object 的详细信息。...用属性 model 或 queryset 指定要操作的 Model 或 queryset; DetailView 会根据 URLConf 中的 或 筛选出一个
在Django中,我们可以通过表单的初始化参数initial来传递自定义的初始值给表单字段。如果我们想要在视图中设置表单的初始值,可以在视图中创建表单的实例时,传递一个字典给initial参数。...1、问题背景我们遇到了这样一个问题:在使用 Django 表单时,我们希望将自定义表单中的值传递到视图中。然而,我们发现无法为多选选项的每个选项传递值。...在渲染表单时,只有一个字符字段,而多选框中有多个选择。我们想知道是否有办法解决这个问题,以及表单集是否可以在这里提供帮助。我们对 Django 还很陌生,因此希望得到一些解释,以便更好地理解和学习。...'outcomevalue_%s' % outcome.pk] = forms.CharField(widget=forms.TextInput(attrs={'size':'30'}) 方法二:使用表单集另一种解决方案是使用表单集...表单集允许我们创建一组类似的表单,每个表单都可以处理单个对象。在我们的例子中,我们可以创建一个表单集来处理每个 StateOptionOutcome 对象。
文章目录 前言 1 编写一个简单的表单 1.1 模版中新增表单 1.2 视图中新增交互处理 1.3 重定向的 results 页面增加显示 1.4 完善 results.html 页面代码 2 通用视图...1 编写一个简单的表单 1.1 模版中新增表单 更新一下在上一个教程中编写的投票详细页面的模板 (“polls/detail.html”) ,增加一个 HTML 元素: {{ question.question_text... 2 通用视图 投票应用中的 detail 和 results 视图的操作都差不多,显得冗余。...由于这种情况特别常见,Django 提供一种快捷方式,叫做“通用视图”系统。 通用视图将常见的模式抽象化,可以使你在编写应用时甚至不需要编写Python代码。...让我们将我们的投票应用转换成使用通用视图系统,仅仅需要做以下几步来完成转换: 1.转换 URLconf。 2.删除一些旧的、不再需要的视图。 3.基于 Django 的通用视图引入新的视图。
开发环境 django 1.11 DetailView 的相关源码 # .....\Lib\site-packages\django\views\generic\dates.py class DateDetailView(SingleObjectTemplateResponseMixin...This'll get passed as the queryset to DetailView.get_object, # which'll handle the 404...\Lib\site-packages\django\views\generic\detail.py class SingleObjectMixin(ContextMixin): """...里面的 get_object class DetailView(generic.DetailView): model = Article # 模型名称 template_name =
这意味着,当有人选择了一个单选按钮并提交了表单,将会发送 的 POST 数据是 choice=3。这是 HTML 表单中的基本概念。...使用通用视图:优化代码 detail() ( 在 教程 第3部分 中) 和 results() 视图 都很简单 – 并且还有上面所提到的冗余问题。...DetailView 通用视图期望从 URL 中捕获名为 “pk” 的主键值,因此我们将 poll_id 改为 pk 。...默认情况下, DetailView 通用视图使用名为 /_detail.html 的模板。在我们的例子中,将使用名为 “polls/poll_detail.html” 的模板。...在 DetailView 中 poll 变量是自动提供的 – 因为我们使用了一个 Django 模型 (Poll) ,Django 能够为上下文变量确定适合的名称。
Django为你提供了一个简单的方法来避免这个困扰,那就是在form表单内添加一条{% csrf_token %}标签,标签名不可更改,固定格式,位置任意,只要是在form表单内。...现在,创建一个Django视图来处理提交的数据,在Part3中已经创建了一个URLconf ,包含这一行: # polls/urls.py url(r'^(?...这里使用两个通用视图:ListView和DetailView。这两个视图分别代表“显示对象列表”和“显示特定类型对象的详细信息页面”的抽象概念。 每个通用视图需要知道它将作用于哪个模型。...这由model 属性提供; DetailView都是从URL中捕获名为"pk"的主键值,因此才需要把polls/urls.py中question_id改成了pk以使通用视图可以找到主键值。...Part3-视图和模板 Django 1.10中文文档-第一个应用Part4-表单和通用视图
前景: 我在使用django的form组件时,发现在view函数中的`form.is_valid()`在form表单校验未通过的情况下,返回的仍然是True,最后发现还是form表单的问题,异常函数并没有传递给
1、通用视图 urls.py: from django.views.generic import TemplateView path(r'about/',TemplateView.as_view(template_name...="about.html")), 2、通用视图 about.html xx/templates/about.html 3、List obj的通用视图 urls.py: from django.views.generic...Category.objects.all().order_by('name') return super(IndexView, self).get_context_data(**kwargs) 6、DetailView...用法: class ArticleDetailView(DetailView): model = Article template_name = "blog/detail.html" context_object_name...当用户输入信息未通过表单验证,显示错误信息。当用户输入信息通过表单验证提交后,转到其它页面。
在 Django 中,可以通过使用 ModelForm 和 InlineFormSet 来实现多层(嵌套)模型表单。这样可以在一个表单中同时编辑主模型及其相关的子模型。...下面是一个示例,演示如何实现这种多层嵌套的表单。1、问题背景如何使用 Django 的 Form 来创建涉及多个模型的多层嵌套表单?...在 Django 初学者使用 Form 时遇到了错误“invalid literal for int() with base 10: 'test'”。...需要创建涉及多个模型的表单,例如“测验-问题-答案”模型,并且每个测验包含多个问题,每个问题有多个答案。2、解决方案方法一使用 Django 的 ModelForm 来创建各个模型的表单。...方法二使用 Django 的 InlineFormSet 和 ModelForm 来创建多层表单。InlineFormSet 可以用来创建嵌套的表单集,其中每个表单集对应一个模型。
方法: get_success_url():决定在表单成功验证后重定向到的URL,默认返回success_url. form_valid(form):在表单验证成功后调用该方法(注意并没有对数据进行操作...该视图用法与CreateView基本相同,仅在BaseUpdateView中对get()和post()的内部实现有区别. 6.DeleteView ?...import DetailView from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.core.urlresolvers...可以直接用Django通用视图里的UpdateView和CreateView。...id="id_subject" type="text" name="subject" maxlength="100" /> 其它form在模版中的渲染方式还包括: form.as_ul:渲染表单为一系列的
clean user_profile = self.instance.user_profile File "/usr/local/lib/python2.7/dist-packages/django...解决方案根据错误信息,可以发现问题是 FilterForm 是一个绑定表单,需要有一个模型实例作为上下文。在测试用例中,没有为 FilterForm 设置模型实例。...为了解决这个问题,可以在测试用例中添加以下代码:filterform = FilterForm()#print filterform.is_valid()form_data = {'keyword':...因此,我们找到这两个列表在索引 3 和 4 处相交。线性方程法:另一种方法是将列表中的元素视为线段,使用线性方程求解线段相交点。我们可以构造一个线性方程组,其中每个方程代表列表中的一条线段。...因此,这两个列表在点 (6, 3) 处相交。
于是,Django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图(Class Based View)。...使用类视图是 Django 推荐的做法,而且熟悉了类视图的使用方法后,能够减少视图函数的重复代码,节省开发时间。接下来就让我们把博客应用中的视图函数改成基于类的通用视图。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。...具体的实现我们以后会专门开辟一个专栏分析类视图的源代码,到时候就能看出 Django 使用的魔法了)。..., DetailView # 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的
Django源码学习-9-TemplateView 通用视图 ?...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...在编程中mixin是指为继承它的class提供额外的功能,但它自身却不能单独使用的类。在具有多继承能力的编程语言中, mixin可以为类增加额外功能或方法。...from django.views.generic import View 这个类是通用类的基类,其它类都是继承自这个类。 ?...Django把基本的http请求和响应抽象出来,封装成各自的类,在使用过程中只需把各个基类聚合到一起使用,可以按照要求重写自己需要的方法,那么就把这些基类称为Mixin。
继上篇 django2.0入门教程第三节,介绍了django2.0的视图views和模板template, 本节介绍如何在前台进行投票。...构建一个简单的表单提交页 polls/templates/polls/detail.html {{ question.question_text }} {% if error_message...{% endfor %} 代码解析: form表单提交的...将问题的相关选项遍历,以单选框显示 form表单用post方式提交数据 配置url polls/urls.py path('/vote/', views.vote, name...入门教程不会对代码进入深入的讲解,先大致了解其作用即可,后续再逐个模块进行解析 源码下载 相关源码包 如果对django2.0教程感兴趣,请关注我的简书,持续更新中...
方法: get_success_url():决定在表单成功验证后重定向到的URL,默认返回success_url. form_valid(form):在表单验证成功后调用该方法(注意并没有对数据进行操作...,并重定向到get_success_url(),可以覆盖该方法在以上行为之间添加额外的动作.该方法必须返回一个HttpResponse. form_invalid(form):如果表单验证失败,则使用已填充的表单数据和错误信息重新渲染上下文...该视图用法与CreateView基本相同,仅在BaseUpdateView中对get()和post()的内部实现有区别. 6.DeleteView ?...,ListView from django.utils import timezone from django.views.generic.detail import DetailView from...可以直接用Django通用视图里的UpdateView和CreateView。
在其内部,它主要还负责从数据库中获取数据、处理表单数据、保存数据到数据库、以及渲染指定的 HTML 模板等。...我们可以把这些操作逻辑写在一个直观的 Python 函数里,但是 Django 开发者们意识到很多视图函数中的逻辑代码都是重复和通用的,因此在较早的版本中,Django 便开始引入 Class-based...类视图比函数视图提供了更加高层的抽象,它将上边提及的数据库操作、表单处理、模板渲染等通用操作抽取为类视图中的方法,函数的参数、状态等则抽取为类视图的属性,最终通过一个 as_view 方法将整个类视图转换为一个可调用对象...即使是通读过官方文档的类视图部分,新手在使用过程中依然感到有一定障碍,无法灵活运用各种内置的类通用视图,以及在必要时通过继承的方式拓展类视图(至少对我来说,刚接触类视图时就是这种状态)。...detail.py 主要存放用于从数据库获取单条记录的类视图,例如从数据库中获取某一篇博客文章。 edit.py 主要包含了表单处理,创建、更新和删除数据库中的单条记录的类视图。
:视图及模版》 《django入门:Admin管理系统及表单》 终于到最后一部分了,这部分我们将通过 django 自带的通用视图类替换之前写的视图函数,对视图进行重构 2 利用 django 通用视图类创建类视图..., DetailView from django.shortcuts import get_object_or_404 from blog.models import Post # 获取相应模型下的全部数据...优化分页列表 最后我们列下 Paginator 常用属性结束 django 的入门教程,接下来会有 DRF 的入门教程,django 算是其基础吧,DRF 实现了前后端分离,刚好适合我这种 Android...获取下一页的页码 3 print(page2.previous_page_number()) # 获取上一页的页码 1 print(page2.start_index()) # 当前页第一个 item 在列表中的位置...3 print(page2.end_index()) # 当前页最后一个 item 在列表中的位置 4 最后附上整个项目的地址:blog_project https://github.com
这就是说,通用视图有一些限制。如果你将你的视图实现为通用视图的子类,你就会发现这样能够更有效地编写你想要的代码,使用你自己的基于类或功能的视图。...在一些三方的应用中,有更多通用视图的示例,或者你可以自己按需编写。 对象的通用视图 TemplateView确实很有用,但是当你需要 呈现你数据库中的内容时Django的通用视图才真的会脱颖而出。...DetailView通用视图提供了一个publisher对象给context,但是我们如何在模板中添加附加信息呢?...答案是派生DetailView,并且在get_context_data方法中提供你自己的实现。...默认的实现只是简单的 给模板添加了要展示的对象,但是你这可以这样覆写来展示更多信息: from django.views.generic import DetailView from books.models
在项目目录下,执行下面这行命令,创建一个应用。 python manage.py startapp polls 此时app目录如下,各文件的作用在使用中揭晓。...这个视图函数负责接受表单里的数据,然后将其添加到数据库中。 polls/views.py # Django自带的渲染函数,默认已经引入,404处理函数。...from django.urls import reverse from django.shortcuts import HttpResponseRedirect 到此,简易的投票功能就已经实现了...2、改良视图 在视图中,我们是通过get方法获取数据表中的数据然后赋值给一个变量(对象),但我们也可以直接把数据表搬到视图中,这应该就是所谓的通用视图吧。 ...删除旧的 index, detail, 和 results 视图,并用 Django 的通用视图代替。
在 index/views.py 文件中添加: ?...1.使用 django 视图类 DetailView; 2.get_object 为 DetailView 类中的方法; 3.Blog.objects.get 是 django 中封装的对数据库的操作,...编辑文章 在文章发布过程中/之后,难免需要继续/重新编辑 在 /index/forms.py 文件中添加: ?...在原来的基础上没有大的改动,就是 save 函数中添加了一个参数 blog views.py 在 index/views.py 文件中添加: 添加 BlogEditView 类,继承 FormView...FormView 类自带函数,用来返回当表单成功保存后的跳转页面链接 4. form.save 函数添加了一个参数 blog urls.py 在 index/urls.py 文件中: 添加编辑文章链接
领取专属 10元无门槛券
手把手带您无忧上云