9.Django入门:高级教程-如何编写可重用的应用

来源:互联网 发布:天猫销售数据分析报告 编辑:程序博客网 时间:2024/06/03 22:45

将应用转换成一个独立的Python包

1.可重用很重要

许多Python 和 Django 项目都有常见的共同问题。可重用将会节省这些重复性工作。

可重用性在Python 中是一种常见的方式。Python包索引 (PyPI) 具有广泛的包,你可以在你自己的Python程序中使用。查阅一下Django Packages中已经存在的可重用的应用,你可以结合它们到你的项目。Django 自身也只是一个Python 包。这意味着你可以获取已经存在的Python包和Django应用并将它们融合到你自己的网页项目。你只需要编写你项目的独特的部分。

(1)包?应用?

Python 包 按照简单重用的方式,将具有相关性的Python代码归为一组。一个包包含一个或多个Python文件(也叫做“模块”)。

包可以通过import foo.bar 或from foo import bar 导入。如果一个目录(例如polls)想要形成一个包,它必须包含一个特殊的文件init.py,即使这个文件为空。

一个Django 应用 只是一个Python包,它特意用于Django项目中。一个应用可以使用常见的Django 约定,例如具有models、tests、urls和views 子模块。

2.安装一些前提条件

Python 打包的目前状态因为有多种工具而混乱不堪。对于本教程,打算使用setuptools来构建我们的包。它是推荐的打包工具(已经与distribute 分支合并)。我们还将使用pip来安装和卸载它。

3.打包你的应用

Python 打包 会将你的应用预处理成一种特殊的格式, 这样安装和使用就会变得简单。Django 自己是以非常相似的方式打包起来的。

(1)首先在你的Django项目之外,为polls创建一个父目录。称这个目录为django-polls

当为你的包选择一个名字时,检查一下PyPI中的资源以避免与已经存在的包有名字冲突。当创建一个要发布的包时,在你的模块名字前面加上django-通常很有用。 这有助于其他正在查找Django应用的人区分你的应用是专门用于Django的。

应用的标签(应用的包的点分路径的最后部分)在INSTALLED_APPS中必须唯一。避免使用与Django的contrib 包 中任何一个使用相同的标签,例如auth、admin和messages。

(2)将polls 目录移动到django-polls目录

(3)创建一个包含以下内容的文件django-polls/README.rst

=====Polls=====Polls is a simple Django app to conduct Web-based polls. For eachquestion, 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::    url(r'^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文件

如何选择License超出本教程的范围,但值得一说的是, 公开发布的代码如果没有License是毫无用处的。Django和许多与Django兼容的应用以BSD License 发布;然而,你可以随便挑选自己的License。只需知道你所选择的License,将决定谁能使用你的代码.

(5)下一步我们将创建一个setup.py 文件,它提供如何构建和安装该应用的详细信息

该文件完整的解释超出本教程的范围,setuptools 文档 有很好的解释。创建一个文件django-polls/setup.py,其内容如下

import osfrom setuptools import setupwith open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:    README = readme.read()# allow setup.py to be run from any pathos.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))setup(    name='django-polls',    version='0.1',    packages=['polls'],    include_package_data=True,    license='BSD License',  # example license    description='A simple Django app to conduct Web-based polls.',    long_description=README,    url='http://www.example.com/',    author='Your Name',    author_email='yourname@example.com',    classifiers=[        'Environment :: Web Environment',        'Framework :: Django',        'Intended Audience :: Developers',        'License :: OSI Approved :: BSD License', # example license        'Operating System :: OS Independent',        'Programming Language :: Python',        # Replace these appropriately if you are stuck on Python 2.        'Programming Language :: Python :: 3',        'Programming Language :: Python :: 3.2',        'Programming Language :: Python :: 3.3',        'Topic :: Internet :: WWW/HTTP',        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',    ],)

(6)默认只有Python模块和包会包含进包中

如果需要包含额外的文件,我们需要创建一个MANIFEST.in文件。上一步提到的setuptools 文档对这个文件有更详细的讨论。如果要包含模板、README.rst和我们的LICENSE 文件,创建一个文件django-polls/MANIFEST.in,其内容如下

include LICENSEinclude README.rstrecursive-include polls/static *recursive-include polls/templates *

(7)将详细的文档包含进你的应用中,它是可选的,但建议你这样做

创建一个空的目录django-polls/docs用于将来存放文档。向django-polls/MANIFEST.in添加另外一行

recursive-include docs *

注意docs不会包含进你的包中除非你添加一些文件到它下面。许多Django应用还通过类似readthedocs.org这样的站点提供它们的在线文档.

(8)试着通过python setup.py sdist 构建你的包(从django-polls的内部运行)

这会创建一个dist目录并构建一个新包:django-polls-0.1.tar.gz。

4.使用你自己的包

以下的步骤将安装django-polls 成某个用户的库。用户级别的安装比系统级别的安装有许多优点,例如将包运行在普通用户级别上不但不会影响系统服务还不会影响其他用户

注意根据用户的安装仍然可以影响以该用户身份运行的系统工具,所以virtualenv 是更健壮的解决办法

(1)使用pip安装这个包

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

5.发布你的应用

  • 将这个包用邮件发送给朋友
  • 上传这个包到你的网站上
  • 上传这个包到一个公开的仓库,例如Python 包索引 (PyPI)

6.使用virtualenv安装Python包

将poll 安装成一个用户的库。它有一些缺点:

  • 修改这个用户的库可能影响你的系统上的其它Python 软件。
  • 你将不可以运行这个包的多个版本(或者具有相同名字的其它包)。

特别是一旦你维护几个Django项目,这些情况就会出现。如果确实出现,最好的解决办法是使用virtualenv。这个工具允许你维护多个分离的Python环境,每个都具有它自己的库和包的命名空间

0 0
原创粉丝点击