Django+React并学习编程基础(18):Django高级教程(可重用应用程序的编写方式)
[Django+React学习基础(17):Django教程(投票应用程序部分7-3)]
首先
之前,通過官方教程,我們瞭解了Django的基礎知識。
這次我們將進行Django的高級教程:如何編寫可重用的應用程式。
这次的内容
-
- 再利用性の課題
-
- プロジェクトと再利用可能アプリ
-
- アプリをパッケージング
-
- 自分のパッケージを使ってみる
-
- アプリを公開する
- 仮想環境でPythonパッケージをインストール
再利用性的问题 (zaì lì de tí)
Webアプリの設計/開発/テスト/メンテナンスには多大な労力が必要
多くのPythonプロジェクト、Djangoプロジェクトは共通の問題を抱えている
この繰り返し作業を減らせないか
再利用可能性はPythonの特徴
The Python Package Index(PyPI)には、Pythonプログラムに使用できる幅広いパッケージが揃っている
Djangoパッケージも再利用可能なアプリ
既存のPythonパッケージやDjangoアプリを選んで、Webプロジェクトに組み込むことが可能
開発者はプロジェクトに特有の部分にだけ取り組めば良い
Pythonパッケージとは
関連するPythonコードをまとめて再利用しやすいようにしたもの
Pythonコードのファイル(モジュール)を1つ以上含む
パッケージのインポート
import foo.bar
または、from foo import bar
パッケージのディレクトリ(例えばpolls)
__init__.pyという特殊なファイルを含む必要あり(空ファイルでよい)
Djangoアプリとは
単なるPythonパッケージ
Djangoプロジェクトで使うことのみ意図
アプリはDjangoの一般的な慣例に則っている
サブモジュールmodels、tests、urls、viewsが存在
パッケージングとは
アプリを新規プロジェクトでインストール/利用できるように、パッケージを作るプロセス
Pythonのパッケージングとは
特定のフォーマットでアプリを作っておくこと
このフォーマットにより簡単にインストールし使用可能
Django自体もこのようにパッケージ化されている
项目和可重复使用的应用程序
- プロジェクトの構造
pollsite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
0001_initial.py
models.py
static/
polls/
images/
background.gif
style.css
templates/
polls/
detail.html
index.html
results.html
tests.py
urls.py
views.py
templates/
admin/
base_site.html
投票アプリに関する全てはpollsに存在し、アプリが自己完結している
新規プロジェクトに導入しやすくなっている
pollsディレクトリは新規Djangoプロジェクトにコピーでき、すぐに再利用できる状態
しかし、公開するには、アプリをパッケージにして別の場所でインストールしやすいようにする必要あり
决定包装的名称
PyPIのようなリソースをチェックし、すでに存在するパッケージ名との衝突を避ける
Djangoアプリのパッケージを作って配布する際は、モジュール名の先頭にdjango-を付ける
アプリラベルはINSTALLED_APPSの中で必ずユニーク
アプリラベルとは
アプリパッケージへのパス(ドット区切り)の最後の部分
Django contrib packagesと同じラベルを避けるべき
auth、admin、messagesなど
将应用程序打包
=====
Polls
=====
Polls is a Django app to conduct web-based polls. For each question,
visitors can choose between a fixed number of answers.
Detailed documentation is in the "docs" directory.
Quick start
-----------
1. Add "polls" to your INSTALLED_APPS setting like this::
INSTALLED_APPS = [
...
'polls',
]
2. Include the polls URLconf in your project urls.py like this::
path('polls/', include('polls.urls')),
3. Run ``python manage.py migrate`` to create the polls 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/polls/ to participate in the poll.
-
- 4. django-polls/LICENSEファイルを作成
Djangoと多くのDjango互換アプリはBSDライセンスの元に配布される
どのライセンスを選択するかは自由
ライセンスの選択は、誰がコードを使えるかに影響する
5. アプリビルドとインストール方法の説明ファイルを作成
setuptoolsの例
[build-system]
requires = ['setuptools>=40.8.0', 'wheel']
build-backend = 'setuptools.build_meta:__legacy__'
[metadata]
name = django-polls
version = 0.1
description = A Django app to conduct web-based polls.
long_description = file: README.rst
url = https://www.example.com/
author = Your Name
author_email = yourname@example.com
license = BSD-3-Clause # Example license
classifiers =
Environment :: Web Environment
Framework :: Django
Framework :: Django :: X.Y # Replace "X.Y" as appropriate
Intended Audience :: Developers
License :: OSI Approved :: BSD License
Operating System :: OS Independent
Programming Language :: Python
Programming Language :: Python :: 3
Programming Language :: Python :: 3 :: Only
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Topic :: Internet :: WWW/HTTP
Topic :: Internet :: WWW/HTTP :: Dynamic Content
[options]
include_package_data = true
packages = find:
python_requires = >=3.8
install_requires =
Django >= X.Y # Replace "X.Y" as appropriate
from setuptools import setup
setup()
-
- 6. デフォルトでは、Pythonモジュールとパッケージのみがパッケージに含まれる
追加のファイルを含めるには、MANIFEST.inファイルを作成する必要あり
テンプレート、README.rst、LICENSEファイルを含めるには
include LICENSE
include README.rst
recursive-include polls/static *
recursive-include polls/templates *
-
- 7. アプリのドキュメントを含める(任意だが、推奨される)
空のディレクトリdjango-polls/docsを将来のドキュメンテーションのため作っておく
MANAFEST.inに行を追加
追加しないと、docsディレクトリがパッケージに含まれない
多くのDjangoアプリは、ドキュメントをreadthedocs.orgのようなサイトを通して提供
recursive-include docs *
-
- 8. パッケージをビルド
django-polls内でpython setup.py sdistを実行
distというディレクトリと、新しいパッケージdjango-polls-0.1.tar.gzが作られる
(venv) C:\kanban\pollsite>cd ..\django-polls
(venv) C:\kanban\django-polls>python setup.py sdist
尝试使用自己的包装
-
- 1. pipを利用し、django-pollsパッケージをインストール
django-pollsをユーザーライブラリとしてインストール
ユーザー単位のインストールはシステム全体のインストールより下記メリットあり
管理者アクセス権を持っていないシステム上で使用可能
パッケージがシステムサービスや他ユーザーに影響を与えるのを防ぐ
ユーザー単位のインストールは、そのユーザーとして実行されるシステムツールの動作に影響を与える可能性あり
対処: 仮想環境を使用するのが、より堅牢なソリューション(※後続)
VS Codeで新しいコマンドプロンプトを開く
コマンドプロンプトはkanban C:\を選択
pollsite kanbanではない
C:\kanban>python -m pip install --user django-polls/dist/django-polls-0.1.tar.gz
2. Djangoプロジェクトを動作させるため、サーバーを起動
3. pipを使用し、パッケージをアンインストール
python -m pip uninstall django-polls
发布应用
django-pollsパッケージを公開
パッケージをメールで送る
Webサイトにアップロード
公開されているリポジトリに投稿
The Python Package Index(PyPI)
在虚拟环境中安装Python软件包。
投票アプリをユーザーライブラリにインストールした場合の欠点
ユーザーライブラリの変更は、システム上の他のPythonソフトウェアに影響を与えるおそれあり
このパッケージの複数バージョン(もしくは同じ名前の別のもの)を実行できない
通常、上記状況は複数Djangoプロジェクトを管理している場合のみ発生
解決策: venvツールを使用し、複数の分離されたPython環境を管理
それぞれが独自のライブラリとパッケージの名前空間のコピーを持つ
最后
我已经重新编写并创建/发布了一个可能的再利用应用程序的包。将在下一次继续。敬请期待。