进阶教程:如何编写可重用的应用程序
这个进阶教程上接 Tutorial 7。 我们将把我们的网页投票转换成一个独立的Python包,这样你可以在其它项目中重用或者分享给其它人。
如果您最近没有完成教程1-7,我们建议您先看他们,以使您的示例项目与下面描述的项目相匹配。
可重用性很重要
设计、构建、测试和维护一个网页应用有许多工作要做。 许多Python 和 Django 项目都有常见的共同问题。 可重用将会节省这些重复性工作。
可重用性在Python 中是一种常见的方式。 Python包索引 (PyPI) 具有广泛的包,你可以在你自己的Python程序中使用。 查阅一下Django 包 中已经存在的可重用的应用,你可以结合它们到你的项目。 Django 自身也只是一个Python 包。 这意味着你可以获取已经存在的Python包和Django应用并将它们融合到你自己的网页项目。 你只需要编写你项目的独特的部分。
include
import foo.barfrom foo import barpolls__init__.pyurlstestsmodelsviews
您的项目和您的可重用应用程序
经过前面的教程之后,我们的项目应该看上去像这样:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
polls/
__init__.py
admin.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/templatesmysite/templatespolls
polls
安装一些先决条件
distributesetuptools
打包您的应用程序
Python 打包 会将你的应用预处理成一种特殊的格式, 这样安装和使用就会变得简单。 Django 自己是以非常相似的方式打包起来的。 对于一个像polls这样的小应用,这个过程不是太难。
- 首先,在你的Django项目之外,为polls创建一个父目录。 称这个目录为django-polls。
将polls 目录移动到django-polls目录中。
创建一个包含以下内容的文件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.
setup.pydjango-polls/setup.py
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',
],
)
django-polls/MANIFEST.in
django-polls/MANIFEST.in
include LICENSE
include README.rst
recursive-include polls/static *
recursive-include polls/templates *
- 这是可选的,但建议您在应用程序中包含详细的文档。 创建一个空目录django-polls/docs以供将来使用。 向django-polls/MANIFEST.in添加另外一行:
recursive-include docs *
docs
- 试着通过python setup.py sdist 构建你的包(从django-polls的内部运行)。 这会创建一个django-polls-0.1.tar.gz目录并构建一个新包:dist。
更多关于打包的信息,参见Python 的 打包和分发项目的教程。
使用你自己的包
pollsdjango-polls
django-pollsvirtualenv
pip install --user django-polls/dist/django-polls-0.1.tar.gz
幸运的话,你的Django 项目现在应该又能正常工作了。 请重新运行服务器以证实这点。
若要卸载这个包,使用pip:
pip uninstall django-polls
发布您的应用程序
django-polls
使用 virtualenv 安装Python包
前面,我们将poll 安装成一个用户的库。 它有一些缺点:
- 修改这个用户的库可能影响你的系统上的其它Python 软件。
- 你将不可以运行这个包的多个版本(或者具有相同名字的其它包)。
特别是一旦你维护几个Django项目,这些情况就会出现。 如果确实出现,最好的解决办法是使用virtualenv。 这个工具允许你维护多个分离的Python环境,每个都具有它自己的库和包的命名空间。