关于“Python”的核心知识点整理大全60

目录

19.4 小结

第 20 章

设置应用程序的样式并对其 进行部署

20.1 设置项目“学习笔记”的样式

20.1.1 应用程序 django-bootstrap3

settings.py

settings.py

20.1.2 使用 Bootstrap 来设置项目“学习笔记”的样式

20.1.3 修改 base.html

1. 定义HTML头部

base.html

2. 定义导航栏

3. 定义页面的主要部分

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


--snip--
@login_required
def new_topic(request):
 """添加新主题"""
 if request.method != 'POST':
 # 没有提交的数据,创建一个空表单
 form = TopicForm()
 else:
 # POST提交的数据,对数据进行处理
 form = TopicForm(request.POST)
 if form.is_valid():
1 new_topic = form.save(commit=False)
2 new_topic.owner = request.user
3 new_topic.save()
 return HttpResponseRedirect(reverse('learning_logs:topics'))
 context = {'form': form}
 return render(request, 'learning_logs/new_topic.html', context)
 --snip-- 

我们首先调用form.save(),并传递实参commit=False,这是因为我们先修改新主题,再将其 保存到数据库中(见1)。接下来,将新主题的owner属性设置为当前用户(见2)。最后,对刚定 义的主题实例调用save()(见3)。现在主题包含所有必不可少的数据,将被成功地保存。 现在,这个项目允许任何用户注册,而每个用户想添加多少新主题都可以。每个用户都只能 访问自己的数据,无论是查看数据、输入新数据还是修改旧数据时都如此。

19.4 小结

在本章中,你学习了如何使用表单来让用户添加新主题、添加新条目和编辑既有条目。接下 来,你学习了如何实现用户账户。你让老用户能够登录和注销,并学习了如何使用Django提供的 表单UserCreationForm让用户能够创建新账户。

建立简单的用户身份验证和注册系统后,你通过使用装饰器@login_required禁止未登录的用 户访问特定页面。然后,你通过使用外键将数据关联到特定用户,还学习了如何执行要求指定默 认数据的数据库迁移。

最后,你学习了如何修改视图函数,让用户只能看到属于他的数据。你使用方法filter()来 获取合适的数据,并学习了如何将请求的数据的所有者同当前登录的用户进行比较。 该让哪些数据可随便访问,该对哪些数据进行保护呢?这可能并非总是那么显而易见,但通 过不断地练习就能掌握这种技能。在本章中,我们就该如何保护用户数据所做的决策表明,与人 合作开发项目是个不错的主意:有人对项目进行检查的话,更容易发现其薄弱环节。

至此,我们创建了一个功能齐备的项目,它运行在本地计算机上。在本书的最后一章,我们 将设置这个项目的样式,使其更漂亮;我们还将把它部署到一台服务器上,让任何人都可通过互 联网注册并创建账户。


第 20 章

设置应用程序的样式并对其 进行部署

20.1 设置项目“学习笔记”的样式

我们一直专注于项目“学习笔记”的功能,而没有考虑样式设置的问题,这是有意为之的。 这是一种不错的开发方法,因为能正确运行的应用程序才是有用的。当然,应用程序能够正确运 行后,外观就显得很重要了,因为漂亮的应用程序才能吸引用户使用它。

在本节中,我将简要地介绍应用程序django-bootstrap3,并演示如何将其继承到项目中,为 部署项目做好准备。

20.1.1 应用程序 django-bootstrap3

我们将使用django-bootstrap3来将Bootstrap继承到项目中。这个应用程序下载必要的Bootstrap 文件,将它们放到项目的合适位置,让你能够在项目的模板中使用样式设置指令。 为安装django-bootstrap3,在活动的虚拟环境中执行如下命令:

(ll_env)learning_log$ pip install django-bootstrap3
--snip--
Successfully installed django-bootstrap3

接下来,需要在settings.py的INSTALLED_APPS中添加如下代码,在项目中包含应用程序 django-boostrap3:

settings.py
--snip--
INSTALLED_APPS = (
 --snip--
 'django.contrib.staticfiles',
 # 第三方应用程序
 'bootstrap3',
 # 我的应用程序
 'learning_logs',
 'users',
)
--snip--

新建一个用于指定其他开发人员开发的应用程序的片段,将其命名为“第三方应用程序”, 并在其中添加'bootstrap3'。大多数应用程序都需要包含在INSTALLED_APPS中,为确定这一点, 请阅读要使用的应用程序的设置说明。 我们需要让django-bootstrap3包含jQuery,这是一个JavaScript库,让你能够使用Bootstrap模板 提供的一些交互式元素。请在settings.py的末尾添加如下代码:

settings.py
--snip--
# 我的设置
LOGIN_URL = '/users/login/'
# django-bootstrap3的设置
BOOTSTRAP3 = {
 'include_jquery': True,
 } 

这些代码让你无需手工下载jQuery并将其放到正确的地方。

20.1.2 使用 Bootstrap 来设置项目“学习笔记”的样式

Bootstrap基本上就是一个大型的样式设置工具集,它还提供了大量的模板,你可将它们应用 于项目以创建独特的总体风格。对Bootstrap初学者来说,这些模板比各个样式设置工具使用起来 要容易得多。要查看Bootstrap提供的模板,可访问http://getbootstrap.com/,单击Getting Started, 再向下滚动到Examples部分,并找到Navbars in action。我们将使用模板Static top navbar,它提供 了简单的顶部导航条、页面标题和用于放置页面内容的容器。 图20-1显示了对base.html应用这个Bootstrap模板并对index.html做细微修改后的主页。

知道要获得的效果后,接下来的内容理解起来将更容易。

20.1.3 修改 base.html

我们需要修改模板base.html,以使用前述Bootstrap模板。我们把新的base.html分成几个部分 进行介绍。

1. 定义HTML头部

对base.html所做的第一项修改是,在这个文件中定义HTML头部,使得显示“学习笔记”的 每个页面时,浏览器标题栏都显示这个网站的名称。我们还将添加一些在模板中使用Bootstrap所 需的信息。删除base.html的全部代码,并输入下面的代码:

base.html
1 {% load bootstrap3 %}
2 <!DOCTYPE html>
3 <html lang="en">
4 <head>
 <meta charset="utf-8"> 
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
5 <title>Learning Log</title>
6 {% bootstrap_css %}
 {% bootstrap_javascript %}
7 </head>

在1处,我们加载了django-bootstrap3中的模板标签集。接下来,我们将这个文件声明为使用 英语(见3)编写的HTML文档(见2)。HTML文件分为两个主要部分:头部(head)和主体(body); 在这个文件中,头部始于4处。HTML文件的头部不包含任何内容:它只是将正确显示页面所需 的信息告诉浏览器。在5处,我们包含了一个title元素,在浏览器中打开网站“学习笔记”的 页面时,浏览器的标题栏将显示该元素的内容。

在6处,我们使用了django-bootstrap3的一个自定义模板标签,它让Django包含所有的 Bootstrap样式文件。接下来的标签启用你可能在页面中使用的所有交互式行为,如可折叠的导航 栏。7处为结束标签。

2. 定义导航栏

下面来定义页面顶部的导航栏:

--snip--
 </head>
 <body>
 <!-- Static navbar -->
1 <nav class="navbar navbar-default navbar-static-top">
 <div class="container">
 <div class="navbar-header">
2 <button type="button" class="navbar-toggle collapsed"
 data-toggle="collapse" data-target="#navbar"
 aria-expanded="false" aria-controls="navbar">
 </button>
3 <a class="navbar-brand" href="{% url 'learning_logs:index' %}">
 Learning Log</a>
 </div>
4 <div id="navbar" class="navbar-collapse collapse">
5 <ul class="nav navbar-nav">
6 <li><a href="{% url 'learning_logs:topics' %}">Topics</a></li>
 </ul>

7 <ul class="nav navbar-nav navbar-right">
 {% if user.is_authenticated %}
 <li><a>Hello, {{ user.username }}.</a></li>
 <li><a href="{% url 'users:logout' %}">log out</a></li>
 {% else %} 
<li><a href="{% url 'users:register' %}">register</a></li>
 <li><a href="{% url 'users:login' %}">log in</a></li>
 {% endif %}
8 </ul>
 </div><!--/.nav-collapse -->
 </div>
 </nav> 

第一个元素为起始标签。HTML文件的主体包含用户将在页面上看到的内容。1处是 一个

元素,表示页面的导航链接部分。对于这个元素内的所有内容,都将根据选择器 (selector)navbar、navbar-default和navbar-static-top定义的Bootstrap样式规则来设置样式。选 择器决定了特定样式规则将应用于页面上的哪些元素。

在2处,这个模板定义了一个按钮,它将在浏览器窗口太窄、无法水平显示整个导航栏时显 示出来。如果用户单击这个按钮,将出现一个下拉列表,其中包含所有的导航元素。在用户缩小 浏览器窗口或在屏幕较小的移动设备上显示网站时,collapse会使导航栏折叠起来。

在3处,我们在导航栏的最左边显示项目名,并将其设置为到主页的链接,因为它将出现在 这个项目的每个页面中。

在4处,我们定义了一组让用户能够在网站中导航的链接。导航栏其实就是一个以

<ul>打头 的列表(见5),其中每个链接都是一个列表项(<li>)。要添加更多的链接,可插入更多使用下 述结构的行:

<li><a href="{% url 'learning_logs:title' %}">Title</a></li> 

这行表示导航栏中的一个链接。这个链接是直接从base.html的前一个版本中复制而来的。 在7处,我们添加了第二个导航链接列表,这里使用的选择器为navbar-right。选择器 navbar-right设置一组链接的样式,使其出现在导航栏右边——登录链接和注册链接通常出现在 这里。在这里,我们要么显示问候语和注销链接,要么显示注册链接和登录链接。这部分余下的 代码结束包含导航栏的元素(见8)。

3. 定义页面的主要部分

base.html的剩余部分包含页面的主要部分:

--snip--
 </nav>
1 <div class="container">
 <div class="page-header">
2 {% block header %}{% endblock header %}
 </div>
 <div>
3 {% block content %}{% endblock content %}
 </div>
 </div> <!-- /container -->
/body>
</html>


关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/294771.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何通过内网穿透实现无公网IP远程访问内网的Linux宝塔面板

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

免费文件格式转换器——Fconvertio!

项目链接&#xff1a;https://fostmar.online/fconvertio.html 特点&#xff1a; 完全免费支持文件格式多界面极为简单 支持格式转换&#xff1a; gifjpegjpgpngpdfdocdocxodtrtfxlsxlsxcsvodspptpptxodptxtziprarmp3wavmp4avihtmlsql

影响助听器使用寿命的因素

至少有九个因素会影响助听器的平均寿命&#xff1a; 用于制造助听器的材料清洁频率佩戴助听器的地方助听器的存放方式助听器样式一个人的身体生理学维护频率技术进步独特的听力需求 1.用于制作助听器的材料 虽然助听器的设计经久耐用&#xff0c;但由塑料、金属、硅、聚合物…

《学周刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

《家长》以马列主义、思想、邓小平理论和“三个代表”重要思想为指导&#xff0c;全面贯彻党的教育方针和“双百方针”&#xff0c;理论联系实际&#xff0c;开展教育科学研究和学科基础理论研究&#xff0c;交流科技成果&#xff0c;促进学院教学、科研工作的发展&#xff0c;…

安卓平板电脑,5G通讯加持,帮你的通讯效率提提速

安卓平板电脑&#xff0c;作为一种集通讯、娱乐、工作于一体的便携设备&#xff0c;近年来随着5G通讯技术的发展&#xff0c;其在通讯效率方面迎来了新的提升。5G通讯加持&#xff0c;不仅为安卓平板电脑带来了更快速、更稳定的数据传输能力&#xff0c;也为用户的通讯效率提供…

云卷云舒:【实战篇】Redis迁移

1. 简介 Remote Dictionary Server(Redis)是一个由Salvatore Sanfilippo写的key-value存储系统&#xff0c;是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 2. 迁移原理 redis-sh…

GPU测试-GPUburn

很早就使用过GPU burn做个类似稳定性 压力性得对GPU进行相应得测试 这里再回顾一下 开源链接如下 https://github.com/wilicc/gpu-burn 简单得步骤主要是 先安装gpu得driver cuda 并进行验证如下 我理解其实按照gpu的 driver就可以了 如果是使用docker的情况下 安装github下…

使用printJS使网页打印成PDF、网页html结合printJS导出为pdf

先放几个参考链接 感谢&#xff01; Vue使用PrintJS实现页面打印功能_vue print.js 设置打印pdf的大小-CSDN博客 前台导出pdf经验汇总 &#xff08;html2canvas.js和浏览器自带的打印功能-print.js&#xff09;以及后台一些导出pdf的方法_iqc后台管理系统怎么做到导出pdf-CSD…

钉钉审批流程解读

组织机构 部门 部门可以创建下级部门部门可以设置部门主管&#xff0c;可以是多人部门可以默认构建&#xff0c;沟通群可以设置部门信息&#xff0c;比如电话、简介可以设置部门的可见性&#xff0c;比如隐藏本部门&#xff0c;本部门将不会在组织机构、搜索&#xff0c;个人…

Git如何将多个commit合并一个commit

问题场景&#xff1a;我在fork的仓库提交多个commit后&#xff0c;准备向原仓库提交pr&#xff0c;但是原仓库要求一个pr一个commit&#xff0c;因此需要先将这些commit合并为一个。 1.先拿到要合并的commit中最早的一个的commit id&#xff0c;然后进入仓库&#xff0c;使用如…

Android linphone-android sdk设置语音编码问题

1.遇到的问题 今天遇到linphone-android sdk需要解决语音编码问题&#xff0c;需要指定编码。查了下配置&#xff0c;里面没有发现类似的配置。 ## Start of factory rc # This file shall not contain path referencing package name, in order to be portable when app is r…

微机原理笔记(4)

一、数据传送指令 1、数据传送指令MOV 语句格式&#xff1a;MOV OPD&#xff0c;OPS功能&#xff1a;将源操作数传入目的地址&#xff0c;源地址内容不变。即&#xff08;OPS&#xff09;-->OPD 注意&#xff1a; MOV指令不改变源操作数内容&#xff0c;不影响标志位。源…

敏捷研发管理流程及示例

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…

深度学习在工地安全帽识别技术的应用与展望

当我们谈论“工地安全帽识别”时&#xff0c;实际上我们在探讨的是如何利用深度学习图像识别技术来提高建筑工地的安全性。这一技术的应用可以显著提高工地安全管理的效率和有效性&#xff0c;是现代建筑工程管理中不可或缺的一部分。以测评的北京富维图像的工地安全帽识别为例…

代码随想录day20 开始二叉搜索树

654.最大二叉树 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…

js逆向第9例:猿人学第2题-js混淆-动态cookie1

题目2:提取全部5页发布日热度的值,计算所有值的加和,并提交答案 (感谢蔡老板为本题提供混淆方案) 既然题目已经给出了cookie问题,那就从cookie入手,控制台找到数据请求地址 可以看到如下加密字符串m类似md5,后面跟着时间戳 m=45cc41dcdb15159ebb50564635f8e362|1704301…

MySQL数据管理(一)

一、列类型 列类型指规定数据库中该列存放的数据类型 列类型分类 数值类型字符串类型日期和时间型数值类型 数值类型 字符串类型 日期和时间类型 MySQL允许“不严格”语法&#xff0c;任何标点符号都可以作为日期部分之间的间隔符&#xff0c;如“24-01-03”、“24.01.03”…

This error originates from a subprocess, and is likely not a problem with pip

我遇这个问题是的原因是包名错误 注意检查包名

最新GPT4.0使用教程,AI绘画,ChatFile文档对话总结+GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

杨中科 ASP.NETCore Rest

什么是Rest RPC 1、Web API两种风格: 面向过程(RPC) 、面向REST (REST) 2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道&#xff0c;不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll…