初心者がDjangoを学ぶ際に注意すべき10のポイント

高洛峰
リリース: 2016-10-17 14:40:10
オリジナル
988 人が閲覧しました

Django を学び始めたばかりの初心者に注意してください。Django をより良く学び、間違いを減らし、寄り道を避けるのに役立つ 10 の注意点があります。一見の価値があります~~

1. プロジェクトを含めないでください。 name 参照コード内
たとえば、「project」という名前のプロジェクトを作成し、「app」という名前のアプリケーションを含める場合、次のコードは適切ではありません:

from project.app.models import Author
ログイン後にコピー

欠点は、アプリケーションとプロジェクトが密接に関連することです。アプリケーションを簡単に再利用できなくなります。将来プロジェクト名を変更する必要がある場合は、我慢する必要があります。
推奨されるアプローチは次のとおりです:

from app.models import Author
ログイン後にコピー

PYTHONPATH でプロジェクト パスを設定する必要があることに注意してください。
2. MEDIA_ROOT と TEMPLATE_DIRS をハードコーディングしないでください。
プロジェクト構成ファイル settings.py で次のコードを使用しないでください:

TEMPLATE_DIRS = ( "/home/html/project/templates",) 
MEDIA_ROOT = "/home/html/project/appmedia/"
ログイン後にコピー

実稼働環境にデプロイするとき、またはサーバーを移行するときに問題が発生します。
次の方法を使用することをお勧めします:

SITE_ROOT = os.path.realpath(os.path.dirname(__file__)) 
MEDIA_ROOT = os.path.join(SITE_ROOT, 'appmedia') 
TEMPLATE_DIRS = ( os.path.join(SITE_ROOT, 'templates'),)
ログイン後にコピー

(abspath も使用できます。realpath との違いについては、http://rob.cogit8.org/blog/2009/May/05/django-and を参照してください) -relativity-updated/)
3. テンプレート内の静的ファイルのパスをハードコーディングしないでください
テンプレート内で CSS、JavaScript、または画像をリンクする場合、次の方法を使用することはお勧めできません:

<link rel="stylesheet" type="text/css" href="/appmedia/amazing.css" />
<script type="text/javascript" src="/appmedia/jquery.min.js"></script>
ログイン後にコピー

Whenプロジェクトでは静的ファイルを他のサーバーから提供する必要があります。通常、これは別の http アドレスになるため、すべての /appmedia/ を新しいアドレスに置き換える必要があります。Web サイト用のコードを記述するのは非常に面倒です。
安心の解決策は、ハードコーディングされたパスの代わりに {{ MEDIA_URL }} を使用することです:

<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}amazing.css" />
    <script type="text/javascript" src="{{ MEDIA_URL }}jquery.min.js"></script>
ログイン後にコピー

テンプレート コンテキスト変数を取得するにはどうすればよいですか? RequestContext を使用してください:

return render_to_response("app/template.html", {&#39;var&#39;: &#39;foo&#39;},  context_instance=RequestContext(request))
ログイン後にコピー

RequestContext から現在のユーザーやその他の情報を取得することもできます

4 ビューにビジネス ロジック コードを書き込まないでください

たくさんの本を読んだことがあっても、混乱しないでください。彼らはすべてのロジックを views.py に記述しますが、それはやめてください。これは単体テストやコードの再利用に役立たないためです。
それでは、ビジネス ロジックをどこに配置すべきでしょうか?モデルに組み込むか、別のヘルパー モジュールを作成することをお勧めします。
もちろん、モデルから著者を取得するには、著者リストを取得するコードをビューに配置できます。
5. デプロイ時に DEBUG を False に設定することを忘れないでください。
デプロイ中に DEBUG を無効にすることを忘れることがよくあります:

import socket  
if socket.gethostname() == &#39;productionserver.com&#39;: 
    DEBUG = False
else: 
    DEBUG = True
ログイン後にコピー

別の方法は、別の設定ファイルを使用することです:

#文件名:settings_debuy.py
#包含调试模式的配置信息
#http://www.pythontab.com
#使用python manage.py runserver settings=settings_debug.py来运行项目
from settings import *
DEBUG = True
#还可以配置更多在调试时使用的变量:)
ログイン後にコピー

6. カスタム テンプレート タグは 1 回だけ読み込みます
カスタムまたはサードパーティのテンプレート タグとテンプレート フィルターを使用する必要がある場合、通常はテンプレート内で使用されます:

{% load template_tags %}
ログイン後にコピー

実際の状況では、これらは上記のコードはカスタム テンプレート タグとテンプレート フィルターのテンプレートで使用するため、DRY ではありません。

from django import template 
template.add_to_builtins(&#39;app.templatetags.custom_tag_module&#39;)
ログイン後にコピー

上記のコードをプロジェクト開始時に読み込めるモジュール(settings.py、urls.py、models.pyなど)に入れてください。

上記のコードの機能は、プロジェクトの開始時にカスタム テンプレート タグまたはフィルターをロードすることです。これらは、{%load template_tags %} なしでテンプレート内のどこでも使用できます。
7. URL を適切に設定して使用する
次のような 1 つの urls.py ファイルですべての URL を設定しないでください。

urlpatterns = patterns(&#39;&#39;, 
  url(r&#39;^askalumini/question/$&#39;,&#39;.....registerInstitution&#39;,name=&#39;iregister&#39;), 
  url(r&#39;^askalumin/answer/$&#39;,&#39;someview.....&#39;,name=&#39;newmemberurl&#39;), 
  url(r&#39;^institution/member/$&#39;,&#39;someview.....&#39;,name="dashboardurl"), 
  url(r&#39;^institution/faculty/$&#39;,&#39;editInstitute&#39;,name="editinstituteurl"), 
  url(r&#39;^memeber/editprofile/$&#39;,&#39;editProfile&#39;,name="editprofileurl"), 
  url(r&#39;^member/changepassword/$&#39;,&#39;changePassword&#39;,name="changepasswordurl"), 
  url(r&#39;^member/forgotpassword/$&#39;,&#39;forgotPassword&#39;,name="forgotpasswordurl"), 
  url(r&#39;^member/changepicture/$&#39;,&#39;changePicture&#39;,name="changepictureurl"), 
  url(r&#39;^member/logout/$&#39;,&#39;memeberlogout&#39;,name="logouturl"), , 
)
ログイン後にコピー

推奨される方法は、各アプリケーションの URL を独自の urls.py で設定することです。アプリケーションはさまざまなプロジェクトで再利用しやすくなります:

urlpatterns = patterns(&#39;&#39;, 
  (r&#39;^$&#39;, include(&#39;institution.urls&#39;)), 
  (r&#39;^institution/&#39;, include(&#39;institution.urls&#39;)), 
  (r&#39;^askalumini/&#39;, include(&#39;askalumini.urls&#39;)), 
  (r&#39;^member/&#39;, include(&#39;member.urls&#39;)), 
)
ログイン後にコピー

以下は askalumini アプリケーションの urls.py です:

urlpatterns = patterns(&#39;askalumini.views&#39;, 
  url(r&#39;^$&#39;,&#39;askHome&#39;,name=&#39;askaluminiurl&#39;), 
  url(r&#39;^questions/(?P<questionno>\d+)/$&#39;,&#39;displayQuestion&#39;,name=&#39;askquestiondisplay&#39;), 
  url(r&#39;^askquestions/$&#39;,&#39;askQuestion&#39;,name=&#39;askquestionurl&#39;), 
  url(r&#39;^postcomment/$&#39;,&#39;postComment&#39;,name="askquestioncomment") 
)
ログイン後にコピー

静的ファイル パスはハードコーディングすべきではないと述べましたが、URL 処理メソッドもハードコーディングする必要があると述べました。ハードコーディングしないでください。そうしないと、アドレスを変更するときに多くの変更が必要になりますが、これはいくつかの URL 関数を使用することで処理できます。

/project/askalumini/urls.py では、URL ごとに名前が定義されており、ハードコーディングの代わりにビュー、テンプレート、モデルで URL を効果的に処理するのに役立ちます。
名前の一意性を確保するために、URL に / という名前を付ける規則に従ってください。
たとえば、views.py ファイルには次のコードがあります:

HttpResponseRedirect("/askalumini/questions/54")
ログイン後にコピー

これを次のように変更してください:

from django.core.urlresolvers import reverse 
HttpResponseRedirect(reverse(&#39;askquestiondisplay&#39;,kwargs={&#39;questionno&#39;:q.id}))
ログイン後にコピー

モデル内で models.permalink デコレータを使用して URL をフォーマットします:

@models.permalink 
def get_absolute_url(self): 
return (&#39;profileurl2&#39;,(),{&#39;userid&#39;: self.user.id})
ログイン後にコピー

URL タグを使用します代わりにテンプレート内でハードコード:

{% url askquestiondisplay 345 %} 
<a href="{% url askquestiondisplay 345 %}"> Ask Question </a>
ログイン後にコピー

8,调试
调试通常会借助一些第三方工具来获得更多的运行时信息。
一个请求执行了多少句SQL?花了多长时间?
调用的哪个模板?客户端设置了什么COOKIE?SESSION呢?。。。
你可以使用django-debug-toolbar查看上面甚至更多的信息
另一个工具是Werkzeug debugger,它可以在错误页面打开python shell,让你更方便的跟踪错误信息
还有pdb,一个强大的调试工具:http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/
9,了解pinax备用
django最大的优点是代码重用,DRY,pinax就是这样一个平台,包含了许多可拿来直接使用的代码,比如openid,电子邮件验证等等。请访问:http://pinaxproject.com/
10,了解一些有用的第三方应用
1)数据库升级工具
什么是数据库升级工具?你运行了syncdb,运行了一年之后,对模型做了更改,添加了字段,删除了字段,要再运行syncdb吗?或者ALTER TABLE ...?
django-evolutions可以帮你完成上面的事情,但它好像不够强壮:http://code.google.com/p/django-evolution/
South能很强壮地完成上面的事情,但是需要学学怎么用:http://south.aeracode.org/
2)模板系统
django自带的模板系统是可以替换的,并且各自有优缺点。
template-utils增强了模板的比较标签等功能 ,并提供其他的一些实用特性
Jinja是一个完整的第三方模板系统,可以替换默认模板系统,它提供了许多优越的特性
3)第三方应用
django command extensions提供了很多实用的命令行功能:
shell_plus加载所有django模型
runserver_plus整合了Werkzeug调试工具
生成模型图表,你可以展示给你的老板
…… 

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート