关于“Python”的核心知识点整理大全64
目录
20.2.15 确保项目的安全
settings.py
20.2.16 提交并推送修改
20.2.17 创建自定义错误页面
1. 创建自定义模板
500.html
settings.py
settings.py
注意
views.py
20.2.18 继续开发
往期快速传送门👆(在文章最后):
感谢大家的支持!欢迎订阅收藏!专栏将持续更新!
20.2.15 确保项目的安全
当前,我们部署的项目存在一个严重的安全问题:settings.py包含设置DEBUG=True,它在发生错误时显示调试信息。开发项目时,Django的错误页面向你显示了重要的调试信息,如果将项目 部署到服务器后依然保留这个设置,将给攻击者提供大量可供利用的信息。我们还需确保任何人 都无法看到这些信息,也不能冒充项目托管网站来重定向请求。 下面来修改settings.py,以让我们能够在本地看到错误消息,但部署到服务器后不显示任何 错误消息:
settings.py
--snip--
# Heroku设置
if os.getcwd() == '/app':--snip--# 让request.is_secure()承认X-Forwarded-Proto头SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')# 只允许Heroku托管这个项目
1 ALLOWED_HOSTS = ['learning-log.herokuapp.com']
2 DEBUG = False# 静态资产配置--snip--
我们只需做两方面的修改。在1处,修改ALLOWED_HOSTS,只允许Heroku托管这个项目。你需 要使用应用程序的名称,可以是Heroku提供的名称(如afternoon-meadow-2775.herokuapp.com), 也可以是你选择的名称。在2处,我们将DEBUG设置为False,让Django不在错误发生时显示敏感 信息。
20.2.16 提交并推送修改
现在需要将对settings.py所做的修改提交到Git仓库,再将修改推送到Heroku。下面的终端会 话演示了这个过程:
1 (ll_env)learning_log$ git commit -am "Set DEBUG=False for Heroku."
[master 081f635] Set DEBUG=False for Heroku.
1 file changed, 4 insertions(+), 2 deletions(-)
2 (ll_env)learning_log$ git status
# On branch master
nothing to commit, working directory clean
(ll_env)learning_log$
我们执行命令git commit,并指定了一条简短而具有描述性的提交消息(见1)。别忘了,标 志-am让Git提交所有修改过的文件,并记录一条日志消息。Git找出唯一一个修改过的文件,并将 所做的修改提交到仓库。
2处显示的状态表明我们在仓库的分支master上工作,当前没有任何未提交的修改。推送到Heroku之前,必须检查状态并看到刚才所说的消息。如果你没有看到这样的消息,说明有未提交 的修改,而这些修改将不会推送到服务器。在这种情况下,可尝试再次执行命令commit,但如果 你不知道该如何解决这个问题,请阅读附录D,更深入地了解Git的用法。 下面来将修改后的仓库推送到Heroku:
(ll_env)learning_log$ git push heroku master
--snip--
remote: -----> Python app detected
remote: -----> Installing dependencies with pip
--snip--
remote: -----> Launching... done, v8
remote: https://learning-log.herokuapp.com/ deployed to Heroku
remote: Verifying deploy.... done.
To https://git.heroku.com/learning-log.git4c9d111..ef65d2b master -> master
(ll_env)learning_log$
Heroku发现仓库发生了变化,因此重建项目,确保所有的修改都已生效。它不会重建数据库, 因此这次无需执行命令migrate。 现在要核实部署更安全了,请输入项目的URL,并在末尾加上我们未定义的扩展。例如,尝 试访问http://learning-log.herokuapp.com/letmein/。你将看到一个通用的错误页面,它没有泄露任 何有关该项目的具体信息。如果你尝试向本地的“学习笔记”发出同样的请求——输入URL http://localhost:8000/letmein/,你将看到完整的Django错误页面。这样的结果非常理想,你接着开 发这个项目时,将看到信息丰富的错误消息,但用户看不到有关项目代码的重要信息。
20.2.17 创建自定义错误页面
在第19章,我们对“学习笔记”进行了配置,使其在用户请求不属于他的主题或条目时返回 404错误。你可能还遇到过一些500错误(内部错误)。404错误通常意味着你的Django代码是正确 的,但请求的对象不存在。500错误通常意味着你编写的代码有问题,如views.py中的函数有问题。 当前,在这两种情况下,Django都返回通用的错误页面,但我们可以编写外观与“学习笔记”一 致的404和500错误页面模板。这些模板必须放在根模板目录中。
1. 创建自定义模板
在文件夹learning_log/learning_log中,新建一个文件夹,并将其命名为templates;再在这个 文件夹中新建一个名为404.html的文件,并在其中输入如下内容:
404.html
{% extends "learning_logs/base.html" %}
{% block header %}<h2>The item you requested is not available. (404)</h2>
{% endblock header %}
这个简单的模板指定了通用的404错误页面包含的信息,并且该页面的外观与网站的其他部 分一致。 再创建一个名为500.html的文件,并在其中输入如下代码:
500.html
{% extends "learning_logs/base.html" %}
{% block header %}<h2>There has been an internal error. (500)</h2>
{% endblock header %}
这些新文件要求对settings.py做细微的修改:
settings.py
--snip--
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'learning_log/templates')],'APP_DIRS': True,--snip--},
]
--snip-
这项修改让Django在根模板目录中查找错误页面模板。
2. 在本地查看错误页面
在将项目推送到Heroku之前,如果你要在本地查看错误页面是什么样的,首先需要在本地设 置中设置Debug=False,以禁止显示默认的Django调试页面。为此,可对settings.py做如下修改(请 确保你修改的是用于本地环境的settings.py部分,而不是用于Heroku的部分):
settings.py
--snip--
# 安全警告:不要在在线环境中启用调试!
DEBUG = False
ALLOWED_HOSTS = ['localhost']
--snip--
DEBUG被设置为False时,你必须在ALLOWED_HOSTS中指定一个主机。现在,请求一个不属于你 的主题或条目,以查看404错误页面;请求不存在的URL(如localhost:8000/letmein/),以查看500 错误页面。 查看错误页面后,将DEBUG重新设置为True,以方便你进一步开发“学习笔记”。(在settings.py 中用于Heroku部署的部分中,确保DEBUG依然被设置为False)。
注意
500错误页面不会显示任何有关当前用户的信息,因为发生服务器错误时,Django不会通 过响应发送任何上下文信息。
3. 将修改推送到Heroku
现在需要提交对模板所做的修改,并将这些修改推送到Heroku
1 (ll_env)learning_log$ git add .
2 (ll_env)learning_log$ git commit -am "Added custom 404 and 500 error pages."3 files changed, 15 insertions(+), 10 deletions(-)create mode 100644 learning_log/templates/404.htmlcreate mode 100644 learning_log/templates/500.html
3 (ll_env)learning_log$ git push heroku master
--snip--
remote: Verifying deploy.... done.
To https://git.heroku.com/learning-log.git2b34ca1..a64d8d3 master -> master
(ll_env)learning_log$
在1处,我们执行了命令git add,这是因为我们在项目中创建了一些新文件,因此需要让 Git跟踪这些文件。然后,我们提交所做的修改(见2),并将修改后的项目推送到Heroku(见3)。 现在,错误页面出现时,其样式应该与网站的其他部分一致,这样在发生错误时,用户将不 会感到突兀。
4. 使用方法get_object_or_404() 现在,如果用户手工请求不存在的主题或条目,将导致500错误。Django尝试渲染请求的页 面,但没有足够的信息来完成这项任务,进而引发500错误。对于这种情形,将其视为404错误更 合适,为此可使用Django快捷函数get_object_or_404()。这个函数尝试从数据库获取请求的对象, 如果这个对象不存在,就引发404异常。我们在views.py中导入这个函数,并用它替换函数get():
views.py
--snip--
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect, Http404
--snip--
@login_required
def topic(request, topic_id):"""显示单个主题及其所有的条目"""topic = get_object_or_404(Topic, id=topic_id)# 确定主题属于当前用户--snip--
现在,如果你请求不存在的主题(例如,使用URL http://localhost:8000/topics/999999/),将 看到404错误页面。为部署这里所做的修改,再次提交,并将项目推送到Heroku。
20.2.18 继续开发
将项目“学习笔记”推送到服务器后,你可能想进一步开发它或开发要部署的其他项目。更 新项目的过程几乎完全相同。
首先,你对本地项目做必要的修改。如果在修改过程中创建了新文件,使用命令git add . (千万别忘记这个命令末尾的句点)将它们加入到Git仓库中。如果有修改要求迁移数据库,也需 要执行这个命令,因为每个迁移都将生成新的迁移文件。
然后,使用命令git commit -am "commit message"将修改提交到仓库,再使用命令git push heroku master将修改推送到Heroku。如果你在本地迁移了数据库,也需要迁移在线数据库。为 此,你可以使用一次性命令heroku run python manage.py migrate,也可使用heroku run bash打 开一个远程终端会话,并在其中执行命令python manage.py migrate。然后访问在线项目,确认 你期望看到的修改已生效。
在这个过程中很容易犯错,因此看到错误时不要大惊小怪。如果代码不能正确地工作,请重 新审视所做的工作,尝试找出其中的错误。如果找不出错误,或者不知道如何撤销错误,请参阅 附录C中有关如何寻求帮助的建议。不要羞于去寻求帮助:每个学习开发项目的人都可能遇到过 你面临的问题,因此总有人乐意伸出援手。通过解决遇到的每个问题,可让你的技能稳步提高, 最终能够开发可靠而有意义的项目,还能解决别人遇到的问题。
关于“Python”的核心知识点整理大全62-CSDN博客
关于“Python”的核心知识点整理大全37-CSDN博客
关于“Python”的核心知识点整理大全25-CSDN博客
关于“Python”的核心知识点整理大全12-CSDN博客
往期快速传送门👆(在文章最后):
感谢大家的支持!欢迎订阅收藏!专栏将持续更新!
相关文章:

关于“Python”的核心知识点整理大全64
目录 20.2.15 确保项目的安全 settings.py 20.2.16 提交并推送修改 20.2.17 创建自定义错误页面 1. 创建自定义模板 500.html settings.py settings.py 注意 views.py 20.2.18 继续开发 往期快速传送门👆(在文章最后):…...

Docker overlay2文件busy,容器不能删除问题解决
文章目录 在删除docker容器的时候报错,说设备正忙通过 docker ps -a 查看有两个状态的dead的容器解决方法:1.查看所有挂载的设备2.截取设备的进程id3.清理进程(kill掉即可) 在删除docker容器的时候报错,说设备正忙 Error response from daemon: Driver overlay2 fai…...

栈的数据结构实验报告
一、实验目的: 1、理解栈的定义; 2、利用栈处理实际问题。 二、实验内容(实验题目与说明) 利用栈实现数据的分类,将输入的整数以奇偶为标准分别存放到两个栈中,并最终从栈1和栈2输出偶数和奇数序列。 …...
ValueError: Could not find a backend to open path with iomode `wI` 解决
运行如下语句时报错 imageio.mimwrite(os.path.join(savedir, video.mp4)报错信息: ValueError: Could not find a backend to open video.mp4 with iomode wI. Based on the extension, the following plugins might add capable backends:FFMPEG: pip install …...

小白入门基础 - spring Boot 入门
1.简介 spring Boot是为了简化java的开发流程而构建的,即使是使用springMVC框架,也依然需要大量配置和依赖导入, 这无疑是繁琐的,spring Boot采用了”习惯由于配置“的原则,进行一键化部署,这样极大…...
探索Elasticsearch内存应用的关键因素
了解Elasticsearch内存模型 Elasticsearch的内存使用主要包括堆内存和操作系统缓存。堆内存是Elasticsearch用来存储数据结构的内存,例如文档索引、倒排索引等。操作系统缓存则是Elasticsearch缓存磁盘上的数据块以加速读取操作的一种机制,通常被称为OS…...

关于简单的数据可视化
1. 安装数据可视化必要的openpyxl、pandas,matplotlib等软件包 使用清华源,命令如下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…...

透明OLED屏价格:影响因素与市场趋势
在当今的显示技术领域,透明OLED屏以其独特的透明特性和出色的显示效果,正逐渐成为市场的新宠。然而,对于许多消费者和企业来说,透明OLED屏的价格仍是关注的焦点。作为OLED透明屏市场部总监,我认为了解影响透明OLED屏价…...

C++ 释放指针
在C中,释放指针通常使用delete或delete[]操作符; 如果指针指向的是单个对象,可以使用delete操作符进行释放; 在释放完内存后,最好将指针置为nullptr,以避免出现悬空指针(dangling pointer&#…...
三数之和【双指针】
Problem: 15. 三数之和 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 两数相加的加强版,先确定第一个数,然后从右边去用双指针找另外两个数。注意题目需要避免重复的答案,所以要注意处理这个问题。 复杂度 时间复杂度: 添加…...

http 503 错误
503错误是一种HTTP状态码,表示你请求的网站或服务暂时不可用,通常是因为服务器过载或维护,你可能会看到类似这样的提示:503 Service Unavailable、503 Service Temporarily Unavailable、HTTP Server Error 503、HTTP Error 503 I…...

MATLAB - MPC - 优化问题(Optimization Problem)
系列文章目录 前言 模型预测控制可在每个控制间隔内解决一个优化问题,具体来说就是二次规划(QP)。求解结果决定了被控对象在下一个控制间隔之前使用的操纵变量(MV)。 该 QP 问题具有以下特点: 目标或 "成本 "函数 - …...
机器学习中的概念 张量、标量、向量、矩阵等数据结构的区别
张量、标量、向量和矩阵等数据结构在深度学习和数学中扮演着重要角色,它们之间的区别如下: 标量(Scalar):标量是一个单独的数,它没有方向,只有大小。在深度学习中,标量通常表示一个…...

eureka注册列表 某服务出现多个服务实例
最近文件导出功能偶发成功,大部分情况都失败,开始以为接口被拦截,gateway服务没有接口调用日志,发现测试环境可以,正式环境功能无法正常使用。 偶然看到注册中心如下 发现file服务有3个实例,调用接口将错误…...

ubuntu22.04配置双网卡绑定提升带宽
这里写自定义目录标题 Bonding简介配置验证参考链接 Bonding简介 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载均衡等功能,有很…...

VINS-MONO拓展1----手写后端求解器,LM3种阻尼因子策略,DogLeg,构建Hessian矩阵
文章目录 0. 目标及思路1. 非线性优化求解器2. 基于VINS-MONO的Marginalization框架构建Hessian矩阵2.1 estimator.cpp移植2.2 solve.cpp/preMakeHessian()2.3 solve.cpp/makeHessian() 3. solve.cpp/solveLinearSystem()求解正规方程4. 更新状态5. 迭代求解6. EVO评估结果7. 待…...
RxJS 操作符-学习笔记
提前准备: pipe 方法: 用于组合多个操作符,可以将一系列操作符作为参数传递给 pipe 方法,这些操作符将 依次 对数据流进行处理。这里的依次很关键,也代表着pipe()中组合的这么几个操作符的执行顺序就是从开始一直到结束的,其中的…...
【Linux】linux配置静态IP、动态IP方法汇总
1、systemd-networkd 1.1 说明 systemd-networkd是systemd 的一部分 ,负责 systemd 生态中的网络配置部分(systemd-networkd.service, systemd-resolved.service)。使用 systemd-networkd,你可以为网络设备配置基础的 DHCP/静态IP网络等,还可以配置虚拟网络功能,例如网桥…...
Hive自定义函数支持国密SM4解密
当前项目背景需要使用到国密SM4对加密后的数据进行解密,Hive是不支持的,尝试了华为DWS数仓,华为只支持在DWS中的SM4加密解密,不支持外部加密数据DWS解密 新建Maven工程 只需要将引用的第三方依赖打到jar包中,hadoop和…...

CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路
之前写过一篇关于centos 8 官方停止更新维护后解决yum源问题的文章: CentOS 8 停止维护后换可用yum源——筑梦之路_http://ftp.iij.ad.jp/pub/linux/centos-vault/8.5.21-CSDN博客 由于centos 8 dvd的镜像比较大,有时候我们根本不需要去下载一个10G以上…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...