Heroku部署笔记①(Django:Windows)

2021年,日本在社会动荡的浪潮中,以鲁莽的勇气重生为史莱姆一瞬间…不说开玩笑了,我决定在KiKaGaku先生的指导下使用django和Heroku,同时也考虑到以下背景,希望能找到最新的信息和做法。现在先完成了第一步,希望能够发布和共享这些信息。如果能对大家有所帮助,那是我最大的幸福。

环境:Windows11
Python版本:3.10.0
Git版本:2.33.1
Heroku版本:13.5
(Python库在requirements.txt文件中列明)

背景:
由于在https://devcenter.heroku.com/articles/python-support上,Python的运行版本是3.10,所以我想尝试一下是否可行。另外,似乎Windows 11的电脑更快一些(;^_^A)。

请安装Visual Studio Code(以下简称vscode)。

请安装Python(最新版本为3.10.0)。

根据需要添加VSCode的扩展功能。
@sensuikan1973推荐了一些扩展功能,请参考。
https://qiita.com/sensuikan1973/items/74cf5383c02dbcd82234

image.png
image.png

在命令提示符下

>python -m venv djangovenv

执行,并创建djangovenv文件夹。

上述命令中的”djangovenv”部分是可以根据个人设定的部分。在自己创建Web应用时,可以将其更改为任何名称。

6. 启动虚拟环境
当前,虚拟环境未启动。请执行以下命令。

>djangovenv\Scripts\activate
image.png

7. Django的安装
由于虚拟环境中没有Django,所以让我们进行安装。由于我们正在使用Python的虚拟环境,所以可以使用pip进行安装。还可以通过添加“==version”来指定版本。

>pip install django==3.2.9 # or
>pip install django

创建一个名为helloworldproject的文件夹。

>django-admin startproject helloworldproject
image.png
>cd helloworldproject
image.png

【補充】
– 當 Python 程式無法正常運行時
請將 “python” 改為 “python3″,然後執行。
– 在 Windows 操作系統下無法正常運作時
請輸入以下指令: “python3 manage.py runserver 0:8000″。

9.编辑<helloworldproject\settings.py>文件。
(1) 添加”import os”语句
为了控制与操作系统相关的路径传递方式,需要这样做。
(2) 修改BASE_DIR变量
随着第(1)步的修改,需要更改指定的目录。

# Djangoにおいて基本となるフォルダ(manage.py)の場所を示しています。
  BASE_DIR = Path(__file__).resolve().parent
⇒BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

(3)主机的编辑
使用通配符“*”来扩大访问范围的指定。

#hostの編集
 ALLOWED_HOSTS = []
⇒ALLOWED_HOSTS = ['*']

修改(4)DB路径
随着 (1) 的修改,将更改指定在 TEMPLATES 中的目录。

#DBのPath編集
  'NAME': BASE_DIR / 'db.sqlite3',
⇒'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

将语言和时间设置更改为日本设置。

#言語、時間設定変更
  LANGUAGE_CODE = 'en-us'
⇒LANGUAGE_CODE = 'ja'
# 時間の設定
  TIME_ZONE = 'UTC'
⇒TIME_ZONE = 'Asia/Tokyo'

(6)确认日语转换
在命令提示符中执行以下命令,确认是否转换为日语。

>python3 manage.py runserver
image.png

创建和编辑<helloworldproject\helloworldapp>文件夹。

> python manage.py startapp helloworldapp
image.png

在< /helloworldproject/settings.py>中进行编辑。
编辑INSTALLED_APPS。
将helloworldapp添加到要使用的应用程序定义中。

  #Application definition
  INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
  ]
⇒INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'helloworldapp' #追加
  ]

在<\helloworldproject\urls.py>文件中添加以下内容:
★添加include,并允许指定包含文件名的URL。

 from django.contrib import admin
 from django.urls import path 

 urlpatterns = [
     path('admin/', admin.site.urls),
 ]
⇒from django.contrib import admin
 from django.urls import path, include # includeを追加  

 urlpatterns = [
     path('admin/', admin.site.urls),
     path('hello/', include('helloworldapp.urls')), # 追加
 ]
image.png
from django.urls import path

urlpatterns = [
    path('',  hellofunction),
]

在< helloworldapp/views.py>文件中进行追加。
导入在首页上显示的库,并定义在那里使用的函数。

 from django.shortcuts import render 
⇒from django.shortcuts import render # こちらは後で使用します。
 from django.http import HttpResponse # 追加

 def hellofunction(request):
   return HttpResponse('Hello World !')

15. 我们将进行启动确认。

>python manage.py runserver
or 
>python manage.py runserver 0:8000

我会启动HTML并确认是否显示”Hello World!”。但是,请注意,显示的地址将是http://127.0.0.1:8000/hello。

我将编辑第16项。
我将进一步修改,以使HTML文件可以被调用。

 from django.shortcuts import render  
 from django.http import HttpResponse 

 def hellofunction(request):
   return HttpResponse('Hello World !')
⇒from django.shortcuts import render  

 def hellofunction(request):
    return render(request, 'helloworldapp/hello.html')

在17中创建名为”helloworldproject/templates/helloworldapp/hello.html”的文件夹和文件。
创建在第16步中指定的HTML文件。

<!DOCTYPE html>
<html lang="ja"> 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My First Django</title>  
</head>
<body>
    <p>Hello World !</p>
</body>
</html>

在中文中重編集 18. < helloworldproject/urls.py >。
由於想要在啟動的虛擬環境中直接存取,因此將’hello/’刪除。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('helloworldapp.urls')), # 'hello/' → '' に変更
]

19. 确认环境的规格。

>python manage.py runserver

我們將安裝必要的函式庫。安裝 Heroku 所需的函式庫步驟如下所示。

>pip install gunicorn

另外,以下是要安装的库列表:
– backports.entry-points-selectable
– certifi
– distlib
– django-heroku
– django-toolbelt
– filelock
– gunicorn
– pipenv
– platformdirs
– six
– static3
– virtualenv
– virtualenv-clone
这些库是手动(通过pip)安装或在安装时添加的。这些库信息来源于https://devcenter.heroku.com/ja/articles/getting-started-with-python。虽然是用英语表示的,但可以在https://pypi.org/project/上找到简单的说明。如有需要,请进行确认。

安装git。按照普通PC的安装方式运行exe文件。详细步骤请参考HyunwookPark的文章https://qiita.com/HyunwookPark/items/d399f6959fc922a15ee1。

请从https://devcenter.heroku.com/ja/articles/getting-started-with-python#-2 下载并双击exe文件进行安装,安装完成后,请参考此链接进行帐户注册(https://mebee.info/2020/02/01/post-5039/ )。

23. 获取 requirements.txt 文件。

>pip freeze > requirements.txt

在命令提示符中执行该命令,并创建requirements.txt文件。

创建pipfile。

>pip install -r requirements.txt

在命令提示符中执行该命令,创建一个Pipfile(用于在部署时加载库)。

我将修改 < helloworldproject/settings.py > 文件。我会添加以下内容,以便能够进行导入。

 # https://docs.djangoproject.com/en/3.2/howto/static-files/
 STATIC_URL = '/static/'
⇒# https://docs.djangoproject.com/en/3.2/howto/static-files/
 STATIC_URL = '/static/'

 import django_heroku #追記
 django_heroku.settings(locals()) #追記
image.png

将目录更改为可以读取所需文件的位置(.Procfile ,.gitignore)。

$cd helloworldproject
image.png

(1) Procfile
请在文件中写入以下内容。

web: gunicorn helloworldproject.wsgi

在Procfile中,按照进程类型:命令的顺序进行记录,上面的示例中,web是进程类型,gunicorn ~是命令。由于本次项目名称为helloworldproject,因此指定为helloworldproject.wsgi。
(2).gitignore
请在文件中写入以下内容。

*.pyc
*~
__pycache__
djangovenv
db.sqlite3
/static
.DS_Store

(3) runtime.txt
请指定所使用的Python版本。请将内容按照以下方式进行填写。

python-3.10.0

29. 在登录Heroku时,忽略不必要的部署内容。

$heroku login
image.png
$heroku create アプリケーション名 --buildpack heroku/python
image.png
$git init

使用Heroku创建的应用程序和使用VS Code创建的文件夹进行连接。

$heroku git:remote -a アプリケーション名

选择所有部署所需的文件。

$git add .

(4)为了能够推送,将其设为提交状态。

$git commit -m 'first commit'

(5) 进行推送并创建应用程序。

$git push heroku master

话虽长,但以上应该能够无问题地生成输出(真的是多少次失败然后再重建的啊…( = =) トオイメ)。我查了很多地方,有时候也会创建一些不必要的文件,所以我总结了一下。希望能够对大家有所帮助。非常抱歉我的描述能力有限。虽然还有日记本和机器学习应用程序,但还不知道什么时候能完成(;^_^A。我觉得最容易出错的是git和heroku之类的,但是通过这个处理,我成功了。让我们坚持“只要尽力就会有解决办法!”的信念。那么。

广告
将在 10 秒后关闭
bannerAds