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具有一种特殊的格式,使得它更容易被安装和使用。

  1. 首先,在Django项目外面,为你的polls应用,准备一个父目录,取名django-polls;

    为你的app选择一个合适的名字:
    在取名前,去PYPI搜索一下是否有重名或冲突的包已经存在。建议给包名加上“django-”的前缀。名字中最后一个圆点的后面部分在INSTALLED_APPS中一定要独一无二,不能和任何Django的contrib packages中的重名,例如auth、admin、messages等等你。

  2. 拷贝polls目录到该目录内;
  3. 创建一个文件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.
  1. 创建一个django-polls/LICENSE版权申明文件。大多数Django相关的app都基于BSD版权。
  2. 接下来创建一个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',
],
)
  1. 默认只有python的模块和包会被打包进我们的app内。为了包含一些附加的文件,需要创建一个MANIFEST.in文件。为了将静态文件,模板等等非python语言编写的文件打包入内,我们需要在django-polls/MANIFEST.in文件内写入:
    include LICENSE
include README.rst
recursive-include polls/static *
recursive-include polls/templates *
  1. 该步骤可选,但是强烈推荐,将详细的说明文档一起打包。创建一个空的目录django-polls/docs,用于放置你的app相关文档。同时不要忘了,在django-polls/MANIFEST.in文件内写入一行recursive-include docs *。需要注意的是,如果docs目录是空的,那么它不会被打包进去。当然,许多apps通过在线的网站提供文档阅读。
  2. 在你的django-polls目录内,运行python setup.py sdist命令。这将会创建一个dist目录,并编译成功你的新包,django-polls-0.1.tar.gz。

2.10.5 使用你自己的包

在安装包的时候,最好是以个人身份安装,而不是全系统范围的身份。这样可以有效减少给别的用户带去的影响或被别的用户影响。当然,最好的方式是在virtualenv环境下,类似隔离的沙盒环境。

  1. 使用pip安装:pip install --user django-polls/dist/django-polls-0.1.tar.gz
  2. 现在你可以在项目中使用这个包了
  3. 卸载: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的更多相关文章

  1. “全能”选手—Django 1.10文档中文版Part4

    第一部分传送门 第二部分传送门 第三部分传送门 3.2 模型和数据库Models and databases 3.2.2 查询操作making queries 3.3.8 会话sessions 2.1 ...

  2. “全能”选手—Django 1.10文档中文版Part1

    本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正. 另外对于公开文档进行翻译的版权问题不是很清楚,如有侵权请联系我! 另外,要转载 ...

  3. 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 ...

  4. “全能”选手—Django 1.10文档中文版Part3

    Django 1.10官方文档的入门教程已经翻译完毕,后续的部分将不会按照顺序进行翻译,而是挑重点的先翻译. 有兴趣的可以关注我的博客. 第一部分传送门 第二部分传送门 第四部分传送门 3.2 模型和 ...

  5. “全能”选手—Django 1.10文档中文版Part2

    第一部分传送门 第三部分传送门 第四部分传送门 3.2 模型和数据库Models and databases 3.2.2 查询操作making queries 3.3.8 会话sessions 目录 ...

  6. 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 测试越 ...

  7. 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 使用模板系统 ...

  8. django 中文入门文档

    django中文入门文档:阅读地址

  9. JAVA - JDK 1.8 API 帮助文档-中文版

    JAVA - JDK 1.8 API 帮助文档-中文版 百度云链接: https://pan.baidu.com/s/1_7FFadw1a6J0qTfx2FzqPQ 密码: 41n4

随机推荐

  1. [五]SpringBoot 之 连接数据库(JPA-Hibernate)

    在具体介绍之前,先了解下什么是JPA JPA全称JavaPersistence API.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. http: ...

  2. Contest 1

    A:注意到模数是要求lcm的数的倍数,直接先取模就可以了.考场脑抽,对其质因数分解判了一下每个因子有没有,当然也行. #include<iostream> #include<cstd ...

  3. 关于upper、lower bound 的探讨

    lower_bound(A, A+n, x) - A  返回第一个大于等于x的数的下标 lower_bound(A, A+n, x) - A - 1 返回最后一个小于x的数的下标 upper_boun ...

  4. [洛谷P5137]polynomial

    题目大意:求:$$\sum\limits_{i=0}^na^{n-i}b^i\pmod{p}$$$T(T\leqslant10^5)$组数据,$a,b,n,p\leqslant10^{18}​$ 题解 ...

  5. 【bzoj3173】最长上升子序列

    Portal --> bzoj3173 Solution 感觉自己需要智力康复qwq 首先题目给的这个序列肯定是一个\(1-n\)的排列,并且插入的顺序是从小到大 仔细思考一下会发现如果知道了最 ...

  6. Web之CGIC的介绍与使用20171229

    一.CGIC简介 1.CGI简介 CGI(Common Gateway Interface)是外部应用扩展应用程序与WWW服务器交互的一个标准接口.按照CGI标准编写的外部扩展应用程序可以处理客户端浏 ...

  7. C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。

    http://www.cnblogs.com/Imageshop/archive/2012/12/13/2815712.html 在GDI+1.1的版本中,MS加入不少新的特性,其中的特效类Effec ...

  8. PID控制算法的c语言实现十二 模糊PID的参数整定

    这几天一直在考虑如何能够把这一节的内容说清楚,对于PID而言应用并没有多大难度,按照基本的算法设计思路和成熟的参数整定方法,就算是没有经过特殊训练和培训的人,也能够在较短的时间内容学会使用PID算法. ...

  9. Google Cast和ChromeCast

    Google Cast类似于DLNA,AirPlayer,Miracast,就是一种投屏技术.我们ATV产品是对Google Cast和ChromeCast都是支持的. Google Cast 大致工 ...

  10. DES加密解密类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.S ...