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环境,每个都具有它自己的库和包的命名空间
- 9.Django入门:高级教程-如何编写可重用的应用
- django 1.8 官方文档翻译: 1-3-1 高级教程:如何编写可重用的应用
- Django教程-编写可重用应用
- Django官方教程(十)【进阶内容:编写可重用的应用】
- Django教程之九-----高级教程:如何编写复用的应用
- 10.Django入门:高级教程-编写Django的第一个补丁
- DBA技巧:如何编写可重用的MySQL查询
- django可重用app目录
- 如何把握可重用与不可重用的人才
- Django学习笔记--制作可重用的web apps
- [Unity3D教程]Unity中如何编写对象重用池机制
- [Unity3D教程]Unity中如何编写对象重用池机制
- Django教程之三-----编写你的第一个Django 应用(1)
- Django教程之四-----编写你的第一个Django应用(2)
- Django教程之五-----编写你的第一个Django应用(3)
- Django教程之六-----编写你的第一个Django应用(5)
- Django教程之八-----编写你的第一个Django应用(7)
- 用 PHP 开发健壮的代码: 编写可重用函数
- Head First 设计模式(六)命令模式
- 喵哈哈村的木星传说(四)-(卢卡斯定理)
- Minimum Moves to Equal Array Elements
- 每天一个Linux命令(33):diff
- C#正则表达式的完全匹配、部分匹配及忽略大小写的问题
- 9.Django入门:高级教程-如何编写可重用的应用
- vector使用(STL)
- 计算机网络和因特网--分组交换网中的时延,丢包和吞吐量
- 找中位数
- GDOI模拟总结4.11-4.13(实时更新)
- 腾讯面试(二)
- 拉格朗日乘子法
- 【LeetCode笔记】Construct Binary Tree from Inorder and Postorder Traversal 中序、后序遍历求二叉树
- GDOI2017模拟04.11总结