Django 1.10文档中文版Part4
2.10 高级教程:如何编写可重用的apps
2.10.1 重用的概念
The Python Package Index (PyPI)有大量的现成可用的Python库。https://www.djangopackages.com
作为Django的app基地也有大量现成可用的apps。
包?App?
包是python重用代码的方式,以目录的形式体现,需要包含__init__.py文件,采用import的方式导入。
app则是Django专用的包,包含一些通用的Django组件,例如models、tests、urls和views等子模块。
2.10.2 你的项目和可重用的app
通过前面的教程,你的项目结构如下:
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
它已经具备的project和app分离的条件。但是还需要一个打包的过程。
2.10.3 安装一些必要工具
使用setuptools和pip来打包我们的app。请先安装他们。
https://pypi.python.org/pypi/setuptools
https://pypi.python.org/pypi/pip
2.10.4 打包你的app
打包的意思是让你的app具有一种特殊的格式,使得它更容易被安装和使用。
首先,在Django项目外面,为你的polls应用,准备一个父目录,取名django-polls;
为你的app选择一个合适的名字:
在取名前,去PYPI搜索一下是否有重名或冲突的包已经存在。建议给包名加上“django-”的前缀。名字中最后一个圆点的后面部分在INSTALLED_APPS中一定要独一无二,不能和任何Django的contrib packages中的重名,例如auth、admin、messages等等你。- 拷贝polls目录到该目录内;
创建一个文件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
-----------
64 Chapter 2. Getting started
Django Documentation, Release 1.10.2a1
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相关的app都基于BSD版权。
- 接下来创建一个setup.py文件,用于编译和安装app。如何创建这个,请前往setuptools的官方文档获取详细的教程,本文不涉及。具体内容如下:
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',
],
)
- 默认只有python的模块和包会被打包进我们的app内。为了包含一些附加的文件,需要创建一个MANIFEST.in文件。为了将静态文件,模板等等非python语言编写的文件打包入内,我们需要在django-polls/MANIFEST.in文件内写入:
include LICENSE
include README.rst
recursive-include polls/static *
recursive-include polls/templates *
- 该步骤可选,但是强烈推荐,将详细的说明文档一起打包。创建一个空的目录django-polls/docs,用于放置你的app相关文档。同时不要忘了,在django-polls/MANIFEST.in文件内写入一行
recursive-include docs *
。需要注意的是,如果docs目录是空的,那么它不会被打包进去。当然,许多apps通过在线的网站提供文档阅读。 - 在你的django-polls目录内,运行python setup.py sdist命令。这将会创建一个dist目录,并编译成功你的新包,django-polls-0.1.tar.gz。
2.10.5 使用你自己的包
在安装包的时候,最好是以个人身份安装,而不是全系统范围的身份。这样可以有效减少给别的用户带去的影响或被别的用户影响。当然,最好的方式是在virtualenv环境下,类似隔离的沙盒环境。
- 使用pip安装:
pip install --user django-polls/dist/django-polls-0.1.tar.gz
- 现在你可以在项目中使用这个包了
- 卸载:
pip uninstall django-polls
2.10.6 发布你的app
你可以:
- 通过邮件的形式发送给朋友
- 上传包到你的网站
- 推送到一个公开的仓库,例如PyPI,github等
https://packaging.python.org/distributing/#uploading-your-project-to-pypi是如何上传到PyPI的教程。
2.10.7 如何在virtualenv中安装python的包
前面,我们安装polls应用作为一个用户库,它有一些缺点:
- 修改用户库会影响到你系统上的其它Python软件
- 你无法同时运行此包的多个版本
解决这个问题最好的办法就是使用virtualenv。详见https://virtualenv.pypa.io/en/stable/
2.11 接下来学什么
本节主要介绍Django文档的划分,各部分的侧重点,如何找到自己感兴趣的内容。
由于此部分和文档最前面的目录导航重复较多,并且比较简单,就不翻译了。
2.11.1 在文档中查找
2.11.2 文档是如何组织的
2.11.3 文档是如何更新的
2.11.4 从哪里获取文档
2.11.5 不同版本之间的区别
2.12 编写你的第一个Django补丁
**待翻译!**
Django 1.10文档中文版Part4的更多相关文章
- “全能”选手—Django 1.10文档中文版Part4
第一部分传送门 第二部分传送门 第三部分传送门 3.2 模型和数据库Models and databases 3.2.2 查询操作making queries 3.3.8 会话sessions 2.1 ...
- “全能”选手—Django 1.10文档中文版Part1
本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正. 另外对于公开文档进行翻译的版权问题不是很清楚,如有侵权请联系我! 另外,要转载 ...
- Django 1.10文档中文版Part1
目录 第一章.Django1.10文档组成结构1.1 获取帮助1.2 文档的组织形式1.3 第一步1.4 模型层1.5 视图层1.6 模板层1.7 表单1.8 开发流程1.9 admin站点1.10 ...
- “全能”选手—Django 1.10文档中文版Part3
Django 1.10官方文档的入门教程已经翻译完毕,后续的部分将不会按照顺序进行翻译,而是挑重点的先翻译. 有兴趣的可以关注我的博客. 第一部分传送门 第二部分传送门 第四部分传送门 3.2 模型和 ...
- “全能”选手—Django 1.10文档中文版Part2
第一部分传送门 第三部分传送门 第四部分传送门 3.2 模型和数据库Models and databases 3.2.2 查询操作making queries 3.3.8 会话sessions 目录 ...
- Django 1.10文档中文版Part3
目录 2.7 第一个Django app,Part 5:测试 2.7.1 自动化测试介绍 2.7.2 基本的测试策略 2.7.3 编写我们的第一个测试程序 2.7.4 测试一个视图 2.7.5 测试越 ...
- Django 1.10文档中文版Part2
目录 2.5 第一个Django app,Part 3:视图和模板 2.5.1 概览 2.5.2 编写更多的视图 2.5.3 编写能实际干点活的视图 2.5.4 404错误 2.5.5 使用模板系统 ...
- django 中文入门文档
django中文入门文档:阅读地址
- JAVA - JDK 1.8 API 帮助文档-中文版
JAVA - JDK 1.8 API 帮助文档-中文版 百度云链接: https://pan.baidu.com/s/1_7FFadw1a6J0qTfx2FzqPQ 密码: 41n4
随机推荐
- 【转】Castle.ActiveRecord的嵌套事务处理
嵌套的情况下,怎么处理Castle.ActiveRecord的事务? 今天试了一下,原来还是很简单的,只需要使用Castle.ActiveRecord.TransactionMode.Inherits ...
- Mysql局域网访问授权
如果允许用户myuser从ip为192.168.1.1的主机连接到mysql服务器,并使用password作为密码 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'1 ...
- 【BZOJ3667】Rabin-Miller算法(Pollard_rho)
[BZOJ3667]Rabin-Miller算法(Pollard_rho) 题面 呜,权限题,别问我是怎么做的(我肯定没有权限号啊) 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...
- spark(二)
一.spark的提交模式 --master(standalone\YRAN\mesos) standalone:-client -cluster 如果我们用client模式去提交程序,我们在哪个地方 ...
- move_base的全局路径规划代码研究
algorithmn parameter code 主要是以下三个函数 计算所有的可行点 怎么计算一个点的可行点 从可行点中计算路径path todo algorithmn 算法的解释 Dijkstr ...
- 图像RGB格式与YUV格式互转
// rgb2yuv.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #define Level 256 //直方图bin数 #define ...
- 玲珑杯”ACM比赛 Round #19 B 维护单调栈
1149 - Buildings Time Limit:2s Memory Limit:128MByte Submissions:588Solved:151 DESCRIPTION There are ...
- Codeforces 937.D Sleepy Game
D. Sleepy Game time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- LINUX安全加固操作
1.禁止Ctrl-Alt-Delete组合键重启系统 vi /etc/inittab #ca::ctrlaltdel:/sbin/shutdown -t3 -r now 如果还存在下面的文件,则需要注 ...
- Python基础之面向对象(进阶篇)
面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...