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部分相关推荐

  1. Django|编写第一个Django程序|Writting your first Django app|Windows环境

    目录 1.Django官网:The web framework for perfectionists with deadlines | Django 2.django的安装 一.未安装 二.已安装dj ...

  2. django 设置媒体url_编写第一个 django 应用

    本文使用 python 3.7.4本文使用 django 3.0.5 第一步当然就是安装 python,网上教程太多了,不再赘述 第二步当然就是安装 django,直接使用 pip install d ...

  3. 学点简单的Django之第一个Django程序

    学点简单的Django之第一个Django程序 这里采用PyCharm专业版可以直接创建Django项目,这里面自动部署了Django的基本环境.在创建项目时选择Django项目: 第一次建立Djan ...

  4. 创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...

    一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...

  5. python虚拟环境中安装diango_创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...

    一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...

  6. 编写你的第一个 Django 应用,第 1 部分

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 编写你的第一个 Django ...

  7. django 1.8 官方文档翻译: 1-2-1 编写你的第一个Django应用,第1部分

    编写你的第一个 Django 程序 第1部分 让我们通过例子来学习. 在本教程中,我们将引导您创建一个基本的投票应用. 它将包含两部分: 一个公共网站,可让人们查看投票的结果和让他们进行投票. 一个管 ...

  8. [Django个人网站开发]·编写你的第一个 Django 应用-第 1 部分

    编写你的第一个 Django 应用-第 1 部分 让我们通过示例来学习. 通过这个教程,我们将带着你创建一个基本的投票应用程序. 它将由两部分组成: 一个让人们查看和投票的公共站点. 一个让你能添加. ...

  9. 【Python/Web】Django(一)Django框架的配置和使用

    序章 Python下面有许多受欢迎的web框架,例如Flask.Twisted等,Django也不例外.许多成功的网站都是基于Django,Django作为一个开源的Web应用框架,采用了 MVT 的 ...

最新文章

  1. 树莓派 SyntaxError: invalid syntax(python错误)
  2. 清华南开出品最新视觉注意力机制Attention综述
  3. 图解sqlserver 2000 还原数据库的基本操作
  4. 超萌哒!20000个虎年限定红包封面,限量开抢!
  5. Linux下的shell语言编程入门
  6. 利用ffmpeg来进行视频解码的完整示例代码(H.264)
  7. 三运放差分放大电路分析_信号源内阻对差动放大电路共模抑制比的影响分析与改善方法...
  8. 机器学习 —— 概率图模型(CPD)
  9. 乌班图系统安装到U盘
  10. Linux深度学习框架安装
  11. 教程 海湾主机crt_海湾消防主机JB-QT-GST5000火灾报警控制器(联动型)与crt是怎么连接编公式的...
  12. (一)CGAL库应用:指定平面切割模型并用openGL显示该层面轮廓
  13. 4.7/4.8 磁盘挂载
  14. 80后的童鞋们,还记得大明湖畔的克林顿时代吗?
  15. [HTML/CSS]Flex布局中space-evenly的兼容性
  16. 使用express封装一个简单的http代理服务器以及手动设置Access-Control-Allow-Origin解决跨域问题
  17. D2D,让通信更简单!
  18. postman报错500 Internal Server Error
  19. BUG InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Pl
  20. RACTuple分析

热门文章

  1. 中英文报时器(我一直解决不了整数转对应英文单词字符串,这报时器的“残码”可冷放了不少时日)
  2. 快速选择算法及C++代码
  3. Shader 学习笔记:描边
  4. 使用SandCastle和ScriptDoc创建JavaScript文档
  5. C# System.IO.IOException HResult=0x8007000D Message=数据无效。解决办法
  6. 1.模拟※(0x3f:从周赛中学算法 2022下)
  7. kafka后台运行命令
  8. Vuex的使用(十)——mutations和actions的返回值测试
  9. html二级目录的实现,二级目录.html
  10. 前端框架OnsenUI学习之初识OnsenUI