<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dj-scaffold &#8211; 天地一沙鸥</title>
	<atom:link href="https://haoluobo.com/tag/dj-scaffold/feed/" rel="self" type="application/rss+xml" />
	<link>https://haoluobo.com</link>
	<description>to be continue....</description>
	<lastBuildDate>Thu, 16 Dec 2021 03:47:57 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>合理的组织django的settings文件</title>
		<link>https://haoluobo.com/2011/10/django-settings/</link>
					<comments>https://haoluobo.com/2011/10/django-settings/#comments</comments>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Sun, 09 Oct 2011 04:26:46 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[dj-scaffold]]></category>
		<category><![CDATA[django]]></category>
		<guid isPermaLink="false">/?p=10232</guid>

					<description><![CDATA[django在一个项目的目录结构划分方面缺乏必要的规范，因此不同人的项目组织形式也千奇百怪，而且也很难说谁的做 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>django在一个项目的目录结构划分方面缺乏必要的规范，因此不同人的项目组织形式也千奇百怪，而且也很难说谁的做法就比较好。我根据自己的项目组织习惯，发布了一个项目<a href="https://github.com/vicalloy/dj-scaffold/">dj-scaffold</a>。<br>前些天在<a href="http://www.reddit.com/r/django/">reddit</a>上为我的项目<a href="https://github.com/vicalloy/dj-scaffold/">dj-scaffold</a>打了个“广告”（见：<a href="http://redd.it/kw5d4">http://redd.it/kw5d4</a>）。不想评价甚糟，甚至差点被打成负分。其中更也人将这个项目说的一文不值。面对负面声音虽然会有些不爽，但其中的建设性意见还是需要听取的，至于那些纯属个人偏好部分就自动过滤了。<br>在谈及settings文件如何组织时，coderanger建议参考<a href="http://www.slideshare.net/jacobian/the-best-and-worst-of-django/51">The Best (and Worst) of Django</a>中的做法。文中的主要观点是开发环境和生产环境的配置都需要放到VCS中进行版本控制。参考文中的做法，我对settings模块做了部分调整。<strong>注：</strong>代码 <a href="https://github.com/vicalloy/dj-scaffold/tree/master/dj_scaffold/conf/prj/sites/settings">https://github.com/vicalloy/dj-scaffold/tree/master/dj_scaffold/conf/prj/sites/settings</a></p>



<h3 class="wp-block-heading">local_settings的弊病</h3>



<p>为将项目的默认配置和本地配置区分开，最常用的做法是增加一个local_settings.py文件，并在settings文件的最后对该文件进行import。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
try:
    from local_settings import *
except:
    pass
</pre></div>


<p>由此引发的问题是你不能对local_settings.py进行版本控制，部署环境的配置万一丢失将难以找回。</p>



<h3 class="wp-block-heading">解决方案</h3>



<p>针对该问题，建议的解决方案如下</p>



<h4 class="wp-block-heading">合理的配置文件组织方式</h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
|~settings/
| |-__init__.py
| |-base.py   #默认配置信息
| |-dev.py    #开发环境的配置
| |-local.sample    #本地的扩展配置在dev和production的最后进行import
| |-pre.sample    #设置当前使用的配置为生产环境还是开发环境
| `-production.py    #生产环境的配置
</pre></div>


<h4 class="wp-block-heading">使用方式</h4>



<p><strong>DJANGO_SETTINGS_MODULE</strong></p>



<p>django的admin脚本提供了settings参数用于指定当前使用的配置文件</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
django-admin.py shell --settings=settings.dev
</pre></div>


<p>在wsgi脚本中则可直接设置需要使用的settings</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
deploy.wsgi
os.environ&#x5B;&#039;DJANGO_SETTINGS_MODULE&#039;] = settings.production
</pre></div>


<p><strong>简化参数</strong><br>当然，如果每次使用django-admin.py的时候都要带上settings参数还是非常恼人，所以推荐的做法是在pre.py中配置自己所需要使用的配置文件。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
SETTINGS = &#039;production&#039; #dev
</pre></div>]]></content:encoded>
					
					<wfw:commentRss>https://haoluobo.com/2011/10/django-settings/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Django标准化项目dj-scaffold</title>
		<link>https://haoluobo.com/2011/08/dj-scaffold/</link>
					<comments>https://haoluobo.com/2011/08/dj-scaffold/#comments</comments>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Thu, 04 Aug 2011 15:38:39 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[dj-scaffold]]></category>
		<category><![CDATA[django]]></category>
		<guid isPermaLink="false">/2011/08/django%e6%a0%87%e5%87%86%e5%8c%96%e9%a1%b9%e7%9b%aedj-scaffold/</guid>

					<description><![CDATA[由于Django没有象rails一样指定项目的目录结构规范，很多人都对django项目的目录结构要如何组织而感 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>由于Django没有象rails一样指定项目的目录结构规范，很多人都对django项目的目录结构要如何组织而感到困惑。为此我又新创建了一个开源项目<a href="https://github.com/vicalloy/dj-scaffold" target="_blank" rel="noopener">dj-scaffold</a>（django的脚手架）。这个项目用于自动生成一个标注化的django项目和app。</p>



<p><strong>项目地址：</strong><a href="https://github.com/vicalloy/dj-scaffold">https://github.com/vicalloy/dj-scaffold</a></p>



<h3 class="wp-block-heading">安装</h3>



<p>已经发布到了pypi，所以你可以用pip或easy_install 来进行安装。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
pip install dj-scaffold
easy_install dj-scaffold
</pre></div>


<h3 class="wp-block-heading">使用</h3>



<p>dj-scaffold主要提供了两个命令，<strong>dj-scaffold.py</strong>和<strong>lbstartapp</strong>。</p>



<h4 class="wp-block-heading">dj-scaffold.py</h4>



<p>该脚本用于取代django的startproject命令。使用方式如下：</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
dj-scaffold.py projectname 
</pre></div>


<p>在该命令执行后，将创建项目projectname。在项目的scripts目录中提供了脚本<strong>create_env.py</strong>和<strong>env.rc</strong>。</p>



<ul class="wp-block-list"><li><strong>create_env.py</strong> 执行该脚本将自动初始化python虚拟环境。新生成的python虚拟环境在env目录。</li><li><strong>env.rc</strong> 该脚本用户启动python虚拟环境（source env.rc）。该脚本同时为python manage.py设置了快捷方式<strong>$mg</strong>。你可以在任何目录调用<strong>$mg</strong>来执行django命令。比如你用<strong>$mg runserver</strong>来启动测试服务器。</li></ul>



<p>项目对应的目录结构如下：</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
注：文件太多，去掉了部分不重要的文件
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
dj-scaffold.py projectname 
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
|+docs/    #用于存放项目的相关文档
|+env/     #python虚拟环境，由脚本自动生成
|~requirements/     #第三方依赖包的存放位置
| `-requirements.pip    #pip的依赖说明文件
|~scripts/    #系统相关的脚本
| |-create_env.py    #创建python虚拟环境（env目录）
| `-env.rc    #进入python虚拟环境。同时提供python manger.py的快捷方式$mg。可在任意目录使用$mg。
|~sites/    #Django的项目文件。在settings文件中增加了部分默认配置。如数据库默认使用sqlite，设置项目的模板以及静态文件目录。
| |+media/    #项目静态文件（用户上传）
| |+static/    #项目静态文件（css、js等）
| `+templates/    #项目模板
|+tools/    #一些项目依赖的第三方工具包。如python虚拟环境初始化脚本等。
`~wsgi/    #项目部署用的wsgi文件
  `-dj_scaffold.wsgi
</pre></div>


<h4 class="wp-block-heading">lbstartapp</h4>



<p><strong>lbstartapp</strong>作为django的扩展命令提供。将dj_scaffold加到INSTALLED_APPS后即可使用该命令。该命令将生成一个标准的app，相比django自带的startapp，lbstartapp将那些不太常用的app默认目录也都给生成了出来。对应目录结构如下：</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
|+management/    #命令目录
|+static/    #静态文件目录
|+templates/    #模板目录
|+templatetags/    #tag目录
|-__init__.py
|-admin.py    #admin管理后台的models配置文件
|-forms.py
|-models.py
|-settings.py    #app自己的settings文件
|-tests.py
|-urls.py    #urls配置文件
`-views.py
</pre></div>


<h3 class="wp-block-heading">NOTE</h3>



<ul class="wp-block-list"><li>项目的大多代码来自：<a href="https://github.com/lincolnloop/django-startproject">https://github.com/lincolnloop/django-startproject</a></li><li>类似项目：<a href="https://github.com/mozilla/playdoh">https://github.com/mozilla/playdoh</a> 个人觉得这个项目还可以。不过我个人觉得自己写的更符合自己的习惯。</li><li>“摒弃魔法”是Django的哲学之一。为此Django没有为用户提供太多的默认操作，它希望一切对用户都是显示可见的。这本没太大的问题，但在我看来“no magic”并不代表连规范都不要。Django实在是太缺乏一些必要的规范。</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://haoluobo.com/2011/08/dj-scaffold/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
	</channel>
</rss>
