Django教程之九-----高级教程:如何编写复用的应用
来源:互联网 发布:天盾数据恢复 编辑:程序博客网 时间:2024/06/05 14:56
这个教程紧接(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这样的小型应用来说,这个过程不会太难。
- 首先,为polls创建爱你一个父路径,在你的Django项目的外面。将这个路径起名为django-polls 为你的应用选择一个名字 当为你的包选择名字时,检查类似PyPI的源来避免和现有的包名称冲突。当创建一个发布的包时预先将django-加到你的名称中将会很有帮助。这将帮助其他寻找Django应用的人将你的应用作为指定的Django识别。 应用标签(那是,应用包的点路径的最后一部分)必须在INSTALLED_APPS中是独一无二的。避免使用和Django的任何contrib包相同的标签,例如auth,admin或者messages.
- 将polls路径移动到django-polls路径
- 创建一个文件django-polls/README.rst使用下列代码:
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.
- 创建一个django-polls/LICENSE文件。选择一个许可证对于这个教程来说超出了范围,但足以说明没有许可证的公开代码发布是没有用的。Django和许多Django兼容应用是在BSD许可证下发布的;然而,你可以自由选择你的许可证。请注意,你的许可证的选择将会影响到使用你代码的人。
- 下一步我们将创建一个setup.py文件,它提供了关于如何去建立和安装应用的明细。这个文档的完整解释超出了这个教程的范围,但是<安装工具文档>有一个好的解释。创建一个文件django-polls/setup.py,并写入以下代码:
django-polls/setup.pyimport osfrom setuptools import find_packages, 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=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', ],)
- 只有Python模块和包默认是包含在包里的。为了包含额外的文件,我们需要创建一个MANIFEST.in文件。<安装工具文档>有更多这个文件的细节。为了包含模板,README.rst和我们的LICENSE文件,创建一个有以下内容的文件django-polls/MANIFEST.in:
django-polls/MANIFEST.ininclude LICENSEinclude README.rstrecursive-include polls/static *recursive-include polls/templates *
- 它是可选的,但是是推荐的,在你的应用中包含详细的文档。创建一个空的路径django-polls/docs,留给未来的文档。在django-polls/MANIFEST.in里添加额外的一行:
recursive-include docs *
注意,docs路径将不会包含在你的包里除非你在它里面添加了一些文件。许多Django应用同样提供他们的在线文档通过站点readthedocs.org. - 尝试使用python setup.py sdist(在django-polls内部执行)来建立你的包。这创建一个路径成为dist并且建立了你的新包,django-polls-0.1.tar.gz.
了解打包的更多详情,请阅读Python的<打包和发布项目教程>
5. 使用你自己的包
因为我们将polls路径移出了项目,它不再起作用。我们现在通过安装我们新的django-polls包来修复这个问题。
作为用户库安装
下列步骤将django-polls作为一个用户库来安装。基于用户的安装比在系统范围安装包有很大的优势,例如在一个你没有管理员权限的系统上使用,防止包影响系统服务和其他用户的机器。
注意,基于用户的安装仍然能影响作为那个用户运行的统工具的行为,所以virtualenv是更优秀的解决方案(看下面)
- 为了安装包,使用pip(你已经安装过了,对吗?):
pip install --user django-polls/dist/django-polls-0.1.tar.gz
- 幸运的话,你的Django项目想在应该能再次正确运行了。运行服务来确认这一点
- 卸载包,使用pip:
pip uninstall django-polls
6. 发布你的应用
- 将包邮件给你的朋友
- 上传包到你的网站
- 发布到公用仓库,例如 Python包索引(PyPI).packaging.python.org有一个做这个的好的教程。
7. 使用virtualenv安装Python包
- 修改用户库将会影响你系统上的其他Python软件
- 你不能运行这个包的多个版本(或者其他有相同名字的东西)。
- Django教程之九-----高级教程:如何编写复用的应用
- django 1.8 官方文档翻译: 1-3-1 高级教程:如何编写可重用的应用
- 9.Django入门:高级教程-如何编写可重用的应用
- Django教程之三-----编写你的第一个Django 应用(1)
- Django教程之四-----编写你的第一个Django应用(2)
- Django教程之五-----编写你的第一个Django应用(3)
- Django教程之六-----编写你的第一个Django应用(5)
- Django教程之八-----编写你的第一个Django应用(7)
- Python教程之六-----编写你的第一个Django应用(4)
- Python教程之七-----编写你的第一个Django应用(6)
- 10.Django入门:高级教程-编写Django的第一个补丁
- Django教程-编写可重用应用
- Django教程之十-----如何安装Django
- Django官方教程(十)【进阶内容:编写可重用的应用】
- Android[高级教程] 设计模式之九 命令模式
- android高级应用教程
- 简单的Django教程
- 在Django 1.5 中 Django Step by Step (九)教程分页实现方法的修正
- Java并发编程(二)线程同步和等待唤醒机制
- ADS简单模型参数总结
- 第一章 java开发工具及环境配置
- oracle crs起停步骤及srvctl crsctl 命令用法
- OpenCV实现手写体数字训练与识别
- Django教程之九-----高级教程:如何编写复用的应用
- 去除字符串中的双引号
- 2.使用idea创建开源项目并上传到oss
- common-fileupload组件实现java文件上传和下载
- 单元最短路径--SPFA算法
- 170912_Spring英文文档阅读(六)_2.2 Web_spring-webmvc
- 子view可以自动换行的父容器
- NGUI_的动态字体集学习_006
- 【备忘】最新spark/hadoop/hbase/hive/kafka/redies大数据视频教程