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など

将应用程序打包

image.png
=====
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
image.png

尝试使用自己的包装

    • 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
image.png

2. Djangoプロジェクトを動作させるため、サーバーを起動

3. pipを使用し、パッケージをアンインストール

python -m pip uninstall django-polls

发布应用

django-pollsパッケージを公開

パッケージをメールで送る
Webサイトにアップロード
公開されているリポジトリに投稿

The Python Package Index(PyPI)

在虚拟环境中安装Python软件包。

投票アプリをユーザーライブラリにインストールした場合の欠点

ユーザーライブラリの変更は、システム上の他のPythonソフトウェアに影響を与えるおそれあり
このパッケージの複数バージョン(もしくは同じ名前の別のもの)を実行できない

通常、上記状況は複数Djangoプロジェクトを管理している場合のみ発生

解決策: venvツールを使用し、複数の分離されたPython環境を管理

それぞれが独自のライブラリとパッケージの名前空間のコピーを持つ

最后

我已经重新编写并创建/发布了一个可能的再利用应用程序的包。将在下一次继续。敬请期待。

[CiKai] Django+React學習程式基礎(19): React教程(準備和React概述)
广告
将在 10 秒后关闭
bannerAds