8.8 KiB
将 Python Django 应用程序打包成一个可重用的组件
原文:https://www.pythoncentral.io/package-python-django-application-reusable-component/
通过编写和使用可重用的 Python Django 应用程序来节省时间
设计、开发和维护一个 web 应用程序并不简单。为了一个成功的 web 应用程序,许多特性和方面必须得到正确的处理。举几个例子,几乎每个 web 应用程序都具有的功能是用户管理、第三方 oauth 登录/注册和管理站点。由于在任何 web 应用程序中有如此多的常见问题需要一次又一次地解决,所以让它们成为可重用的组件/包是有意义的,这样新的 web 应用程序就可以简单地利用现有的代码来节省开发时间。
幸运的是, Python 包索引 ( pypi)提供了许多可以在自己的应用程序中使用的包。更具体地说, Django 包列出了所有你可以集成到自己项目中的可重用 Django 应用。找到并使用一个合适的 Django 包通常比自己编写一个更好、更省时。
在本文中,我们将学习如何使我们当前的myblog Django 应用程序成为一个可重用的 Django 包,以便您或其他人可以在他或她自己的项目中使用它。
包和应用程序
在我们开始之前,我们应该澄清一个关于软件包和应用程序的关键点。Python 包是易于重用的 Python 代码的逻辑组。一个包通常包含多个被称为模块的 Python 文件。
通常情况下,我们使用一个模块或者通过像import myblog.views或者from myblog import views那样导入一个包。为了让一个 Python 目录比如myblog变成一个包,我们把一个特殊的文件__init__.py放入其中,即使这个目录是空的。
Django 应用只是一个 Python 包,设计用于 Django 项目内部。通常,Django 应用遵循常见的 Django 约定,例如包括models.py、urls.py和views.py。
术语打包是指将 Django 应用打包成一个可部署的 Python 包,以便其他人可以轻松地将其集成到自己的项目中。
提取应用程序代码
在我们之前的教程之后,我们应用程序myblog的当前结构应该是这样的:
myblog/
manage.py
myblog/
__init__.py
admin.py
models.py
settings.py
static/
myblog/
background.jpg
style.css
templates/
index.html
post/
detail.html
upload.html
tests.py
urls.py
views.py
wsgi.py
首先,让我们在根myblog目录之外为myblog创建一个父目录。姑且称之为django-myblog:
django-myblog/
myblog/
manage.py
...
其次,让我们将myblog目录移动到django-myblog中:
django-myblog/
myblog/
__init__.py
...
myblog/
manage.py
第三,用以下内容创建一个文件django-myblog/README.rst:
=====
Myblog
=====
Myblog is a simple demo of Django's basic usage.
Quick start
-----------
1\. Add "myblog" to INSTALLED_APPS:
INSTALLED_APPS = {
...
'myblog'
}
2\. Include the myblog URLconf in urls.py:
url(r'^myblog/', include('myblog.urls'))
3\. Run `python manage.py syncdb` to create myblog's models.
4\. Run the development server and access http://127.0.0.1:8000/admin/ to
manage blog posts.
5\. Access http://127.0.0.1:8000/myblog/ to view a list of most recent posts.
第四,为你的可重用 app 创建一个许可文件django-myblog/LICENSE。通常 Django 应用程序是在 BSD 许可下发布的,但是你可以自由选择任何一个。
第五,创建django-myblog/setup.py来指定如何安装由分发使用的应用程序的指令。
import os
from setuptools import setup
README = open(OS . path . join(OS . path . dirname(_ _ file _ _),' README.rst '))。阅读()
#允许 setup.py 从任何路径运行
OS . chdir(OS . path . norm path(OS . path . join(OS . path . abspath(_ _ file _ _),os.pardir)))
设置(
name = 'django-myblog ',
version = '0.1 ',
packages = ['myblog'],
include_package_data = True,
license = 'BSD License ',
description = '一个简单的 django 应用程序演示',
long_description = README,
URL = ' HTTP://WWW . example . com/',
author = 'Your Name ',
author _ email = ' Your Name @ example . com ',
classifiers =[
' Environment::Web Environment ',
'Framework :: Django ',
'预定受众::开发者',
' licence::OSI Approved::BSD License ',# example licence
'操作系统::OS 独立',”
第六,创建django-myblog/MANIFEST.in来包含我们包中的文本文件和静态文件:
include LICENSE
include README.rst
recursive-include myblog/static *
recursive-include myblog/templates *
recursive-include docs *
注意我们还在MANIFEST.in中包含了一个目录docs。这个目录将包含我们将来可重用的应用程序的文档。现在,让我们创建一个空目录django-myblog/docs。
最后,我们构建我们的 Python 包:
$ python setup.py build
running build
running build_py
creating build
creating build/lib
creating build/lib/myblog
copying myblog/__init__.py -> build/lib/myblog
copying myblog/admin.py -> build/lib/myblog
copying myblog/models.py -> build/lib/myblog
copying myblog/settings.py -> build/lib/myblog
copying myblog/tests.py -> build/lib/myblog
copying myblog/urls.py -> build/lib/myblog
copying myblog/views.py -> build/lib/myblog
copying myblog/wsgi.py -> build/lib/myblog
running egg_info
writing django_myblog.egg-info/PKG-INFO
writing top-level names to django_myblog.egg-info/top_level.txt
writing dependency_links to django_myblog.egg-info/dependency_links.txt
reading manifest file 'django_myblog.egg-info/SOURCES.txt'
writing manifest file 'django_myblog.egg-info/SOURCES.txt'
在新的 Django Web 应用程序中使用 django-myblog
假设您要开始一个新的 Django 项目,它将使用myblog中的功能。您可以简单地重用我们刚刚在您的新项目中构建的django-myblog。
首先,让我们创建一个新的 Django 项目:
$ django-admin.py startproject mysite
其次,我们来修改一下mysite/settings.py:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'myblog', # Include 'myblog' into mysite
'django.contrib.admin', # Enable the admin site
'django.contrib.admindocs', # Enable the documentation for admin site
)
第三,让我们修改mysite/urls.py,将myblog的 URLconf 放在/blog下:
urlpatterns = patterns('',
...
url(r'^blog/', include('myblog.urls')),
)
第四,我们运行“python manage.py syncdb”来为myblog创建模型,并运行“python manage.py runserver”来启动服务器:
$ python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table myblog_post
Creating table myblog_comment
您刚刚安装了 Django 的 auth 系统,这意味着您没有定义任何超级用户。您想现在创建一个吗?(是/否):是
用户名(留空使用‘小糯干滩’):root
邮箱:
密码:
密码(再次):
超级用户创建成功。
安装自定义 SQL...
安装索引...
从 0 个夹具安装了 0 个对象
$ python manage.py runserver
验证模型...
发现 0 个错误
2013 年 8 月 21 日- 12:03:10
Django 版本 1.5.1,使用设置‘my site . settings’
开发服务器运行在 http://127.0.0.1:8000/
用 CONTROL-C 退出服务器
最后,我们可以访问 http://127.0.0.1:8000/blog/来看看我们博客的主页:
总结和提示
在本文中,我们学习了如何将我们的myblog应用打包成一个可重用的组件,以及如何在一个新的 django 项目中使用它。编写可重用的 Django 应用程序总是一个好主意,因为您可以在新项目中重用相同的代码,从而节省大量时间。由于 Python 包索引 ( pypi)和 Django 包提供了可重用 Python 和 Django 应用程序的完整列表,所以在开始任何新项目之前,您应该检查一下它们。
