ジャンゴMTV構造解析

ディレクトリ構造

次のように成熟した構造は、アイテムをジャンゴ:

/project/
|-- project/
    |-- settings.py        # 项目配置
    |-- urls.py            # 项目路由定义
    |-- wsgi.py        # nginx/apache

|-- app/ |-- templates/ |-- app/ |-- base.html # 模板 ... |-- admin.py # 配置模型models在django原生后台的管理 |-- apps.py # 应用级别的配置 |-- forms.py # 表单处理逻辑 |-- managers.py # 模型处理逻辑 |-- models.py # 模型定义 |-- urls.py # 路由设置 |-- views.py # 控制层 |-- tests.py ... |-- other-app/ ... # 另一个应用 |-- static/ |-- app/ |-- other-app/ |-- admin/ 

:Djangoは、一つの大きなウェブ・プロジェクト(プロジェクト)に結合結合APPのうち互いを呼び出すことができる、など(APP)複数のアプリケーションを形成します

from app1.models import SomeModel

すべてのアプリケーションは中settings.INSTALLED_APPSに登録する必要があります。また、あなたは、データベース、タイムゾーン、メールボックス、およびその他の静的ファイルのディレクトリとしてsettings.py公の場でいくつかのパラメータを設定することができます

静的静的ファイルの扱い

Djangoの静的ファイルの場所と同様に、ルートディレクトリの下に統一された管理を容易にアプリケーション名でディレクトリを作成するためには、制限はありません。そのようなウェブサーバapahce / nginxのが容易直接ウェブサーバプロセスに送信パスエイリアス(別名)を設定することができます。
settings.pyではとで設定したSTATIC_URL = '/project/static/'ことにより、テンプレートファイルの順番{% static 'app/xxx.css' %}を呼び出します

ジャンゴネイティブ管理admin.py

Djangoの管理者は、簡単なモデルの追加および削除がadmin.py管理操作を通じて検索を変更することは簡単です、戻ってきます。
ビジネスロジックでは、データのシンプルな構成管理で実現することができるか、非常に複雑な状況ではありません。

Djangoのルーティング制御urls.py

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='home'),
    url(r'^more/$', views.delete, name='more'), ]

そこ異なる方法で定義されたコードの2つの例があると表示機能Viewクラスの
nameurlパラメータは解決テンプレート内の変数名を定義します。{% url 'app:home' %}

Djangoのモデル定義models.py&managers.py

個人的に私は学習がマスタージャンゴのモデルを理解する鍵であると信じています。異なるデータベースを作成するだけでは、過去の経験を持つPHPプロジェクト、データベース構造をDjangoのは、プロジェクトに含まれています。
テーブルと、各フィールドのデータテーブルのテーブル構造(フィールド)との間の定義された関係を含むモデル(ForeignKeyの),,テーブルクエリ(マネージャ)
フィールド、およびマネージャ・サポートカスタム
自動の定義に従って作成したDjangoのモデルデータシート:

# 定义模型
vim models.py
# 生成变更
python manage.py makemigrations 
# 执行变更 python manage.py migrate

モデルのmanagers.py一部、私はこの1つが入って来たモデルは別に定義することができると思います。
これは、2つの主要な機能を提供します。

  • データオブジェクトのデフォルトセットを変更
    models.Managerオーバーライドget_queryset方法を継承し、デフォルトの前処理クエリセット
    class DahlBookManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(author='Roald Dahl')
  • デフォルトのクエリメソッド拡張
    あなたが欲しいものをここで定義された複雑なクエリの個人的な理解を
    class PollManager(models.Manager): def with_counts(self): from django.db import connection with connection.cursor() as cursor: cursor.execute(""" SELECT p.id, p.question, p.poll_date, COUNT(*) FROM polls_opinionpoll p, polls_response r WHERE p.id = r.poll_id GROUP BY p.id, p.question, p.poll_date ORDER BY p.poll_date DESC""") result_list = [] for row in cursor.fetchall(): p = self.model(id=row[0], question=row[1], poll_date=row[2]) p.num_responses = row[3] result_list.append(p) return result_list

ジャンゴロジック制御views.py&froms.py

コントローラ制御層は、MVCに対応します。様々な機能、着信要求からのパラメータ取得要求として定義され、世代レスポンス
Djangoは、このようなパッケージングなど、多くの機能を提供しrenderget_object_or_404取り扱いを容易にします。
また、ベース・ビュー・クラスは、要求を処理するためにも使用することができる、ViewTemplateViewRedirectView
ビューの一部を形成する、私たちが処理て分離することができると思う同じ
リクエストパラメータから論理前処理のこの部分で取得されたビューの主な原因であります

Djangoのビューテンプレートテンプレート

ビュー、定義または継承されたTemplateViewテンプレート名のレンダリングによって開発されたテンプレートを選択して
書き換えることで、異なるページをレンダリングするために、子テンプレートをテンプレートファイルのサポートの継承を<%ブロック%>ブロック:

# base.html
<div>Public block</div> {% block private %}{% endblock private %}
# child.html
{% extends 'base.html' %} {% block private %} <div >private block</div> {% endblock private %}

转载至:https://www.cnblogs.com/dapianzi/p/8177797.html

おすすめ

転載: www.cnblogs.com/summerxye/p/11057835.html