关于“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以上…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
