Django教程之九-----高级教程:如何编写复用的应用

这个教程紧接(7),我们将我们的网页问卷调查变成一个单独的python包,你可以在新项目中重用它,也可以和其他人分享。


如果你没有完成教程1-7,我们鼓励你来复习这些所以你的例子项目符合下面的描述。


1. 可重用性很重要

设计,建立,测试和维护一个web应用有很多工作要做。许多Python和Django项目都有同样的问题。如果我们可以省下这些重复的工作量难道不是很美好么?


可重用性就像是Python中的生命一种方式。<Python包索引(PyPI)>有一个广阔的包的范围,你可以在你的项目中使用这些。查阅<Django 包>了解你可以在你项目中继承的现存的可重用应用。Django本身就是一个Python包。这意味着你能将现存的Python包或者Django应用作为你自己网页项目的组成部分。你只需要编写是你项目独一无二的部分。


假设你正在开始一个新的项目,它需要一个像我们之前工作的polls应用一样的应用。你如何将这个应用重用?幸运的是,你已经在路上了。在教程(3)中,我们了解了我们可以使用include将polls从项目级的URLconf中解耦。在这个教程中,我们做更深入的几步来让应用更容易使用在新项目中,并且准备好发布给其他人安装和使用。

包?应用?

一个Python包提供了为了更容易重用的相关Python代码的组成的一种方式。一个包包含一个或者多个Python代码文件(同样也成为模块).

一个包能被使用import foo.bar或者from foo import bar导入。用于组成一个包的路径(像Polls),它必须包含一个特殊的文件__init__.py,即使这个文件是空的。

一个Django应用只是一个Python包,这个包专门用于Django的项目。一个应用可能使用通用的Django约束,例如,模块,测试,urls和views子模块。

稍后我们将使用术语”打包“来描述一个容易为其他人安装的Python包的制作过程。它可能会有一点迷惑,我们知道。


2. 你的项目和你的可重用应用

经过先前的教程之后,我们的项目应该是这个样子:

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

在教程(7)中你创建了mysite/templates,教程(3)中创建了polls/templates.也许现在很清晰为什么我们为项目和应用选择分开模板路径:所有东西都是在polls中的polls应用的一部分。它让应用自包含并且更容易变成一个新的项目。


polls目录现在可以备份成一个新的Django项目并且可以立即使用。尽管它还没有准备好发布。要完成那个,我们需要打包应用好让其他人更容易安装。


3. 安装一些先决条件

当前pyhon打包的状态是有着各种工具的一团糟。对于这个教程,我们将使用setuptools来建立我们的包。他是推荐的打包工具(与分发合并)。我们同样使用pip来安装和卸载。你应该安装这2个包。如果你需要帮助,你可以参考<如何使用pip安装Django>。你可以以同样的方式安装setuptools。


4. 打包你的应用

Python打包指的是以一种特殊的格式准备你的应用,以让它更容易安装和使用。Django本身就是一个这样的包。对于想polls这样的小型应用来说,这个过程不会太难。

  1. 首先,为polls创建爱你一个父路径,在你的Django项目的外面。将这个路径起名为django-polls                        为你的应用选择一个名字                                                                                                                                                               当为你的包选择名字时,检查类似PyPI的源来避免和现有的包名称冲突。当创建一个发布的包时预先将django-加到你的名称中将会很有帮助。这将帮助其他寻找Django应用的人将你的应用作为指定的Django识别。                                                          应用标签(那是,应用包的点路径的最后一部分)必须在INSTALLED_APPS中是独一无二的。避免使用和Django的任何contrib包相同的标签,例如auth,admin或者messages.
  2. 将polls路径移动到django-polls路径
  3. 创建一个文件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::
    
        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文件。选择一个许可证对于这个教程来说超出了范围,但足以说明没有许可证的公开代码发布是没有用的。Django和许多Django兼容应用是在BSD许可证下发布的;然而,你可以自由选择你的许可证。请注意,你的许可证的选择将会影响到使用你代码的人。
  5. 下一步我们将创建一个setup.py文件,它提供了关于如何去建立和安装应用的明细。这个文档的完整解释超出了这个教程的范围,但是<安装工具文档>有一个好的解释。创建一个文件django-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',
            # Replace these appropriately if you are stuck on Python 2.
            'Programming Language :: Python :: 3',
            'Programming Language :: Python :: 3.4',
            'Programming Language :: Python :: 3.5',
            'Topic :: Internet :: WWW/HTTP',
            'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
        ],
    )

  6. 只有Python模块和包默认是包含在包里的。为了包含额外的文件,我们需要创建一个MANIFEST.in文件。<安装工具文档>有更多这个文件的细节。为了包含模板,README.rst和我们的LICENSE文件,创建一个有以下内容的文件django-polls/MANIFEST.in:
    django-polls/MANIFEST.in
    include LICENSE
    include README.rst
    recursive-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.

了解打包的更多详情,请阅读Python的<打包和发布项目教程>


5. 使用你自己的包

因为我们将polls路径移出了项目,它不再起作用。我们现在通过安装我们新的django-polls包来修复这个问题。

作为用户库安装

下列步骤将django-polls作为一个用户库来安装。基于用户的安装比在系统范围安装包有很大的优势,例如在一个你没有管理员权限的系统上使用,防止包影响系统服务和其他用户的机器。

注意,基于用户的安装仍然能影响作为那个用户运行的统工具的行为,所以virtualenv是更优秀的解决方案(看下面)


  1. 为了安装包,使用pip(你已经安装过了,对吗?):
    pip install --user django-polls/dist/django-polls-0.1.tar.gz

  2. 幸运的话,你的Django项目想在应该能再次正确运行了。运行服务来确认这一点
  3. 卸载包,使用pip:
    pip uninstall django-polls


6. 发布你的应用

现在我们已经打包并测试了django-polls,准备好与世界分享了!如果这不是一个例子,你可以:
  • 将包邮件给你的朋友
  • 上传包到你的网站
  • 发布到公用仓库,例如 Python包索引(PyPI).packaging.python.org有一个做这个的好的教程。

7. 使用virtualenv安装Python包

之前,我们将polls应用作为用户库安装,这有几个缺点:
  • 修改用户库将会影响你系统上的其他Python软件
  • 你不能运行这个包的多个版本(或者其他有相同名字的东西)。
典型的,这个情况只有在你正在维护多个Django项目是才会出现。当它们出现是,最好的解决方案就是使用virualenv。这个工具允许你去维护多个隔离的Python环境,每一个都有它自己的包命名空间和库的备份。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值