Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数。 ?...', 'FormView', 'CreateView', 'UpdateView', 'DeleteView', 'ListView', 'GenericViewError', ] class...pass ① ListView:显示对象列表 用于展示一个 Model 里面的所有对象,也可以是其子集 (queryset) ,支持分页。...② DetailView:显示一个对象的某个属性详细信息 用于显示某一 Model 中的一个 object 的详细信息。
基础视图 View TemplateView RedirectView 通用的显示视图 DetailView ListView 通用的编辑视图 FormView CreateView UpdateView...—— 索引 Simple generic views View TemplateView RedirectView Detail Views DetailView List Views ListView...这表示不应该使用列表、字典或其它可变对象作为视图的参数。如果你真这么做而且对共享的对象做过修改,某个用户的行为可能对后面访问同一个视图的用户产生影响。...它们不能满足项目中所有的需求,在这种情况下有Mixin 可以扩展基础视图的功能。 Django 的通用视图建立在基础视图之上,用于作为经常用到的功能的快捷方式,例如显示对象的详细信息。...它们提炼视图开发中常见的风格和模式并将它们抽象,这样你可以快速编写常见的视图而不用重复你自己。
/',ListView.as_view(template_name='bloglist.html',model=BlogPost)), 4、List obj的通用视图bloglist.html:默认list...from django.views.generic import ListView class IndexView(ListView): template_name = "blog/index.html... 11、FormView:FormView一般用来展示某个表单,而不是某个模型对象。...当用户输入信息未通过表单验证,显示错误信息。当用户输入信息通过表单验证提交后,转到其它页面。...使用FormView一般需要定义template_name, form_class和success_url. views.py - Use FormView from myapp.forms import
django自带的view如下表所示: 类名 功能 例子 View 基本View, 可以在任何时候使用 见后面详细介绍 RedirectView 重新定向到其他URL 将访问"/log-in/"的用户重新定向到..."/login/" TemplateView 显示Django HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView 显示对象详情 文章详细页...FormView 提交From 网站联系我们或emai订阅form CreateView 创建对象 创建新文章页 UpdateView 更新对象 修改文章页 DeleteView 删除对象 删除文章页...显示用于创建对象的表单的视图,通过验证错误信息重新显示视图,并且保存对象....可以直接用Django通用视图里的UpdateView和CreateView。
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道...,只需简单的操作对象的属性和方法。...表之间的关系: 一个用户可以发表多篇文章 一个分类里面也多篇文章 分类和用户没有直接的关系 理清这些之后,现在开始编写对应的model模型 2.3 编写models.py 2.4 创建和同步数据库 3...的视图 Django有很多的优秀的视图: View DetailView ListView FormView CreateView DeleteView UpdateView 我们的blog里面暂时只用到了...ListView和DetailView 4.2 使用dajngo自带的ListView v 编写app的views.py 4.3 使用django自带的DetailView 4.4 配置app的urls.py
1.ListView ? 表示对象列表的一个页面. 执行这个视图的时候,self.object_list将包含视图正在操作的对象列表(通常是一个查询集,但不是必须)....get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...get_context_data(**kwargs):返回显示对象的上下文数据. 4.CreateView ? 显示用于创建对象的表单的视图,通过验证错误信息重新显示视图,并且保存对象....-----UpdateView和CreateView----- 我们有了Project和Schedule列表显示后,现在需要添加新增和修改的操作。...可以直接用Django通用视图里的UpdateView和CreateView。
如果我们创建一个应用来管理会议,那么 一个 TalkListView (讨论列表视图)和一个 RegisteredUserListView ( 注册用户列表视图)就是列表视图的一个例子。...允许用户创建,更新和删除对象 – 以授权或者无需授权的方式。 总的来说,这些视图提供了一些简单的接口来完成开发者遇到的大多数的常见任务。...DetailView通用视图提供了一个publisher对象给context,但是我们如何在模板中添加附加信息呢?...要在你自己想要改变上下文的类中保持这一行为,你应该确保在超类中调用了get_context_data。如果没有任意两个类尝试定义相同的键,会返回异常的结果。...注意 如果你在访问 /books/acme/时出现404错误,检查确保你确实有一个名字为“ACME Publishing”的出版商。通用视图在这种情况下拥有一个allow_empty 的参数。
HttpResponseRedirect 对象需要一个参数:用户将被重定向的 URL (请继续看下去在这情况下我们是如何构造 URL ) 。...正如在教程 第3部分提到的,request 是一个 HttpRequest 对象。想了解 HttpRequest 对象更多的内容,请参阅 request 和 response 文档 。...P\d+)/vote/$', 'polls.views.vote', name='vote'), ) 修改 views 在这我们将使用两个通用视图: ListView 和 DetailView...这两个视图分别用于显示两种抽象概念 “显示一系列对象的列表” 和 “显示一个特定类型的对象的详细信息页”。 每个视图都需要知道使用哪个模型数据。因此需要提供将要使用的 model 参数。...我们也指定了 results 列表视图的 template_name – 这确保了 results 视图和 detail 视图渲染时会有不同的外观,虽然它们有一个 DetailView 隐藏在幕后。
django自带的view如下表所示: 类名 功能 例子 View 基本View, 可以在任何时候使用 见后面详细介绍 RedirectView 重新定向到其他URL 将访问"/log-in/"的用户重新定向到..."/login/" TemplateView 显示Django HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView 显示对象详情 文章详细页...FormView 提交From 网站联系我们或emai订阅form CreateView 创建对象 创建新文章页 UpdateView 更新对象 修改文章页 DeleteView 删除对象 删除文章页...Generic date views 显示一段时间内的对象 按时间归类的博客 2....ListView简介 listview是一个展示列表的view,返回的是一个template,包含两个关键方法: def get_context_data(self, **kwargs):
在开发网站的过程中,有一些视图函数虽然处理的对象不同,但是其大致的代码逻辑是一样的。比如一个博客和一个论坛,通常其首页都是展示一系列的文章列表或者帖子列表。...='index'), ... ] 前面已经说过每一个 URL 对应着一个视图函数,这样当用户访问这个 URL 时,Django 就知道调用哪个视图函数去处理这个请求了。...P[0-9]+)/$', views.CategoryView.as_view(), name='category'), ] 访问以下某个分类页面,可以看到依然显示的是该分类下的全部文章列表,和使用视图函数..., DetailView # 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的...最终传递给浏览器的 HTTP 响应就是 get 方法返回的 HttpResponse 对象。 还是无法理解么?在不涉及源码的情况下我也只能讲这么多了。
'index'), ... ] 前面已经说过每一个 URL 对应着一个视图函数,这样当用户访问这个 URL 时,Django 就知道调用哪个视图函数去处理这个请求了。...将 archive 和 tag 视图函数改写成类视图 这里没有什么新东西要讲了,学以致用,这个任务就交给你自己了。..., DetailView # 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的...最终传递给浏览器的 HTTP 响应就是 get 方法返回的 HttpResponse 对象。 还是无法理解么?在不涉及源码的情况下我也只能讲这么多了。...配置好详情页视图之后,访问一下文章的详情,可以看到页面返回的结果和函数视图是一模一样的,至此,类视图就改造完毕。
后面会详细讲解Django每一部分的使用方式和API了 本节内容 内置视图处理对象的定义 内置视图处理对象的使用 源代码分析 1....,不够~所以提供了常规的一些页面视图对象对页面模板和模板中要展示的数据进行了封装处理。...常规情况下,对应页面中要展示数据列表的视图,通过继承Django的django.views.generic.ListView对象来实现,页面中要展示数据信息的视图,通过继承Django的django.views.generic.DetailView...源码分析 此时,会有个问题困扰着我们,为什么要继承视图处理类,为什么要继承不同的处理类ListView和DetailView?...我们可以从上述代码中看到,继承自ListView视图处理类的类型,已经在内部封装好了分页操作功能,这也是我们项目中经常用到的技术呢,非常棒吧,我们继承了这个视图处理对象,就可以在后续的项目中,通过重写它的属性和方法来快捷的完成数据展示的分页功能了
这个是类的一大优点. 基于类视图例子 举例创建一个基于类的视图,分别处理不同的 HTTP Method ....基于类的通用视图(GV) Django 引入了基于类的通用视图, 来处理 web 常见的用例需求, 比如创建新对象,表单处理,列表视图,分页,归档视图等....你可以直接使用它们来加快开发的过程,以下是可用视图的概述: 基础视图 View (最基本的View) TemplateView RedirectView 通用展示视图 ListView DetailView...任务需要在多个视图中重用代码的地方, 这个场景下 CBV 是最好的选择。 我建议是选择第三种,正如那句话『从需求场景选择最佳的实现』 最佳的做法取决你自己, ....优点和缺点 有关 CBV 和 FBV 的优缺点, 仅供参考.
其中个人资料、修改密码、订阅设置是对用户信息的编辑,反馈建议是属于创建新数据。...个人资料 这里主要是对个人资料进行编辑,先显示用户原有的信息,然后用户即可对其进行修改并保存,对于编辑功能,django有自己的解决方案,即通过通用视图类UpdateView对模型进行更改。...我们这里继承了UpdateView来实现更新操作,和DetailView类似,我们这里也设置了model和template_name 还有form_class。...可以看到我们还继承了LoginRequiredMixin和AuthorRequiredMixin两个类,这两个类属于公共类,其中LoginRequiredMixin的用途是:只允许登录的用户访问该视图类...,AuthorRequiredMixin的用途是:只允许用户自己查看自己的个人资料,别人是无法查看的。
现在,创建一个Django视图来处理提交的数据,在Part3中已经创建了一个URLconf ,包含这一行: # polls/urls.py url(r'^(?...,允许你通过键名访问提交的数据。...如果您的网站的两位用户尝试在完全相同的时间投票,这可能会出错。这被称为竞争条件。...如果您有兴趣,可以阅读使用F()避免竞争条件,以了解如何解决此问题; 使用通用视图:减少代码冗余 上面的detail、index和results视图的代码非常相似,有点冗余,这是一个程序猿不能忍受的...这里使用两个通用视图:ListView和DetailView。这两个视图分别代表“显示对象列表”和“显示特定类型对象的详细信息页面”的抽象概念。 每个通用视图需要知道它将作用于哪个模型。
框架的好处就是,它已经为用户处理了绝大多数的场景中的重复代码,提供了封装好的接口,使得我们在开发中十分方便。...对于这些场景,Django提供了几个class-based view来处理: ListView UpdateView CreateView DeleteView 这几个类视图分别对应着查询ListView...、更新UpdateView、创建CreateView、删除DeleteView这几个操作。...ListView可以通过你给出的model以及想要展示的model中的field,在对应的数据库中查询出对应的对象存放在List对象中,并传递给template渲染。...对象就是view从model中取出的数据。
常见的视图函数类型和用法函数视图函数视图是最基本和最常见的视图函数类型。函数视图是一个简单的Python函数,它接收一个HttpRequest对象作为参数,并返回一个HttpResponse对象。...类视图通常比函数视图更灵活和可扩展,并提供更好的代码组织和可重用性。Django提供了许多内置的类视图,如DetailView和ListView,可以用于快速创建常见的Web应用程序功能。...以下是一些常见的视图函数装饰器及其用法:@login_required:要求用户在访问视图之前进行身份验证。@permission_required:要求用户具有特定的权限才能访问视图。...@require_http_methods:限制视图只能处理特定的HTTP方法(GET,POST等)。@csrf_exempt:允许视图处理不带CSRF令牌的POST请求。...以下是一个使用@login_required装饰器的示例,它要求用户在访问受保护的视图之前进行身份验证:from django.contrib.auth.decorators import login_requiredfrom
使用 Django 的模型,都是 django.db.models.Model 类的子类。 每个类将被转成数据库表。 每个字段由 django.db.models.Field 子类转成数据库的列。...模型之间的关系使用 ForeignKey 字段。 位置参数 related_name 用于引用关联的模型。 related_name 参数将用于创建反向关系。...在 论坛的回帖模型中,related_name = "+",不需要这种反向关系,不需要关系用户修改过哪些帖子。...# 主题回复列表, 复用分页组件 paginate_by = 20 def get_context_data(self, **kwargs): # 防止相同用户刷新页面被统计为多次访问...template_name = 'board/edit_post.html' pk_url_kwarg = 'post_pk' context_object_name = 'post' # 其他用户可以编辑所有帖子的问题
[4].案例网络模块是自己对okhttp3的封装,当然你也完全可以使用其他的上层网络框架 [5].相比课程,加入缓存机制,使用前面写过的缓存封装:详见:缓存文件封装 [6].使用前面的listview...封装类:详见:ListView的封装 [7].Json的解析详见:Json在Android中的使用--Gson 项目结构及类图 ?...沟通的桥梁 1.基类BasePresenter:为了方便让控制层和Activity生命周期同步 /** * 作者:张风捷特烈 * 时间:2018/4/25:9:40 * 邮箱:1981462002...* 获取网络数据 * * @param isPost */ private void getData(boolean isPost) { //创建...:https://www.jianshu.com/c/004f3fe34c94 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com 你的喜欢与支持将是我最大的动力
,你可以把它当做一个模板应用于自己的任何需要分页的视图函数。...不过在我们的博客项目中,我们不必写这些代码了。回顾在 基于类的通用视图:ListView 和 DetailView 中的内容,我们已将视图函数转换成了类视图。...ListView 传递了以下和分页有关的模板变量供我们在模板中使用: paginator ,即 Paginator 的实例。 page_obj ,当前请求页面分页对象。...object_list,请求页面的对象列表,和 post_list 等价。所以在模板中循环文章列表时可以选 post_list ,也可以选 object_list。...接下来我们将详细说明该如何拓展 Pagination 以实现一个完善的分页效果。 总结 本章节的代码位于:Step19: simple pagination。
领取专属 10元无门槛券
手把手带您无忧上云