Django 编写第一个Django应用,第3部分
Django
官方文档
文章目录
- Django
- 6. 编写第一个Django应用,第3部分
- 6.1 概况
- 6.2 编写更多视图
- 6.2.1 polls/views.py
- 6.2.2 将视图添加入polls.urls
- 6.2.3 运行查看
- 6.3 写一个真正有用的视图
- 6.3.1 从数据库返回数据
- 6.3.2 使用模板系统,将页面设计分离
- 6.4 快捷函数:render()
- 6.5 抛出404错误
- 6.5.1 抛出错误
- 6.5.2 快捷函数:get_object_or_404()
- 6.6 使用模板系统
- 6.7 去除模板中的硬编码URL
- 6.8 为URL名称添加命名空间
6. 编写第一个Django应用,第3部分
6.1 概况
Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。
在一个博客应用中,你可能会创建如下几个视图:
- 博客首页——展示最近的几项内容。
- 内容“详情”页——详细展示某项内容。
- 以年为单位的归档页——展示选中的年份里各个月份创建的内容。
- 以月为单位的归档页——展示选中的月份里各天创建的内容。
- 以天为单位的归档页——展示选中天里创建的所有内容。
- 评论处理器——用于响应为一项内容添加评论的操作。
在投票应用中,需要下列几个视图:
- 问题索引页——展示最近的几个投票问题。
- 问题详情页——展示某个投票的问题和不带结果的选项列表。
- 问题结果页——展示某个投票的结果。
- 投票处理器——用于响应用户为某个问题的特定选项投票的操作。
在 Django 中,网页和其他内容都是从视图派生而来。每一个视图表现为一个 Python 函数(或者说方法,如果是在基于类的视图里的话)。Django 将会根据用户请求的 URL 来选择使用哪个视图(更准确的说,是根据 URL 中域名之后的部分)。
URL 样式是 URL 的一般形式 - 例如:/newsarchive/<year>/<month>/
。
为了将 URL 和视图关联起来,Django 使用了 ‘URLconfs’ 来配置。URLconf 将 URL 模式映射到视图。
6.2 编写更多视图
6.2.1 polls/views.py
def detail(request , question_id):return HttpResponse("You 're looking at question %s." % question_id )def results(request , question_id):response = "You 're looking at the results of question % s."return HttpResponse(response % question_id)def vote(request , question_id):return HttpResponse("You 're voting on question %s." % question_id)
6.2.2 将视图添加入polls.urls
urlpatterns = [# ex: /polls/path('',views.index,name='index'),# ex : /polls/5/path('<int:question_id>/',views.detail,name = 'detail'),# ex : /polls/5/results/path('<int:question_id>/results/',views.results,name='results'),# ex : /polls/5/vote/path('<int:question_id>/vote/',views.vote,name = 'vote'),
]
6.2.3 运行查看
6.3 写一个真正有用的视图
6.3.1 从数据库返回数据
每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse
对象,或者抛出一个异常,比如 Http404
。至于开发者还想干些什么,随便。
视图可以从数据库里读取记录,可以使用一个模板引擎(比如 Django 自带的,或者其他第三方的),可以生成一个 PDF 文件,可以输出一个 XML,创建一个 ZIP 文件,可以做任何想做的事,使用任何想用的 Python 库。
在 index()
函数里插入了一些新内容,让它能展示数据库里以发布日期排序的最近 5 个投票问题,以空格分割:
def index(request):latest_question_list = Question.objects.order_by('-pub_date')[:5]output = ', '.join([q.question_text for q in latest_question_list])return HttpResponse(output)
6.3.2 使用模板系统,将页面设计分离
使用 Django 的模板系统,只要创建一个视图,就可以将页面的设计从代码中分离出来。
创建templates目录
TEMPLATES
配置项描述了 Django 如何载入和渲染模板。默认的设置文件设置了 DjangoTemplates
后端,并将 APP_DIRS
设置成了 True。这一选项将会让 DjangoTemplates
在每个 INSTALLED_APPS
文件夹中寻找 “templates” 子目录。
更新index视图 → 使用模板
6.4 快捷函数:render()
载入模板,填充上下文,再返回由它生成的 HttpResponse
对象」是一个非常常用的操作流程。于是 Django 提供了一个快捷函数,用它来重写 index()
视图:
6.5 抛出404错误
6.5.1 抛出错误
投票详情视图——它会显示指定投票的问题标题。
def detail(request , question_id):try:qestion = Question.objects.get(pk = question_id)except Question.DoesNotExist:raise Http404("Question does not exist")return render(request , 'polls/detail.html',{'question':qestion})
6.5.2 快捷函数:get_object_or_404()
一样的效果
6.6 使用模板系统
再次修改了index的显示条目,使得有回答的问题能够展示出来
6.7 去除模板中的硬编码URL
硬编码和强耦合的链接,对于一个包含很多应用的项目来说,修改起来是十分困难的。
使用 {% url %}
标签代替
6.8 为URL名称添加命名空间
在一个真实的 Django 项目中,可能会有五个,十个,二十个,甚至更多应用。
Django 如何知道 {% url %}
标签到底对应哪一个应用的 URL → 在根 URLconf 中添加命名空间。在 polls/urls.py
文件中稍作修改,加上 app_name
设置命名空间。
Django 编写第一个Django应用,第3部分相关推荐
- Django|编写第一个Django程序|Writting your first Django app|Windows环境
目录 1.Django官网:The web framework for perfectionists with deadlines | Django 2.django的安装 一.未安装 二.已安装dj ...
- django 设置媒体url_编写第一个 django 应用
本文使用 python 3.7.4本文使用 django 3.0.5 第一步当然就是安装 python,网上教程太多了,不再赘述 第二步当然就是安装 django,直接使用 pip install d ...
- 学点简单的Django之第一个Django程序
学点简单的Django之第一个Django程序 这里采用PyCharm专业版可以直接创建Django项目,这里面自动部署了Django的基本环境.在创建项目时选择Django项目: 第一次建立Djan ...
- 创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...
一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...
- python虚拟环境中安装diango_创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...
一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...
- 编写你的第一个 Django 应用,第 1 部分
Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 编写你的第一个 Django ...
- django 1.8 官方文档翻译: 1-2-1 编写你的第一个Django应用,第1部分
编写你的第一个 Django 程序 第1部分 让我们通过例子来学习. 在本教程中,我们将引导您创建一个基本的投票应用. 它将包含两部分: 一个公共网站,可让人们查看投票的结果和让他们进行投票. 一个管 ...
- [Django个人网站开发]·编写你的第一个 Django 应用-第 1 部分
编写你的第一个 Django 应用-第 1 部分 让我们通过示例来学习. 通过这个教程,我们将带着你创建一个基本的投票应用程序. 它将由两部分组成: 一个让人们查看和投票的公共站点. 一个让你能添加. ...
- 【Python/Web】Django(一)Django框架的配置和使用
序章 Python下面有许多受欢迎的web框架,例如Flask.Twisted等,Django也不例外.许多成功的网站都是基于Django,Django作为一个开源的Web应用框架,采用了 MVT 的 ...
最新文章
- 树莓派 SyntaxError: invalid syntax(python错误)
- 清华南开出品最新视觉注意力机制Attention综述
- 图解sqlserver 2000 还原数据库的基本操作
- 超萌哒!20000个虎年限定红包封面,限量开抢!
- Linux下的shell语言编程入门
- 利用ffmpeg来进行视频解码的完整示例代码(H.264)
- 三运放差分放大电路分析_信号源内阻对差动放大电路共模抑制比的影响分析与改善方法...
- 机器学习 —— 概率图模型(CPD)
- 乌班图系统安装到U盘
- Linux深度学习框架安装
- 教程 海湾主机crt_海湾消防主机JB-QT-GST5000火灾报警控制器(联动型)与crt是怎么连接编公式的...
- (一)CGAL库应用:指定平面切割模型并用openGL显示该层面轮廓
- 4.7/4.8 磁盘挂载
- 80后的童鞋们,还记得大明湖畔的克林顿时代吗?
- [HTML/CSS]Flex布局中space-evenly的兼容性
- 使用express封装一个简单的http代理服务器以及手动设置Access-Control-Allow-Origin解决跨域问题
- D2D,让通信更简单!
- postman报错500 Internal Server Error
- BUG InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Pl
- RACTuple分析
热门文章
- 中英文报时器(我一直解决不了整数转对应英文单词字符串,这报时器的“残码”可冷放了不少时日)
- 快速选择算法及C++代码
- Shader 学习笔记:描边
- 使用SandCastle和ScriptDoc创建JavaScript文档
- C# System.IO.IOException HResult=0x8007000D Message=数据无效。解决办法
- 1.模拟※(0x3f:从周赛中学算法 2022下)
- kafka后台运行命令
- Vuex的使用(十)——mutations和actions的返回值测试
- html二级目录的实现,二级目录.html
- 前端框架OnsenUI学习之初识OnsenUI