ホームページ バックエンド開発 Python チュートリアル 初心者がDjangoを学ぶ際に注意すべき10のポイント

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

Oct 17, 2016 pm 02:40 PM

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调试工具
生成模型图表,你可以展示给你的老板
…… 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

See all articles