django如何編寫可重用的應用程序

如果想把一個應用( web-poll) 變成一個獨立的Python包,在新項目中重用,并與他人共享。

可重用性很重要

  • 設計、構建、測試和維護web應用程序有很多工作要做。許多Python和Django項目都有共同的問題。如果我們能挽救一些重復的工作,豈不是很好?

  • 可重用性是Python中的生命方式。Python包索引(PyPI)有大量的包,您可以在自己的Python程序中使用。看看你可以在你的項目中加入的現有可重用應用程序的Django包。Django本身也是一個Python包。這意味著您可以使用現有的Python包或Django應用程序,并將它們組合到您自己的web項目中。您只需要編寫使您的項目獨一無二的部分。

假設你正在啟動一個新項目,它需要一個像我們一直在做的調查應用。如何使這個應用程序可重用?

package 和 app的區別


package

  • Python包提供了一種分組相關Python代碼的方法,以便易于重用。一個包裹包含一個或多個Python代碼的文件(也稱為“模塊”)。

    包的引用方式:

    1. import foo.bar or from foo import bar.
    2. For a directory (like polls) to form a package, it must contain a special file init.py, even if this file is empty.

app

Django應用程序只是一個Python包,專門用于Django項目中。應用程序可以使用常見的Django約定,例如擁有models、test、urls 和views 子模塊。

項目和可重用的應用程序:

image.png

現在,polls 目錄可以被復制到一個新的Django項目中,并立即重新使用。不過,它還沒有完全準備好發表。為此,我們需要打包應用程序,讓其他人更容易安裝。

前提準備工作

Python包裝的當前狀態與各種工具有些混亂。我們將使用setuptools來構建包裹。它是推薦的打包工具(與distribute叉合并)。我們還將使用pip來安裝和卸載它。您現在應該安裝這兩個軟件包, 您可以參考如何用pip安裝Django。您可以以同樣的方式安裝setuptools

打包應用程序

Python打包是指以一種易于安裝和使用的特定格式來準備您的應用程序。Django本身就是這樣打包的。對于像 polls 這樣的小型應用來說,這個過程并不太難。

  1. 首先,在Django項目之外為 polls 創建一個父目錄。這個目錄django-polls
為你的應用選擇一個名字

在為軟件包選擇名稱時,請檢查像PyPI這樣的資源,以避免與現有軟件包命名沖突。在創建分發包時,預先將django-放在您的模塊名稱中是很有用的。這可以幫助其他尋找Django應用的人識別你的應用程序。

應用程序標簽(即應用程序包的虛線的最后一部分)必須在INSTALLED_APPS中是唯一的。避免使用與Django發明包相同的標簽,例如auth, admin, messages。

  1. polls目錄移動到django-poll目錄中。

  2. 創建一個文件django-polls / README.rst有以下內容:

django-polls/README.rst

=====
Polls
=====

Polls is a simple 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.

  1. 創建一個 django-polls /LICENSE 。選擇許可證超出了本教程的范圍,但足以說明沒有許可證公開發布的代碼是無用的。Django和許多與django-兼容的應用程序都是在BSD許可下發布的;然而,你可以自由選擇自己的license。請注意,您的許可選擇將影響誰能夠使用您的代碼。

django-polls/setup.py

  import os
  from setuptools import find_packages, setup
    
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
      README = readme.read()

  # allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))

setup(
    name='django-polls',
    version='0.1',
    packages=find_packages(),
    include_package_data=True,
    license='BSD License',  # example license
    description='A simple Django app to conduct Web-based polls.',
    long_description=README,
    url='https://www.example.com/',
    author='Your Name',
    author_email='yourname@example.com',
    classifiers=[
        'Environment :: Web Environment',
        'Framework :: Django',
        'Framework :: Django :: X.Y',  # replace "X.Y" as appropriate
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',  # example license
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Topic :: Internet :: WWW/HTTP',
        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
    ],
)
  1. 默認情況下,只有Python模塊和包裹包含在包中。為了包含更多的文件,我們需要創建一個MANIFEST.in。在文件中。在前面的步驟中提到的setuptools文檔更詳細地討論了這個文件。包括模板,README.rst 和我們的LCENSE文件,創建一個文件django-polls/MANIFEST.in。以下內容:

django-polls/MANIFEST.in

include LICENSE
include README.rst
recursive-include polls/static *
recursive-include polls/templates *
  1. 它是可選的,但是推薦的,可以在你的應用中包含詳細的文檔。為將來的文檔創建一個空目錄django-polls/docs。在django-polls/MANIFEST.in中添加一條額外的行。

    recursive-include docs *
    

注意,除非您向它添加一些文件,否則docs目錄不會包含在您的包中。許多Django應用程序還可以通過readthedocs.org等網站提供他們的文檔。

  1. 嘗試用python設置構建軟件包。 with python setup.py sdist (run from inside django-polls). 這將創建一個名為“dist”的目錄,并構建您的新包,django-poll-0.1.tar.gz。
image.png

Using your own package

由于我們將 polls 目錄移出了項目,所以它不再工作了?,F在,我們將通過安裝新的django-poll包來解決這個問題。

image.png

作為用戶庫安裝

下面的步驟將django-poll作為用戶庫安裝。每個用戶的安裝比在系統范圍內安裝包有很多優勢,比如在沒有管理員訪問的系統上可用,以及防止軟件包影響系統服務和其他用戶。
注意,每個用戶的安裝仍然可以影響作為該用戶運行的系統工具的行為,因此virtualenv是一個更健壯的解決方案(見下文)。

  1. 要安裝軟件包,請使用pip(您已經安裝了它,對嗎?)

pip install --user django-polls/dist/django-polls-0.1.tar.gz

image.png
  1. 幸運的是,Django項目現在應該再次正常工作。再次運行服務器來確認這一點。


    image.png
  2. 要卸載軟件包,請使用pip:

pip uninstall django-polls

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容