让我们将我们的投票应用转换成使用通用视图系统,仅仅需要做以下几步来完成转换: 1.转换 URLconf。 2.删除一些旧的、不再需要的视图。 3.基于 Django 的通用视图引入新的视图。...= [ path('', views.IndexView.as_view(), name='index'), path('/', views.DetailView.as_view...return Question.objects.order_by('-pub_date')[:5] class DetailView(generic.DetailView): model =...Question template_name = 'polls/detail.html' class ResultsView(generic.DetailView): model...小结 这节终于用上了通用视图,再一次感受到了Django框架,把冗余的东西都做了简化抽象。 定义了通用视图,传递给它指定模版,以及模型,一切就OK了。它比 render 快捷函数更加简洁。 ----
如何在不需要密码的情况下切换到另一个或特定的用户帐户。...例如,我们有一个名为postgres的用户帐户(PostgreSQL默认超级用户系统帐户),我们希望名为postgres的组中的每个用户(通常是我们的PostgreSQL数据库和系统管理员)使用su命令切换到...默认情况下,只有root用户可以在不输入密码的情况下切换到另一个用户帐户。...为了允许特定组中的用户无需密码即可切换到另一个用户帐户,我们可以修改该组的默认 PAM 设置su command 在里面 /etc/pam.d/su 文件。...在这种情况下,用户(例如rumenz) 谁将切换到另一个用户帐户(例如 postgres) 应该在sudoers文件或 sudo 组中才能调用 sudo command. $ sudo visudo
允许用户创建,更新和删除对象 – 以授权或者无需授权的方式。 总的来说,这些视图提供了一些简单的接口来完成开发者遇到的大多数的常见任务。...默认的实现只是简单的 给模板添加了要展示的对象,但是你这可以这样覆写来展示更多信息: from django.views.generic import DetailView from books.models...然而,model参数并不是唯一能够指明视图要基于哪个对象进行操作的方法 – 你同样可以使用queryset参数来指定一个对象列表: from django.views.generic import DetailView...动态过滤 另一个普遍的需求是在给定的列表页面中根据URL中的关键字来过滤对象。...import DetailView from django.utils import timezone from books.models import Author class AuthorDetailView
HttpResponseRedirect 对象需要一个参数:用户将被重定向的 URL (请继续看下去在这情况下我们是如何构造 URL ) 。...django.views.generic import DetailView, ListView from polls.models import Poll urlpatterns = patterns...DetailView 通用视图期望从 URL 中捕获名为 “pk” 的主键值,因此我们将 poll_id 改为 pk 。...默认情况下, DetailView 通用视图使用名为 /_detail.html 的模板。在我们的例子中,将使用名为 “polls/poll_detail.html” 的模板。...在 DetailView 中 poll 变量是自动提供的 – 因为我们使用了一个 Django 模型 (Poll) ,Django 能够为上下文变量确定适合的名称。
对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的。首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...blog' urlpatterns = [ url(r'^$', views.index, name='index'), ... ] 前面已经说过每一个 URL 对应着一个视图函数,这样当用户访问这个...URL 时,Django 就知道调用哪个视图函数去处理这个请求了。...对于这种类型的需求,Django 提供了一个 DetailView 类视图。..., DetailView # 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的
else: selected_choice.votes += 1 selected_choice.save() # 成功处理数据后,自动跳转到结果页面,防止用户连续多次提交...HttpResponseRedirect只接收一个参数:用户将要被重定向的URL; 在这个例子中,HttpResponseRedirect的构造函数中使用reverse()函数。...如果您的网站的两位用户尝试在完全相同的时间投票,这可能会出错。这被称为竞争条件。...return Question.objects.order_by('-pub_date')[:5] class DetailView(generic.DetailView): model =...而对于DetailView,question变量会被自动提供,因为我们使用了Django的模型(Question),Django会智能的选择合适的上下文变量。
你需要开始编写测试的另一个原因就是其他的开发者在他们认真研读你的代码前可能想要查看一下它有没有测试。 测试有助于团队合作 之前的观点是从单个开发人员来维护一个程序这个方向来阐述的。...Django测试客户端 Django提供了一个测试客户端来模拟用户和代码的交互。我们可以在tests.py 甚至在shell 中使用它。...测试 DetailView 一切都运行得很好; 然而,即使未来发布的Question不会出现在index中,如果用户知道或者猜出正确的URL依然可以访问它们。...所以我们需要给DetailView添加一个这样的约束: polls/views.py class DetailView(generic.DetailView): ......从某种程度上来说,你一定会查看你的测试,然后想知道是否你的测试程序过于臃肿,这将我们带向下面的内容: 测试越多越好 看起来我们的测试代码的增长正在失去控制。
但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。...文章和用户又是什么关系? 表之间是否需要外键进行关联?...表之间的关系: 一个用户可以发表多篇文章 一个分类里面也多篇文章 分类和用户没有直接的关系 理清这些之后,现在开始编写对应的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
这些字段目前是不够用的,我们再加几个字段,需要加观察次数、喜欢的用户、收藏的用户。...设置用户表为settings.AUTH_USER_MODEL 更多关于ManyToManyField的使用介绍,可以查询django官网的介绍。...怎么显示详情呢,聪明的django为我们提供了DetailView。urls.py中设置的视图类是VideoDetailView,我们让VideoDetailView继承DetailView即可。...看起来超级简单,django就是如此的酷,只需要我们配置几行代码,就能实现很强大的功能。...因为每次调用DetailView的时候,django都会回调get_object()这个函数。因此我们可以把increase_view_count()放到get_object()里面执行。
1、通用视图 urls.py: from django.views.generic import TemplateView path(r'about/',TemplateView.as_view(template_name...from django.views.generic import ListView class IndexView(ListView): template_name = "blog/index.html...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开发网页计数器,统计并显示一篇文章的浏览次数。本文的原理可以适用于很多场景,比如统计某一文件的下载次数,统计某一用户在单位时间内的登录次数。...# blog/models.py from django.db import models from django.contrib.auth.models import User from django.urls...# blog/views.py from django.views.generic import DetailView from .models import Article class ArticleDetailView...(DetailView): model = Article def get_object(self, queryset=None): obj = super().get_object...用户每次重新访问/blog/article/6/或刷新浏览器,计数器都会增加1。
项目,一个项目肯定是由多个模块组成的,比方说一个电商项目,包括支付模块,商品展示模块,商家用户聊天模块等等,这些模块便可称之为一个应用。 ...path('hello', views.hello, name='hello'), ] 1、挂载路由 路由管理我们写好了,但是这只是一个app的路由管理,整个项目是还需要一个路由管理的,所以我们需要将我们写的这个应用的路由文件挂载到项目的路由管理上去...十一、编写表单 我们已经写好的详情页需要显示的内容,但这毕竟是一个选择题,这样写只能展示,但用户没法选择,所以我们需要写一个表单。 detail.html <!...return Question.objects.order_by('-pub_date')[:5] class DetailView(generic.DetailView): model =...Question template_name = 'detail.html' class ResultsView(generic.DetailView): model = Question
对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...blog' urlpatterns = [ path('', views.index, name='index'), ... ] 前面已经说过每一个 URL 对应着一个视图函数,这样当用户访问这个...DetailView 除了从数据库中获取模型列表的数据外,从数据库获取模型的一条记录数据也是常见的需求。比如查看某篇文章的详情,就是从数据库中获取这篇文章的记录然后渲染模板。...对于这种类型的需求,django 提供了一个 DetailView 类视图。..., DetailView # 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的
基础视图 View TemplateView RedirectView 通用的显示视图 DetailView ListView 通用的编辑视图 FormView CreateView UpdateView...BaseDateListView 基于类的通用视图 —— 索引 Simple generic views View TemplateView RedirectView Detail Views DetailView...如果你真这么做而且对共享的对象做过修改,某个用户的行为可能对后面访问同一个视图的用户产生影响。 传递给as_view() 的参数将赋值给服务请求的实例。...译者:Django 文档协作翻译小组,原文:API reference。 本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。...Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。
自带的view如下表所示: 类名 功能 例子 View 基本View, 可以在任何时候使用 见后面详细介绍 RedirectView 重新定向到其他URL 将访问"/log-in/"的用户重新定向到"/...login/" TemplateView 显示Django HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView 显示对象详情 文章详细页...get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...import DetailView from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.core.urlresolvers...DeleteView): model = employee success_url = reverse_lazy('employee_list') class EmployeeDetail(DetailView
确认项目是否能正常运行,切换到根目录,即例中的mysite,运行如下命令: F:\project\Django\FirstApp\mysite>python manage.py runserver 运行结果...related objects,更多关于使用双下划线进行域查找:Field lookups,数据库API完整信息:Database API reference 介绍Djando Admin 创建管理员用户...注意:模板命名 我们可直接在polls/templates目录下存放我们的模板,但是这样不好,Django会选择它查找到的第一个名字匹配的模板,这样的话,如果你在另一个不同的应用下有相同名称的目标,Django...所以,我们需要对它们进行命名,也就是把那些目标存放在以应用自身命名的另一个目录。...DetailView视图期望从ULR捕获的主键值被称为pk,所以把question_id改成了pk 默认的DetailView视图使用名为/_detail.html
作者:Kuky_xs 博客:https://www.jianshu.com/p/8cdf099e974f 1 正文 《django入门:环境及项目搭建》 《django入门:数据模型》 《django入门...:视图及模版》 《django入门:Admin管理系统及表单》 终于到最后一部分了,这部分我们将通过 django 自带的通用视图类替换之前写的视图函数,对视图进行重构 2 利用 django 通用视图类创建类视图..., DetailView from django.shortcuts import get_object_or_404 from blog.models import Post # 获取相应模型下的全部数据...form = CommentForm() return render(request, 'blog/detail.html', locals()) class PostDetailView(DetailView...详情界面 有时候如果我们的数据过多,同一页加载全部数据,用户的体验肯定不好,我们通过通用视图类来创建分页,这边为了方便显示,我们会设置每页加载一篇文章 3 通过 ListView 创建分页 1.指定
cmd命令行输入ipconfigMac 终端命令行输入ifconfig-----创建模块python manage.py startapp hello第一步:在views.py文件写一个函数from django.http...请求响应对象请求对象HttpRequest请求方式 method(POST/GET/...)请求头信息 META/headersREMOTE_ADDR——请求的IP地址HTTP_USER_AGENT——用户请求终端信息获取请求传递参数...Erro重写内置的错误处理视图在项目urls.py中添加配置handler500 = "my project.views.page 500"handler400handler403handler404切换到生产模式...DEBUG=Falsesettings配置DEBUG=FalseURL规则handler500 = "my_appv.views.page_500"视图编辑:from django.http import...步骤二:配置模板地址步骤三:配置URL内置通用视图django.views.generic.ListView列表类数据的封装,如:景点列表,支持分页django.views.generic.DetailView
在项目的主目录 urls.py 文件中,配置 用户、商品、订单、购物车的主路由。...注册、登录、激活、退出、用户地址、用户中心 Django实战-生鲜电商-登录|注册|激活 Django实战-生鲜电商-用户中心|商品详情 Django实战-生鲜电商-删除购物车数据|退出 Django...实战-生鲜电商-用户地址|订单确认 from django.conf.urls import url from users import views from django.contrib.auth.decorators...P\d+)$", views.DetailView.as_view(), name="detail"), url(r"^list/(?P\d+)/(?...P\d+)$", views.ListView.as_view(), name="list"), ] ③ 订单应用的路由 订单确认、提交订单、用户订单、订单评论、支付、查询支付结果 Django
你需要开始编写测试的另一个原因就是其他的开发者在他们认真研读你的代码前可能想要查看一下它有没有测试。 测试有助于团队合作 之前的观点是从单个开发人员来维护一个程序这个方向来阐述的。...Django的测试客户端 Django提供了一个测试客户端用来模拟用户和代码的交互。我们可以在tests.py甚至shell中使用它。...测试DetailView 然而,即使未来发布的Question不会出现在index中,如果用户知道或者猜出正确的URL依然可以访问它们。...所以我们需要给DetailView视图添加一个这样的约束: # polls/views.py class DetailView(generic.DetailView): ......也许登陆的管理员用户应该被允许查看还没发布的Questions,但普通访问者则不行。
领取专属 10元无门槛券
手把手带您无忧上云