Skip to main content

受 Sinatra 启发的基于 django 的迷你框架

项目描述

您现在可以帮助解决的问题:|waffle|

构建状态:|构建状态| |构建健康|

.. |华夫饼| 图片:: https://badge.waffle.io/amitu/importd.png?label=ready&title=Ready
:target: https://waffle.io/amitu/importd
:alt: 'Stories in Ready'

.. |build -状态| 图片:: https://travis-ci.org/amitu/importd.png?branch=master
:target: https://travis-ci.org/amitu/importd

.. |build-health| 图片:: https://landscape.io/github/amitu/importd/master/landscape.svg
:target: https://landscape.io/github/amitu/importd/master
:alt: 代码健康

什么是进口?
================

我关于导入的演讲幻灯片:http://amitu.com/importd/

Django 很棒,但是在其中开始一个新项目很痛苦。importd 的
灵感来自 ruby​​ 的 sinatra。Hello world django 项目:

.. 代码块:: python

from importd import d
d(DEBUG=True)

@d("/")
def idx(request):
return "index.html"

@d("/post/< int:post_id>/")
def post(request, post_id):
return "post.html", {"post_id": post_id}

if __name__ == "__main__":
d.main()

运行它:

.. 代码: : bash

$ python foo.py

这将启动调试服务器。

要在生产环境中运行它:

.. code:: bash

$ gunicorn foo:




* 简单示例:https://github.com/amitu/importd/tree/master/examples
* importd-boilerplate:https://github.com/if1live/importd-boilerplate

* importd + jinja2 + django-debug-toolbar + django REST framework

设置框架
===================

在 django 中管理设置是通过 settings.py 文件完成的。然后人们放了一个
“local_settings.py”来覆盖。这并不能很好地扩展,我们最终得到了非常大的设置文件,几乎没有结构,并且由于开发人员机器之间的“local_settings.py”缺乏同步
而存在许多问题。importd 有一些方法可以让这个过程更简单、更标准化。





首先没有``local_settings.py``。设置自定义有
两种,为开发和生产选择不同的东西,例如,您想
为生产激活 statsd,而为开发激活 debug_toolbar。这两个都应该
被签入,这样就不会有人不
小心得到一些设置。然后是在版本控制系统中不存储某些东西的设置自定义
,比如密码和访问令牌和密钥。这些
应该通过环境变量进行管理。

然后还有一个问题是将设置暴露给模板。我们有一个
模板上下文处理器,它可以将整个设置发布到模板中,但这
让很多人感到不舒服。您可能只想公开一小部分
您在设置中描述的事情,并且您希望以最小的麻烦做到这一点。

``importd.env``
---------------

考虑到这一点,importd 有 ``env()``,它只是从环境中读取数据
。所以在你的 app.py 中你可以这样做:

.. code:: python

from importd import d, env
d(
DEBUG=not env("IS_PROD", False),
db=env("DB_URL", "mysql://root :@localhost/dbname")
)

强烈建议您在项目中包含 `envdir`。可能有一天
importd 会自动检测 envdir 并设置它。

``env`` 非常聪明,它需要``default=`` 和 ``factory=``。如果传递了“default”
,则将环境变量的字符串值转换为
``默认``的``type()``。您可以通过传递自己的
``factory`` 来覆盖此行为,或者可以通过传递
``factory=importd.NotSet`` 完全禁用此行为。

`env()` 还通过将诸如“False/off/no”(
不区分大小写)之类的字符串转换为 python 的 ``False`` 值(以及
``bool()`` 所做的非空字符串为 True)来处理布尔值.

``importd.debug``
-----------------

使用``.debug()`` 你可以根据``DEBUG`` 来设置一些不同的值


.. 代码:: python

from importd import d, debug
d(
DEBUG=not env("IS_PROD", False),
STATSD_CLIENT=debug(
'django_statsd.clients.toolbar', prod='django_statsd.clients.normal'
),
)

这将根据我们是否处于调试
模式将“STATSD_CLIENT”设置为适当的值。这就像放置一个 if 条件一样简单,但它会重复
很多次,值得使用这个快捷方式。同样这样,事情就保持在同一个
地方,您不需要上下查找设置文件,而是在
local_settings.py 中查看变量是否已被覆盖。

``importd.e``
-------------

这使您可以“公开”模板中的访问设置。你不应该使用
``"django.core.context_processors.settings"`` 作为
``TEMPLATE_CONTEXT_PROCESSORS``,而是使用 ``"importd.
预处理器,并且在模板中您将可以访问“esettings”变量。

要将变量标记为已公开,您必须这样做:

.. code:: python

from importd import d, e

d(
DEBUG=True,
SOME_VAR=e("its value"),
)

这将使 ``SOME_VAR`` 可用在设置以及“esettings”中。

``importd.s``` 参数
-------------------------
这使您可以重用设置变量。在设置文件中,我们定义变量
并在需要时重用它们。在导入中,您可以重用定义的设置变量。

.. 代码:: python
from importd import d, s

d(
DEBUG=True,
TEMPLATE_DEBUG=s("DEBUG")
)

这会将“TEMPLATE_DEBUG”设置变量设置为“DEBUG”值。
如果您尝试
在键值内使用 ``s`` 将引发 ``ImproperlyConfiguredError`` 异常。

.. code:: python
from importd import d, s

d(
EMAIL="foo@example.com",
ADMINS=(s("EMAIL"), "hello@example.com")
)

上面的例子会引发 ``ImproperlyConfiguredError ``。

``d(debug={})`` 参数
-------------------------

一些设置只有在调试环境下才需要,或者需要覆盖,
您可以使用 ``debug=`` 关键字参数进行设置。

.. 代码:: python

from importd import d

d(
DEBUG=False,
SOME_VAR="this is prod value",
debug=dict(
SOME_VAR="this is debug value"
)
)

你也可以使用 `importd.NotSet` 作为 debug dict 中的值,该设置将
被完全删除在适当的环境中(调试或生产)。

d.openenv(path=None)
---------------
上面的方法会打开当前目录下的 envdir 目录,并加载
该目录下的所有环境变量。如果 path 是 realpath 即完整路径
,则 importd 将尝试查看指定路径。如果在 path
中指定了相对路径,则导入的将相对于当前目录。

建议在导入 d 之后直接调用它。

debug:/prod: ``INSTALLED_APPS`` 等的前缀
------------------------- ----------

一些应用程序只需要在调试环境中是一种常见的模式,例如
devserver 或 debug_toolbar。由于 INSTALLED_APPS 和
middelware 等应用程序的顺序很重要,我们最终将整个 INSTALLED_APPS、
MIDDLEWARE_CLASSES 等复制到 prod 和 dev 中,然后这往往会出现分歧,因为
它们是在不同的位置。不好。

.. 代码:: python

from importd import d, env
d(
DEBUG=env("IS_PROD", True),
INSTALLED_APPS=[
"django.contrib.contenttypes",
“django.contrib.auth”、
“django.contrib.sessions”、

“debug:devserver”、
“debug:debug_toolbar”、

“myapp”
]


注意 ``devserver`` 和 ` 中的 ``debug:`` 前缀`调试工具栏`。根据
``DEBUG`` 的值,这些行将被包含或不包含。importd
在“MIDDLEWARE_CLASSES”、“INSTALLED_APPS”和
“TEMPLATE_CONTEXT_PROCESSORS”中查找字符串。

同样,如果某些内容以 ``prod:`` 开头,则它仅包含在生产
环境中。

向后不兼容更改
==============================

``d.main()`` 以前不需要,现在是.


========

* 与 django 完全兼容
* 支持 smarturls
* 大多数常用的 django 函数和 d 中可用的类。
命名空间,例如 d.HttpResponse、d.render_to_response、d.get_object_or_404 等
* 自动映射 foo.py 目录中的“模板”文件夹以提供模板
* 自动映射 foo.py 中的“静态”文件夹以提供静态内容
* 管理命令仍然可用: $ python foo.py shell
* wsgi 兼容
* gunicorn 支持
* 与 fhurl (http://packages.python.org/fhurl/) 无缝工作
* 自动添加 django-debug-toolbar (需要手动添加到 INSTALLED_APPS)
* Auto SECRET_KEY:如果设置上没有 SECRET_KEY,请尝试从
./secret.txt ,如果没有 ./secret.txt 生成随机字符串,则将其写入
./secret.txt 并最终将其作为 SECRET_KEY 返回。
* 自动添加棺材/django-jinja (jinja2 集成)
* 支持 livereload

安装
============

.. code:: bash

$ pip install importd

Documentation
========== ===

http://importd.readthedocs.org/en/latest/

ChangeLog
=========

https://github.com/amitu/importd/blob/master/ChangeLog.rst

贡献者
=== =========

* Amit Upadhyay (https://github.com/amitu)
* Dmytro Vorona (https://github.com/alendit)
* Jannis Leidel (https://twitter.com/jezdez ) )
* Lukasz Balcerzak (https://github.com/lukaszb)
* Juan Carlos (https://github.com/juancarlospaco)
* Josep Cugat (https://github.com/jcugat)
* Yu Byunghoo (https:// github.com/if1live)
* Arpit Singh (https://github.com/arpitremarkable)
* Hitul Mistry (https://github.com/hitul007)

贡献指南
============== ====

要在 git 上提交之前在本地查看此文件或任何重组文本文件,
请从 pypi 安装“restview”。

**拉取请求**:如果您分叉此存储库以发送拉取请求,请
为您的工作创建一个分支,而不是直接在 master 上工作。这样
你的主人会跟踪我的主人,以防拉取请求被拒绝,或者
延迟,你的主人保持清洁。
这也使得从你的 fork发送多个拉取请求变得容易。

许可证
=======

* BSD
导入 ChangeLog
==================

0.4.3 - 2015 年 10 月 12 日
------------ --------
* 添加了新标签。
* 建议在 main 调用之前调用 d.openenv。
* 额外的 python 路径不能作为 kwargs 添加到 d 中。

0.4.2 - 2015 年 10 月 9 日
------------------
* 修复了未调用中间件的 process_view。
* 额外的 python 路径可以作为 kwargs 参数 ENVDIR 添加到 d 中。

0.4.1 - 2015 年 9 月 30 日
-------------------
* 修复了调用 d.dotslash 时的 AttributeError。


* 如果已经配置0.4.0 - 2015 年 8 月 27 日,则不要自动配置 ROOT_URLCONF
--------------------

设置框架发布

* 添加了 `debug` 关键字参数dict 并且仅当 DEBUG
为真时才 添加到基本设置可用于条件设置的 debug() * MIDDLEWARE_CLASSES、INSTALLED_APPS 或 TEMPLATE_CONTEXT_PROCESSORS 查找 以“debug:”开头的设置,这些值在 prod 中完全删除,在 debug 中“debug:”前缀被剥离。同样,我们有“产品:”。







* 创建了 impoortd.e() 可用于将一些设置“公开”到
模板。为了在模板中使用它,添加一个模板上下文处理器
“importd.esettings”,这将提供一个名为“esettings”的变量。


0.3.3 - 2015 年 2 月 24 日
-------------------

* 添加了 livereload 命令/功能。


0.3.2 - 2015 年 1 月 27 日
-------------------

* 添加了蓝图文件。
* 可用时调用 django.setup()


0.3.1 - 2014 年 10 月 27 日
--------------------

* 发布时没有蓝图。重新发布。


0.3.0 - 2014 年 10 月 27 日
-------------------

* 将默认设置 STATIC_ROOT 从“static”更改为“staticfiles”,并将新的默认设置 STATICFILES_DIRS 设置为“static”。这意味着如果您使用 collectstatic 管理命令,它将从“static”文件夹中收集文件并将它们复制到“staticfiles”。如果您使用外部 Web 服务器,则必须更改 url http://server/static/ 的本地路径以提供来自 ``staticfiles`` 文件夹的文件。
* 自动添加 django-debug-toolbar:尝试导入,如果成功且不在设置上且数据库存在(debug_toolbar 需要一个 DB)且 DEBUG=True,则配置 debug_toolbar。
* 自动添加 SECRET_KEY:如果设置中没有 SECRET_KEY,尝试从 ./secret.txt 读取 SECRET_KEY,如果没有 ./secret.txt 生成一个随机字符串,然后将其写入 ./secret.txt 最后作为 SECRET_KEY 返回。
* 自动添加 django.contrib.humanize。
* 自动添加 django.contrib.staticfiles。
* 从 django.shortcuts 自动导入 get_list_or_404、渲染、重定向。
* 修复了新功能的测试。
* 支持 django-debug-toolbar 1.2.1
* 添加 importd-boilerplate 超链接。
* 自动添加棺材/django-jinja。
* 添加了对 Django1.7 和 Python3.4 的支持,删除了对 python3.3 的支持。
* 添加了 autoimport 关键字参数,以控制是否应自动
导入视图等。
* 添加了一个类似蓝图的框架,灵感来自于


0.2.9 - 2013 年 11 月 10 日
--------------------------------

* 以前的版本中存在一个错误,d.dotslash( ) 如果在配置 django 之前调用,总是返回相同的



0.2.8 - 2013 年 11 月 10 日
-------------------

* 与 speaklater 集成(可选),如果可用,可以
在 django 之前使用 d.dotslash()已配置,返回一个惰性字符串,
在配置 django 后变为“可用”。适用于配置
模板目录或静态文件等


0.2.7 - 2013 年 11 月 4 日
------------------

* db kwarg 现在可以是字符串或 (string, dict ),在以后的情况下,dict 将被
合并到 dj_database_url.parse() 返回的 dict 中,以支持
django 允许的额外设置,例如 OPTIONS、CONN_MAX_AGE [这个我
在每个项目中都特别需要,并且不想错过使用 dj_database_url]


0.2 .6 - 2013 年 11 月 4 日
------------------

* 支持 django 1.6c1


0.2.5 - 2013 年 11 月 4 日
------------------

* 现在在配置时接受 db= kward,使用 dj_database_url 解析 db


0.2.4 - 2013 年 11 月 4 日
------------------

* 为管理静态文件提供服务的更改


0.2.3 - 2013 年 8 月 16 日
---------- ---------

* 原来导入依赖于 django :-)


0.2.2 - 12-Aug-2013
--------------------

* 支持django 1.3.7
* 现在测试 django 1.5.2、1.4.6。


0.2.1 - 2013 年 8 月 12 日
-------------------

* 包装坏了,谢谢@jezdez


0.2.0 - 2013 年 8 月 4 日
---- --------------

此版本中有一个向后不兼容的更改。导入的已删除
atexit 魔术,这意味着必须在某处包含对 d.main() 的调用。

.. code-block:: python

from importd import d

@d("/")
def hello(request):
return d.HttpResponse("hello world")

if __name__ == "__main__":
d.main() # NOTE这

* 向后不兼容:删除 atexit 魔法,d.main() 是替代
* gunicorn 现在干净地退出
* 测试,支持 python 2.6、2.7 和 3.3 中的每一个的 django 1.4.3 和 1.5.1
* 更少的魔法,没有更多的系统.modules 调整
* runserver 现在在任何文件更改时重新加载
* 添加了自动生成的 MANIFEST.in(使用检查清单)
* 添加了对将 url 安装到自定义位置的支持


0.1.4 - 2012 年 10 月 22 日
-------------------

* setup.py 是错误


的 0.1.3 - 2012 年 10 月 22 日
---------------- ---

* setup.py 有错误


0.1.2 - 2012 年 8 月 13 日
-------------------

* 一些错误修复,APP_DIR 计算不正确
* 自动配置数据库如果 DATABASES 未通过
* 每个已安装应用程序的自动导入 .views 和 .forms 以使所有
@d("pattern") 装饰器可见
* 每个应用程序中的自动导入 .signals 以允许信号自行注册,
比从模型中导入它们更好.py 明确并与循环
导入问题作斗争


0.1.1 - 2012 年 8 月 8 日
------------------

* 将 smarturls 重构为一个单独的项目


0.1.0 - 6- 2012 年 8 月
------------------

初始版本。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

importd-0.4.3.zip (60.7 kB 查看哈希

已上传 source

importd-0.4.3.tar.gz (35.6 kB 查看哈希

已上传 source

importd-0.4.3.tar.bz2 (32.0 kB 查看哈希

已上传 source

内置发行版

importd-0.4.3-py2.py3-none-any.whl (23.1 kB 查看哈希

已上传 2 7

importd-0.4.3-py2.7.egg (28.3 kB 查看哈希

已上传 2 7