Django源码学习-7-View 视图函数 ?...Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数。 ?...from django.views.generic import View from django.views.generic.base import RedirectView, TemplateView...MonthArchiveView, TodayArchiveView, WeekArchiveView, YearArchiveView, ) from django.views.generic.detail...', 'ArchiveIndexView', 'YearArchiveView', 'MonthArchiveView', 'WeekArchiveView', 'DayArchiveView'
DetailView ListView 通用的编辑视图 FormView CreateView UpdateView DeleteView 通用的日期视图 ArchiveIndexView YearArchiveView...ListView Editing views FormView CreateView UpdateView DeleteView Date-based views ArchiveIndexView YearArchiveView...Django 的通用视图建立在基础视图之上,用于作为经常用到的功能的快捷方式,例如显示对象的详细信息。它们提炼视图开发中常见的风格和模式并将它们抽象,这样你可以快速编写常见的视图而不用重复你自己。...译者:Django 文档协作翻译小组,原文:API reference。 本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。...Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。
基于类的通用视图(GV) Django 引入了基于类的通用视图, 来处理 web 常见的用例需求, 比如创建新对象,表单处理,列表视图,分页,归档视图等....你可以在django.views.generic引用它们....通用展示视图 ListView DetailView 通用编辑视图 FormView CreateView UpdateView DeleteView 基于日期的视图 ArchiveIndexView YearArchiveView...各种观点 #1 观点 「使用所有的通用视图(GV)」 此观点认为,Django 提供这些通用视图就是让减少开发的效率, 为什么不用呢?...#2 观点 「仅使用django.views.generic.View, 不用GV」 此观点认为, View 就足够了, 并且 View 是真正的CBV, 而通用视图则不是真正的 CBV.
① 快速安装 Django 安装 Django 的前提是已经在 python 的运行环境。...pip install Django==2.0 查看安装 Django 的版本 python -m django --version 创建 Django 项目 django-admin startproject...(pub_date__year=year) context = {'year': year, 'article_list': a_list} return render(request,...'news/year_archive.html', context) ④ URL 的设计与配置-基础核心技术 from django.urls import path from . import views...urlpatterns = [ path('articles/year>/', views.year_archive), path('articles/year>
URL配置(URLconf)就像Django 所支撑网站的目录。...(req,year): #在Django1.x里,我们需要对year做类型转换: #year = int(year) #在2.0里面,不需要转换year return HttpResponse...上面的url,可以使用Django2.0新语法 path('articles/year>/', views.year_archive), 它支持url参数的类型转化。.../:匹配到第4个规则,调用views.article_detail(request, year=2003, month=3, slug=”building-a-django-site”) 分别访问页面:...如下所示,注册了一个yyyy: 修改urls.py,内容如下: from django.contrib import admin #增加register_converter方法 from django.urls
Pyear>[0-9]{4})/(?...Pyear>[0-9]{4})/(?...Pyear>[0-9]{4})/', year_archive), re_path('article/(?...,因此需要先转化为整数类型的变量值,当然year=int(year) 不会有诸如如TypeError或者ValueError的异常。..._2003), path('articles/year>/', views.year_archive), path('articles/year>/<int:
('articles/year>/', views.year_archive), path('articles/year>//', views.month_archive...Pyear>[0-9]{4})/$', views.year_archive), url(r'^articles/(?Pyear>[0-9]{4})/(?...Pyear>[0-9]{4})/$', views.year_archive), 传递到视图函数views.year_archive() 中的year 参数永远是一个字符串类型。...Pyear>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}), ] 在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive...year = 2006 # ...
Django的路由控制 URL配置(URLconf)就像Django 所支撑网站的目录。...简单的路由配置 举例1: 创建应用app01,新增一个路径index,修改urls.py文件 from django.contrib import admin from django.urls import...使用正则匹配 from django.contrib import admin from django.urls import path,re_path from app01 import views...from django.contrib import admin from django.urls import path,re_path,include from app01 import views...我是用cmd启动django项目的,查看cmd输出信息: year 发现,它的确是int类型。那么上面提到的无命令分组和有命名分组,它的类型都是字符串的。
{ path: '/blog/:year', component: Blog }, ] 在 Django 里的写法和 Vue-Router 差不多,代码如下: # urls.py from django.urls...) ] 在 urls.py 里使用 year> 接收一个数值型参数,这个参数名字叫 year。...# blog/views.py from django.http import HttpResponse def blogIndex(request, year): return HttpResponse...视图函数也要对应更改一下: # # blog/views.py from django.http import HttpResponse def blogIndex(request, year,...Pyear>[0-9]{4})/', blogIndex) ] blogIndex 视图的代码不变,还是使用这一段: # blog/views.py from django.http import
本节笔记整理自Django2.0官方文档。 一、url调度器 - django.urls.path django2.0中使用path函数替代url函数。...Pyear>[0-9]{4})/$', views.year_archive), re_path(r'^articles/(?Pyear>[0-9]{4})/(?...year_archive(request, year): return HttpResponse(year) def month_archive(request, year, month, name...):return HttpResponse("%r, %r" % (year, month)) def article_detail(request, year, month, slug, name):...Pyear>[0-9]{4})/$', views.year_archive), re_path(r'^articles/(?Pyear>[0-9]{4})/(?
例如: from django.urls import path from . import views urlpatterns = [ path('articles/year>/...', views.year_archive), path('articles/year>//', views.month_archive), path('...如果请求 URL “/articles/2005/05/39323/”,Django 就会获取参数值后调用回调函数: news.views.article_detail(request, year=2005...例如: from django.shortcuts import render from .models import Article def year_archive(request, year)...: a_list = Article.objects.filter(pub_date__year=year) context = {'year': year, 'article_list
下面是year_archive的例子: from django.shortcuts import render # Create your views here....from django.shortcuts import render_to_response from models import Article def year_archive(request,...year): a_list = Article.objects.filter(pub_date__year=year) return render_to_response('year_archive.html...',{'year':year,'article_list':a_list}) def month_archive(request, year, month): pass def article_detail...(request, year, month, day): pass (7)设计你的模板 注:Django的app默认模板位置在app文件夹下的'templates'下面。
Django还提供了一种根据活动语言翻译URL的方法。 2. django如何处理请求 当用户请求一个页面时,Django根据下面的逻辑执行操作: 决定要使用的根URLconf模块。.../ 将匹配最后一个,并调用views.article_detail(request, year=2003, month=3, slug="building-a-django-site" 默认情况下,Django...Pyear>[0-9]{4})/$', views.year_archive), re_path(r'^articles/(?Pyear>[0-9]{4})/(?...Pyear>[0-9]{4})/$', views.year_archive), re_path(r'^articles/(?Pyear>[0-9]{4})/(?...redirect_to_year(request): # ... year = 2006 # ... return HttpResponseRedirect(reverse('news-year-archive
0x00 URL反向解析和三种不同的反向解析方式 Django中提供了关于URL的映射的解决方案,可以做两个方向的使用: 1.普通解析过程:由客户端的浏览器发起一个url请求,Django根据URL解析...url(r'^articles/(\d{4})/$', 'news.views.year_archive'), #... ) 0x01 模板中的反向解析 year_archive...import reverse from django.http import HttpResponseRedirect def redirect_to_year(request): # ......year = 2006 # ......return HttpResponseRedirect(reverse('news.views.year_archive', args=(year,))) # 解释一下:首先,必须引入django.core.urlresolvers.reverse
Django的路由系统 URL配置其实就是告诉Django项目你执行代码的路径,本质就是路径和调用的视图函数之间的映射关系表。...Pyear>[0-9]{4})/$', views.year_archive), url(r'^articles/(?Pyear>[0-9]{4})/(?...Pyear>[0-9]{4})/$', views.year_archive), 传递到视图函数views.year_archive() 中的year 参数永远是一个字符串类型。...Pyear>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}), ] 在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive...year = 2006 # ...
Pyear>[0-9]{4})/$', views.year_archive),#某年的,(?Pyear>[0-9]{4})这是命名参数(正则命名匹配还记得吗?)...,那么函数year_archive(request,year),形参名称必须是year这个名字。...Pyear>[0-9]{4})/$', views.year_archive), 传递到视图函数views.year_archive() 中的year 参数永远是一个字符串类型。...] 在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive(request, year='2005', foo='bar')。 ...return redirect(reverse('news-year-archive', args=(year,))) #或者直接return redirect('news-year-archive',
url配置就像Django所支撑网站的目录。它的本质是url与要被该url调用的视图函数之间的映射表;通过这个映射表可以告知Django,对于客户端发来的某个url该执行那些代码。 ...Django 将调用函数views.month_archive(request, '2005', '03')。...Pyear>[0-9]{4})/$', views.year_archive), re_path(r'^articles/(?Pyear>[0-9]{4})/(?...在需要url的地方,对于不同层级,Django提供不同的工具用于url反查: 1,在模板中,使用url模板标签 2,在python代码中,使用from django.urls import reverse...python逻辑中 from django.urls import reverse from django.http import HttpResponse,redirect def redirect_to_year
import path from django.contrib import admin from django.contrib.auth.views import LoginView, LogoutView...request, 'app/index.html', { 'title':'Home Page', 'year...':datetime.now().year, } ) def contact(request): """Renders the contact page."""...', 'year':datetime.now().year, } ) def about(request): """Renders the about...', 'year':datetime.now().year, } )
def home(request, year="2018", month="01"): return HttpResponse("获取当前页面home时间标签:%s年/%s月" %(year,...如果想让year参数只能是4个数字,month参数只能是2个数字,该怎么做呢?这就需要用到正则匹配了。 ?...P 参数year [0-9] 匹配0-9的数字 {4} 匹配4个数字 {1,2} 匹配1-2个数字 r 是raw原型,不转义 ^ 匹配开始 $ 匹配结束 from django.conf.urls import...Pyear>[0-9]{4})/(?...def home(request, year="2018", month="01"): return HttpResponse("获取当前页面home时间标签:%s年/%s月" %(year,
Django2.0发布后,很多人都拥抱变化,加入了2的行列。.../ 将匹配最后一个,并调用views.article_detail(request, year=2003, month=3, slug="building-a-django-site" 二、path转换器...>/', views.year_archive), ... ] 四、使用正则表达式 Django2.0的url虽然改‘配置’了,但它依然向老版本兼容。...Pyear>[0-9]{4})/', views.year_archive), re_path('articles/(?Pyear>[0-9]{4})/(?...五、总结 除了上面的部分,Django2.0路由系统其它的知识点和Django1.11的基本都是相同的,就是在写法上面有那么点小小的区别。