Django学习笔记三

3 篇文章 0 订阅
3 篇文章 0 订阅

设计样式

安装并集成Bootstrap3

  • 安装bootstrap3
pip install django-bootstrap3
  • 在项目中配置bootstrap3,打开settings.py文件,在INSTALLED_APPS中添加如下代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # My apps
    'learning_logs',
    'users',

    # Third party apps
    'bootstrap3',
]
  • 配置jQuery,在settings.py的末尾添加如下代码
BOOTSTRAP3 = {
    'include_jquery': True,
}

修改base.html

  • 加载bootstrap3并添加head标签
{% 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 Logs</title>

    {% bootstrap_css %}
    {% bootstrap_javascript %}
  </head>
  • 定义导航栏
  <body>
    <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>
        </div>

        <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>
  • 定义页面的主要部分
    <div class="container">
      <div class="page-header">
        {% block header %} {% endblock header %}
      </div>
      <div>
        {% block content %} {% endblock content %}
      </div>
    </div>
  </body>
</html>

设计其他页面,以edit_entry为例,其他大同小异

{% extends "learning_logs/base.html" %}
{% load bootstrap3 %}

{% block header %}
  <h2>Edit entry.</h2>
{% endblock header %}

{% block content %}
  <p>
    <a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a>
  </p>

  <form action="{% url 'learning_logs:edit_entry' entry.id %}" method="post" class="form">
    {% csrf_token %}
    {% bootstrap_form form %}

    {% buttons %}
      <button name="submit" class="btn btn-primary">save changes</button>
    {% endbuttons %}

  </form>
{% endblock %}

部署项目

注册并安装所需工具

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

pip freeze > requirements.txt
  • 指定Python运行时环境:在manage.py所在目录新建runtime.txt,添加python版本号
python-3.10.0

修改相关配置

  • 修改settings.py,在末尾添加如下内容
# Heroku settings
# 这里需要做一定修改,不能用 os.getcwd() == '/app',否则会报错:
# django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
if 'HOME' in os.environ and os.environ['HOME'] == '/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')

    # Allow only Heroku to host the project
    ALLOWED_HOSTS = ['plutors.herokuapp.com']

    # close debug messages
    DEBUG = False

    # Static asset configuration
    PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = 'staticfiles'
    STATICFILES_DIRS = (
        os.path.join(PROJECT_DIR, 'static'),
    )
  • 在manage.py所在目录新建Procfile,输入如下内容。不能使用原书的内容,否则无法启动应用
web: gunicorn learning.wsgi --log-file - --log-level debug
python manage.py collectstatic --noinput
manage.py migrate
  • 修改项目目录下的wsgi.py
import os

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'learning.settings')

application = Cling(get_wsgi_application())
  • 在项目目录下,新建static文件夹,并添加placeholder.txt,添加如下内容
This file ensures that learning/static/ will be added to the project. 
Django will collect static files and place them in learning/static/.

使用Git

  • 安装Git
  • 配置Git
git config --global user.name "xxx"
git config --global user.email "xxx@xxx.com"
  • 新增 .gitignore
ll_env/
__pycache__/
*.sqlite3
  • 提交项目
# 把项目所在目录初始化为Git仓库
git init
# 添加除.gitignore中以外的所有做过更改的文件
git add .
# 把暂存区里的改动(git add 的内容)提交到本地的版本库
git commit -am "Ready for deployment to heroku."
# 查看是否还有改动
git status

把项目推送到Heroku

# 使用之前注册的账号进行登录,-i 表示在命令行中登录,否则会报ip不一致的错误
heroku login -i
# 在Heroku中创建应用
heroku create
# 把项目推送到Heroku,我本地的分支是main,你可以根据自己的分支修改
git push heroku main
# 检查服务器进程是否正确启动
heroku ps
# 从浏览器中打开网站
heroku open

设置数据库

# 这里要用python3而不是python,否则会报错
heroku run python3 manage.py migrate

优化Heroku部署

  • 创建超级管理员
heroku run bash
python manage.py createsuperuser
exit
  • 创建一个用户友好的URL
# 任意没被使用过且长度大于3的名称都可以
heroku apps:rename xxx
  • 确保实时项目的安全性,打开settings.py,修改如下内容并提交:
    # 注意,只修改Heroku部分的配置,这样本地测试仍然可以看到debug信息
    # Allow only Heroku to host the project
    ALLOWED_HOSTS = ['plutors.herokuapp.com']

    # close debug messages,
    DEBUG = False
  • 关闭Heroku应用,把dynos设为0即可,重新启动只需设为1
# 关闭应用
heroku ps:scale web=0
# 重启应用
heroku ps:scale web=1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值