模板建站优点,怎么卸载windows优化大师,大连住建部官网,国际新闻最新消息十条目录
20.2.15 确保项目的安全
settings.py
20.2.16 提交并推送修改
20.2.17 创建自定义错误页面
1. 创建自定义模板
500.html
settings.py
settings.py
注意
views.py
20.2.18 继续开发
往期快速传送门#x1f446;#xff08;在文章最后#xff09;#xff1a…
目录
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包含设置DEBUGTrue它在发生错误时显示调试信息。开发项目时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 DEBUGFalse for Heroku.
[master 081f635] Set DEBUGFalse 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 %}h2The item you requested is not available. (404)/h2
{% endblock header %} 这个简单的模板指定了通用的404错误页面包含的信息并且该页面的外观与网站的其他部 分一致。 再创建一个名为500.html的文件并在其中输入如下代码 500.html {% extends learning_logs/base.html %}
{% block header %}h2There 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之前如果你要在本地查看错误页面是什么样的首先需要在本地设 置中设置DebugFalse以禁止显示默认的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, idtopic_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博客
往期快速传送门在文章最后
感谢大家的支持欢迎订阅收藏专栏将持续更新