欢迎大家访问我的主页:www.liujiangblog.com


第一部分传送门

第二部分传送门

第三部分传送门

3.2 模型和数据库Models and databases

3.2.2 查询操作making queries

3.3.8 会话sessions

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文档中文版Part1

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

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

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

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

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

  4. Django 1.10文档中文版Part4

    2.10 高级教程:如何编写可重用的apps 2.10.1 重用的概念 The Python Package Index (PyPI)有大量的现成可用的Python库.https://www.djan ...

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

  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. 使用PowerShell找出具体某个站点所使用的模板(Web Template)名称?

    $web = get-spweb –identity http://servername/sites/site/web #得到站点的对象 $web.WebTemplate #得到WebTemplate ...

  2. WiFi流量劫持—— JS脚本缓存投毒

    在上一篇<WiFi流量劫持—— 浏览任意页面即可中毒>构思了一个时光机原型,让我们的脚本通过HTTP缓存机制,在未来的某个时刻被执行,因此我们可以实现超大范围的入侵了. 基于此原理,我们用 ...

  3. Raft 为什么是更易理解的分布式一致性算法

    一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...

  4. 基于 Jenkins 快速搭建持续集成环境

      什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...

  5. 循序渐进做项目系列(3):迷你QQ篇(1)——实现客户端互相聊天

    <循序渐进做项目系列迷你QQ篇>将陆续介绍客户端聊天,文件传输,加好友,群聊,包括语音聊天,视频聊天,远程桌面等等需求如何实现,感兴趣的朋友可以持续关注.考虑到某些需求较为复杂,本系列采用 ...

  6. [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

    [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...

  7. Google分布式构建软件之四:分发构建结果

    注:本文英文原文在google开发者工具组的博客上[需要FQ],以下是我的翻译,欢迎转载,但请尊重作者版权,注名原文地址. 之前的文章,介绍了Google在分布式构建软件过程中,如何把构建过程分发到许 ...

  8. 【Java并发编程实战】-----“J.U.C”:锁,lock

    在java中有两种方法实现锁机制,一种是在前一篇博客中([java7并发编程实战]-----线程同步机制:synchronized)介绍的synchronized,而另一种是比synchronized ...

  9. Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt ...

  10. Distribution1:Distribution Reader

    在transactional replication中,在publication中执行了一个更新,例如:update table set col=? Where ?,如果table中含有大量的数据行, ...