Django の app をパッケージ化する
-
やりたいこと
- Django のアプリをパッケージにしたい。
- マイグレーションと API をインストールできるようにしたい。
- GitHub から pip でインストールしたい。
-
なんでやりたいのか
- ほかの企画でも使いまわせる app が必要になったので。
参考
とりあえず urls views models を作成する
とりあえずパッケージ化するアプリを作ります。
Django で myapp を作成して以下のようなファイルを作ります。
単純にデータを取ってきて JSON を返す API です。
urls.py
from django.urls import path
from . import views
app_name = "myapp"
urlpatterns = [
path("index/", views.index, name="index"),
]
views.py
import json
from .models import MyModel
from django.http import HttpResponse
def index(request):
mymodel = MyModel.objects.get(id=1)
datas = {"data": mymodel.mydata}
return HttpResponse(json.dumps(datas, ensure_ascii=False))
models.py
from django.db import models
class MyModel(models.Model):
mydata = models.CharField(max_length=100, null=True)
API の結果
{
"data": "mydata"
}
パッケージ化する
パッケージ名を mypackage としています。
mkdir mypackage
mv myapp mypackage/.
touch README.md
touch LICENSE
touch pyproject.toml
階層は以下の通りです。
mypackage
├── LICENSE
├── README.md
├── myapp
└── pyproject.toml
ファイルの中身を作る
README.md
公式のアプリ名を変えただけです。
今度ちゃんと書き直したいです。
=====
MyApp
=====
MyApp is a Django app to conduct web-based myapp. For each question,
visitors can choose between a fixed number of answers.
Detailed documentation is in the "docs" directory.
Quick start
-----------
1. Add "myapp" to your INSTALLED_APPS setting like this::
INSTALLED_APPS = [
...
'myapp',
]
2. Include the myapp URLconf in your project urls.py like this::
path('myapp/', include('myapp.urls')),
3. Run ``python manage.py migrate`` to create the myapp models.
4. Start the development server and visit http://127.0.0.1:8000/admin/
to create a poll (you'll need the Admin app enabled).
5. Visit http://127.0.0.1:8000/myapp/ to participate in the poll.
LICENSE
ライセンスは参考にしてなるようです。
中身は記載しなくても大丈夫でしたが、ファイル自体を作成しなかったら GitHub から直接インストールするときに怒られてしまいました。
pyproject.toml
インストールする為の設定を記載していくファイルのようです。
後日設定をまとめたいです。。。
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build]
include = [
"myapp/*",
"myapp/static",
"myapp/templates",
"docs",
]
[project]
name = "mypackage"
version = "0.1"
authors = [
{ name="your name", email="mail@example.com" },
]
description = "A Django app to conduct web-based myapp."
readme = "README.md"
license = {file = "LICENSE"}
requires-python = ">=3.6.9"
dependencies = [
"django >= 3.4",
]
classifiers = [
"Environment :: Web Environment",
"Framework :: Django",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
]
ビルドする
以下のコマンドでビルドします。
pip install build
python -m build
成功すると dist が出来ます。
mypackage
├── LICENSE
├── README.md
├── dist
│ ├── mypackage-0.1-py3-none-any.whl
│ └── mypackage-0.1.tar.gz
├── myapp
└── pyproject.toml
インストール & Django で動かす
Django のプロジェクトを新しく作り直してパッケージをインストールしていきます。
早速インストールしてパッケージを確認します。
pip install mypackage/dist/mypackage-0.1.tar.gz
pip freeze | grep mypackage
mypackage @ file:///project/backend/mypackage/dist/mypackage-0.1.tar.gz#sha256=2dfaad48fffdvf85c84a8e6e209b2400d52dbdfd512ca24e7eb861833e81157f
無事マイグレーションが読みこまれているのを確認する。
python manage.py showmigrations
...
myapp
[ ] 0001_initial
...
あとは README の通りに進めるようです。
settings.py
INSTALLED_APPS = [
... 略 ...
'myapp', # 追加する。
]
urls.py
path('myapp/', include('myapp.urls')), # 追加する。
確認する
MyModel の id==1 の mydata に hogehoge を設定し API をたたく。
無事レスポンスが返って来ました。
http://localhost:8000/myapp/index/
{
"data": "hogehoge"
}
GitHub からインストール
gitinit でパッケージ内に .git を作成し以下を push します。
構成は以下の通りです。
mypackage
├── .git
├── LICENSE
├── README.md
├── dist
│ ├── mypackage-0.1-py3-none-any.whl
│ └── mypackage-0.1.tar.gz
├── myapp
└── pyproject.toml
後は以下のコマンドを実行すればインストールされています。
pip install git+https://github.com/username/reponame.git
ディスカッション
コメント一覧
まだ、コメントがありません