5.设置应用程序的样式

安装django-bootstrap3

# untitled/untitled/settings.py
# ··· INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles', # 第三方应用程序
'bootstrap3', # 我的应用程序
'learning_logs',
'users'
] # ··· BOOTSTRAP3 = {
'include_jquery' : True
}
<!-- untitled/templates/learning_logs/base.html -->
{% load bootstrap3 %} <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>Learning Log</title> {% bootstrap_css %}
{% bootstrap_javascript %} </head> <body> <!-- Static navbar -->
<nav class="navbar navbar-default navbar-static-top">
<div class="container"> <div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
</button>
<a class="navbar-brand" href="{% url 'learning_logs:index' %}">
Learning Log</a>
</div> <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="{% url 'learning_logs:topics' %}">Topics</a></li>
</ul> <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 %}
</ul>
</div><!--/.nav-collapse --> </div>
</nav> <div class="container"> <div class="page-header">
{% block header %}{% endblock %}
</div>
<div>
{% block content %}{% endblock %}
</div> </div> <!-- /container --> </body>
</html>

使用jumbotron设置主页的样式。

<!-- untitled/templates/learning_logs/index.html -->
{% extends "learning_logs/base.html" %} {% block header %}
<div class='jumbotron'>
<h1>Track your learning.</h1>
</div>
{% endblock %} {% block content %}
<h2>
<a href="{% url 'users:register' %}">Register an account</a> to make
your own Learning Log, and list the topics you're learning about.
</h2>
<h2>
Whenever you learn something new about a topic, make an entry
summarizing what you've learned.
</h2>
{% endblock %}

6.部署应用程序到Heroku

我们将项目部署到Heroku的服务器并对其进行管理。

  1. 首先需要到官网https://dashboard.heroku.com注册账号。
  2. 接着安装Heroku客户端,请访问https://devcenter.heroku.com/articles/heroku-cli

注意:访问Heroku官网需要VPN,注册账号需要用国外的邮箱,我试过outlook邮箱可以注册。

6.1 安装必要的包

PyCharmTerminal窗口逐个执行以下几个命令:

  • pip install dj-database-url
  • pip install dj-static
  • pip install static3
  • pip install gunicorn

6.2 创建requirements.txt

执行pip freeze > requirements.txt命令,将项目当前安装的所有包的名称都写入到文件requirements.txt中。

dj-database-url==0.5.0
dj-static==0.0.6
Django==2.1.7
django-bootstrap3==11.0.0
gunicorn==19.9.0
pytz==2018.9
static3==0.7.0
psycopg2>=2.6.1

我们在包列表中添加psycopg2,它帮助Heroku管理活动数据库。

6.3 指定Python版本

runtime.txt

python-3.6.3

6.4 修改settings.py

# untitled/untitled/settings.py

# ···

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# Heroku settings
if os.getcwd() == '/app':
import dj_database_url DATABASES = {
'default': dj_database_url.config(default='postgres://localhost')
} # Honor the 'X-Forwarded-Proto' header for request.is_secure().
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # Only allow heroku to host the project.
ALLOWED_HOSTS = ['learning-log-final.herokuapp.com']
DEBUG = True # Static asset configuration
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# STATIC_ROOT = 'staticfiles'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)

注意STATIC_ROOT = os.path.join(BASE_DIR, 'static')这行代码,它写在if测试外面。

6.5 创建启动进程的Procfile

Procfile

web: gunicorn learning_log.wsgi --log-file -

6.6 修改wsgi.py

# untitled/untitled/wsgi.py
import os from dj_static import Cling
from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'untitled.settings') application = Cling(get_wsgi_application())

6.7 创建用于存储静态文件的目录

untitled/untitled/static/placeholder.txt

This file ensures that learning_log/static/ will be added to the project.
Django will collect static files and place them in learning_log/static/.

6.8 使用Git跟踪项目文件

我们无需让Git跟踪项目中的每个文件,因此将让Git忽略一些文件。

.gitignore

venv/
__pycache__/
*.sqlite3

提交项目



推送到Heroku

项目源码地址:https://github.com/gorgeous-h/learning_log.git

注意:这个项目是在Windows环境下做的。

参考资料:《Python编程从入门到实践》—【美】Eric Matthes 著

Django入门项目实践(下)的更多相关文章

  1. Django入门项目实践(上)

    项目结构 1.建立项目 File -->> New Project... 第一个Location是项目所在的目录,第二个Location是项目独立的Python运行环境,我们称之为Virt ...

  2. Django入门项目实践(中)

    4.用户账户 4.1 让用户能够输入数据 添加新主题 # untitled/learning_logs/forms.py from django import forms from .models i ...

  3. Django入门与实践 17-26章总结

    Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到 ...

  4. Django 入门项目案例开发(上)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. Django 入门案例开发(中) http://www.cnblogs.com/focusBI ...

  5. Django入门与实践

    安装: 1.https://www.djangoproject.com/查找最新版本 2.pip install Django==1.10.6安装Django   创建项目: 1.打开命令行,进入想要 ...

  6. django入门与实践(开)

    1.什么是Django? 基于python的高级web开发框架 高效 快速 免费 开源 正常上网流程 浏览器浏览网页的基本原理 请求响应过程 开发环境搭建 Python Django pip inst ...

  7. Django 入门项目案例开发(下)——创建项目应用及模型类

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. 前面两章是在已经开发好的项目上用来描述环境和业务,这一章创建一个全新的项目来用作开发,你可以跟 ...

  8. 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 ...

  9. Django入门与实践 1-16章总结

    注意事项:随时备份.随时记录.从宏观到微观 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之:学至于行之止矣 安装 Python 3.6.2 pip install django==1.11.4 ...

随机推荐

  1. 没事做的Delphi版的俄罗斯方块游戏Demo

    源代码下载

  2. kettle学习笔记(八)——kettle查询步骤与连接步骤

    一.概述 查询步骤: 用来查询数据源里的数据并合并到主数据流中 . 连接步骤: 结果集通过关键字进行连接 .(与前面的UNION不同) 二.查询步骤 1.流查询 流查询示例:(注意上文中的流查询的限制 ...

  3. 20155211 Exp4 恶意代码分析

    20155211 Exp4 恶意代码分析 实践目标 1 监控你自己系统的运行状态,看有没有可疑的程序在运行. 2 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或 ...

  4. CS190.1x-ML_lab3_linear_reg_student

    这次作业主要是有关监督学习,数据集是来自UCI Machine Learning Repository的Million Song Dataset.我们的目的是训练一个线性回归的模型来预测一首歌的发行年 ...

  5. 记录:测试本机下使用 GPU 训练时不会导致内存溢出的最大参数数目

    本机使用的 GPU 是 GeForce 840M,2G 显存,本机内存 8G. 试验时,使用 vgg 网络,调整 vgg 网络中的参数,使得使用对应的 batch_size 时不会提示内存溢出.使用的 ...

  6. cocos2d-x学习之路(三)——精灵与动作

    这里我们来看看所有游戏引擎中都会出现的一个重要的概念——精灵

  7. IT简历

    对很多IT毕业生来说,写简历投简历是必不可少的.一个好的简历已是面试成功的一半. 简历的目的是为了引人注意,争取让HR主动联系你去面试,不可避免的在简历中掺杂着一些水分,但是能争取到面试机会,再与HR ...

  8. Netty源码分析(前言, 概述及目录)

    Netty源码分析(完整版) 前言 前段时间公司准备改造redis的客户端, 原生的客户端是阻塞式链接, 并且链接池初始化的链接数并不高, 高并发场景会有获取不到连接的尴尬, 所以考虑了用netty长 ...

  9. FUNMVP:5G技术对块链信任体系建设的影响

    01 区块链现阶段应用在于概念证明 12月10日,工信部向三大运营商正式发放了5G系统实验频率运用允许,这让区块链从业者开端思索5G技术与区块链分别的可能性.在互联网的基础上依据区块链的特性完成价值的 ...

  10. sqlserver-表分区

    最近对公司数据库性能方面改造.现已初建成效. 公司原先数据库问题颇多,简单列举下: 1.数据表文档缺失. 2.数据库900多张表,接近一半都是备份和一些报表,没有分库处理 3.大数量的表按照年份人工导 ...