Django入门与实践-第17章:保护视图
Django 有一个内置的视图装饰器 来避免它被未登录的用户访问:
现在如果用户没有登录,将被重定向到登录页面:
现在尝试登录,登录成功后,应用程序会跳转到原来所在的位置。 Django入门与实践-第18章:访问已登录用户
现在我么可以改进 new_topic 视图,将发布主题的用户设置当前登录的用户,取代之前直接从数据库查询出来的第一个用户,
之前这份代码是临时的,因为那时候还没有方法去获取登录用户,但是现在可以了:
有两个关键字参数,pk用于唯一标识版块(Board),topic_pk用于唯一标识该回复来自哪个主题。 Django入门与实践-第19章:主题回复
值得注意的是:在视图函数replay_topic中,我们使用 topic_pk ,因为我们引用的是函数的关键字参数,
而在new_topic视图中,我们使用的是 topic.pk ,因为 topic 是一个对象(Topic模型的实例对象),
.pk 是这个实例对象的一个属性,这两种细微的差别,其实区别很大,别搞混了。 Django入门与实践-第20章:QuerySets(查询结果集)
现在我们花点时间来探索关于模型的 API。首先,我们来改进主题:
有3个任务:
显示每个板块的总主题数
显示每个板块的总回复数
显示每个板块的最后发布者和日期
在实现这些功能前,我们先使用Python终端
因为我们要在Python终端尝试,所以,把所有的 models 定义一个__str__ 方法是个好主意
在 Post 模型中,使用了 Truncator 工具类,这是将一个将字符串截取为任意长度字符的简便方法(这?我们使用30个字符)
双下划线的 topic__board 用于通过模型关系来定位,在内部,
Django 在Board-Topic-Post之间构建了桥梁,构建SQL查询来获取属于指定版块下面的帖子回复。
最后一个任务是标识版块下?的最后?条回复 Django入门与实践-第21章:迁移
迁移(Migration)是Django做Web开发的基本组成部分,它使得我们在演进应用的models时,它能使得models文件与数据库保持同步。
当我们第一次运行命令 python manage.py migrate 的时候,Django 会抓取所有迁移文件然后?成数据库 schema。
当Django应用了迁移之后,有一个特殊的表叫做django_migrations,在这个表中,Django注册了所有已经的迁移记录。
我们添加了一个 PositiveIntegerField ,因为这个字段将要存储的是页面的浏览量,不可能是一个负数
在这节课中,我们在留言板的基础功能上取得了一些进步,还剩下一些东西等待去实现,
比如:编辑帖子、我的账户(更改个人信息)等等。之后我们将提供markdown语法和列表的分页功能。 Django入门与实践-第22章:基于类的视图
欢迎来到系列教程的第六部分!在这篇教程中,我们将详细探讨基于类的视图(简称CBV)。
我们也将重构一些现有的视图,以便利用内置的基于类的通用视图(Generic Class-Based Views)。
这篇教程我们还将讨论许多其他主题,例如如何使用分页,如何使用markdown以及如何添加简单的编辑器。
我们还将探索一个名为 Humanize的内置软件包,用于对数据进行“人为操作”。
到头来,所有的Django视图其实都是函数。即便是CBV。在类的底层,它完成了所有的功能并最终返回一个视图函数。
在我们继续教程之前,让我们清楚这三个术语的含义:
基于函数的视图(FBV)
基于类的视图(CBV)
基于类的通用视图(GCBV)
FBV是Django视图中最简单的表示:它就是一个接收 HttpRequest 对象并返回一个 HttpResponse 的函数。
CBV是每个Django视图都被定义为一个扩展 django.views.generic.view抽象类后的 Python 类。
GCBV是可以解决一些具体问题的内置的CBV集合,比如列表视图,创建,更新和删除视图等。
基于类的视图 (CBV)
CBV是View类的集成类。这里的主要区别在于请求是以HTTP方法命名的类用法内处理的,例如GET ,POST ,PUT ,HEAD 等。
所以,在这里,我们不需要做一个条件来判断请求是一个 POST 还是它是一个 GET 。
代码会直接跳转到正确的方法中。在 View 类中内部处理了这个逻辑。
总之,关于CBV的好处是我们可以在类里面添加更多的方法,也许可以这样做:
基于类的通过视图(GCBV)
接下来关于GCBV。这是一个不同的情况。正如我前面提到的,GCBV是内置CBV的常见用例。
它们的实现往往会大量使用多重继承(混合继承)和其他面向对象的策略。
列表视图
我们现在可以利用 CBV 的功能来重构一些现有的视图。以主页为例,我们就先从数据库中抓取所有的 boards 并将其罗列在HTML中: Django入门与实践-第23章:分页实现
我们可以非常容易地使用 CBV 来实现分页功能。但首先我想手工分页,这样就更有助于我们理解背后的机制,这样它就不那么神秘了。
实际上对 boards 列表视图分页并没有意义,因为我们不期望有很多boards。但无疑对于主题列表和帖子列表来说是需要一些分页的。
FBV 分页
这里是我们如何使用 FBV 来实现分页:
GCBV 分页
下面,相同的实现,但这次使用ListView。
可复用的分页模板
就像我们在 form.html 中封装模板时做的一样,我们也可以为分页的HTML代码来创建类似的东西。
我们来对主题帖子页面进行分页,进而找到一种复用分页组件的方法。
现在,我们从topics.html模板中获取分页部分的html代码片,
并在templates/includes 文件夹下面创建一个名为 pagination.html 的新文件,和 forms.html 同级目录: Django入门与实践-第24章:我的账户视图
好的,那么,这部分将是我们最后的一个视图。之后,我们将专心来改进现有功能。 Django入门与实践-第25章:Markdown 支持
让我们在文本区域添加 Markdown 支持来改善用户体验。你会看到要实现这个功能非常简单。
首先,我们安装一个名为 Python-Markdown 的库:
pip install markdown
默认情况下,这个插件会将它找到的第一个文本区域转换为 markdown 编辑器。所以这点代码应该就足够了: Django入门与实践-第26章:个性化工具
我觉得只添加内置的个性化(humanize)包就会很不错。它包含一组为数据添加“个性化(human touch)”的工具集。
例如,我们可以使用它来更自然地显示日期和时间字段。我们可以简单地显示:“2分钟前”,而不是显示整个日期。
我们所要做的就是在模板中加载 {%load humanize%} 这个模板标签,然后在模板中使用过滤器: {{ topic.last_updated|naturaltime }}

Django入门与实践 17-26章总结的更多相关文章

  1. Django入门与实践-第26章:个性化工具(完结)

    http://127.0.0.1:8000/boards/1/topics/62/reply/ 我觉得只添加内置的个性化(humanize)包就会很不错. 它包含一组为数据添加“人性化(human t ...

  2. Django入门与实践-第14章:用户注册(完结)

    http://127.0.0.1:8000/signup/ django-admin startapp accounts INSTALLED_APPS = [ 'accounts', ] # mypr ...

  3. Django入门与实践-第13章:表单处理(完结)

    http://127.0.0.1:8000/boards/1/ http://127.0.0.1:8000/boards/2/ http://127.0.0.1:8000/boards/3/ http ...

  4. Django入门与实践-第12章:复用模板(完结)

    http://127.0.0.1:8000/http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1 ...

  5. Django入门与实践-第11章:URL 分发(完结)

    http://127.0.0.1:8000http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1: ...

  6. Django入门与实践-第25章:Markdown 支持(完结)

    http://127.0.0.1:8000/boards/1/topics/102/reply/ 让我们在文本区域添加 Markdown 支持来改善用户体验. 你会看到要实现这个功能非常简单. 首先, ...

  7. Django入门与实践-第24章:我的账户视图(完结)

    http://127.0.0.1:8000/settings/account/ #好的,那么,这部分将是我们最后的一个视图.之后,我们将专心来改进现有功能. #accounts/views.py fr ...

  8. Django入门与实践-第23章:分页实现(完结)

    http://127.0.0.1:8000/boards/1/ #从现在起,我们将在 board_topics 这个视图中来操作. python manage.py shell from django ...

  9. Django入门与实践-第22章:基于类的视图

    http://127.0.0.1:8000/boards/1/topics/2/posts/2/edit/ http://127.0.0.1:8000/ #boards/views.py from d ...

  10. Django入门与实践-第20章:QuerySets(查询结果集)(完结)

    http://127.0.0.1:8000/boards/1/ #boards/models.py from django.utils.text import Truncator class Topi ...

随机推荐

  1. 前端-HTML练习题

    本小节重点: 熟练使用div+span布局,知道div和span的语义化的意思 熟悉对div.ul.li.span.a.img.table.form.input标签有深刻的认知,初期也了解他们,知道他 ...

  2. vue基础——vue介绍

    声明式渲染——文本插值: 数据和dom已经进行了关联,所有东西都是响应式的 index.html <div id="app0"> {{message}} </di ...

  3. setTranslatesAutoresizingMaskIntoConstraints

    [viewItem setTranslatesAutoresizingMaskIntoConstraints:NO]; 在给继承UIView的类设置此属性后,UIView的某些属性可能发生变化.例如f ...

  4. python 在内存中处理tar.bz2文件

    如果tar.bz2文件是通过网络进行下载,那么可以直接在内存进行解压后读取文件内容,不用将文件缓存到本地然后解压再进行读取,可以节省IO. 处理经过gzip压缩的tar文件的方法见:https://s ...

  5. jdk5新特性

    前两天看到jdk10试用版都出来了,才发现自己连1.8都没用过,对不同版本的jdk的新特性也不是太了解,所以想还是百度一下看看人家怎么说然后自己记录总结一下,其中jdk1.8的新特性可以到edu.51 ...

  6. XSS学习小结

    一.什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 这里我们主要注 ...

  7. MySQL 逻辑备份工具

    简介: Mydumper.Myloader 是一个第三方的.开源的 MySQL 逻辑备份工具. 支持多线程,比起 mysqldump 要快很多,也能解决 innobackupex 备份工具对 MyIS ...

  8. Virtualbox [The headers for the current running kernel were not found] (操作过程后还是失败,显示相同问题)

    在笔记本安装Ubuntu11.04增强功能失败 引用 fuliang@fuliang-VirtualBox:~$ sudo /etc/init.d/vboxadd setup Removing exi ...

  9. Python 3 学习笔记(2)

    输入输出 str() 函数人类可读,repr() 解释器可读 rjust() 靠右,ljust() 靠左,center() 居中.zfill() 填0. 名字空间 名字到对象的映射关系被称为名字空间. ...

  10. ng2-file-upload 使用记录

    最近这两周一直在修bug,修的很是痛苦,不过痛苦也是件好事,不然每天都是在做同样的事情,没有什么挑战,工作多无聊呀! 是吧. 大致说一下背景吧: 这个项目是两年前开新项目,到现在一直还在开发中,一直不 ...