Django 開発経験を記録する

WBOY
リリース: 2016-06-16 08:43:15
オリジナル
1621 人が閲覧しました

概念的レベル

概要

Django は MVC に属する Web フレームワークです。

モデル: データベースの処理を担当します

ビュー: モデルから取得したデータの取得または拡張を担当します

コントローラー: これは Django 自体です

プロジェクトとアプリの違い

プロジェクト: さまざまな設定ファイルを提供します アプリ: モデルやビューを含む関数の組み合わせは、Python が認識できるように「__init__.py」をルート ディレクトリに追加する必要があります

ManyToMany とForeignKey の違い

外部キーの例:

従業員の出勤記録 - 従業員は複数の出勤記録を持つことができますが、1 つのパンチイン レコードは 1 つの従業員属性 (1 対多) のみを持つことができます

ManyToMany の例:

記事には複数のタグを付けることができ、タグに対応する記事も複数 (多対多) にすることができます

ManyToMany にも特別な構造があり、Twitter のフォローによく似ています。

A は B に従うが、B は A に従わないとします。この関係を実現するには、Meta

で symetric=False を設定します。

セクシーコード

これが私が理解して「めちゃくちゃセクシー」だと思うコードです:

lambda x, y: x+y 
ログイン後にコピー

Lambda は実際には JS の匿名関数と同じ効果があります。名前を付けるのが面倒であればそのまま放り込んでください。Lambda はデフォルトで内部の値を返すため、return する必要はありません。

map(lambda x: x+1, [1,2,3]) #得到[2,3,4] 
ログイン後にコピー

つまり、前の関数はそれぞれ 1 回実行されます

reduce(lambda x, y: x+y, [1,2,3]) #得到6 
ログイン後にコピー

つまり、各操作は前の要素で 1 回実行されます

[i for i in xrange(0,100) if i%2==0] 
ログイン後にコピー

100 未満の偶数をすべて取得します。これは学術用語では「リスト理解」と呼ばれますが、実際のケースでは、トラバースのための優れたツールです。

Q(**{key:value}) 
ログイン後にコピー

トレーニング中に学んだことは、2 つの Django 関数 Q と F は文字列を受け入れない、つまり Q("abc=1") は受け入れられないということです。しかし、このコードの魅力的な点は、この制約が完全に取り除かれ (実際、キーワードのペアが書き換えられる)、好みのクエリ セグメントを自由に構築できることです。これは、検索関数を構築するときに非常に役立ちます。例:

q_dict = reduce(lambda x,y: x&y, [ Q(**{"%s__slug_name" % taxonomy:request.GET.get(taxonomy)}
    ) for taxonomy in request.GET.keys() if taxonomy in SEARCHABLE_LIST ])
@property 
ログイン後にコピー

この @ 記号の使い方を「修飾子」と呼びますが、個人的にはここが他の言語に比べて Python の美しいところだと感じています。修飾子の作り方についてはドキュメントを読むのが良いでしょう。ここで私が言っているのは、クラスで @property を使用すると、この関数は自動的にクラスのプロパティになるということです。これは、js の set と get
に非常に似ています。 super super クラスを使用すると、super が出現すると、継承されたサブクラスは独自の関数を実行するのではなく、super
で指定された関数を実行します。 注釈を付けて集計します。これら 2 人は、新しい query_set を構築するときに非常に役立ちます。たとえば、コンピュータの合計価格を計算したい場合は、ComputerManager で

を使用します。
def get_query_set(self):
query_set = super(ComputerManager, self).get_query_set()
query_set = query_set.annotate(price=Sum('devices__price'))
ログイン後にコピー

このように、各コンピューターには合計価格が設定されています。これは製品セットを構築するときに非常に便利ですが、admin.py の記述は少し冗長です。

エラーセット

データをフェッチするとき: XXManager オブジェクトは反復可能ではありません

これは、Django がコードの実行中に SQL ステートメントを取得してクエリを実行しないためです (したがって、SQL ステートメントを取得することは不可能です)。したがって、実際のデータ エンティティを取得するには、.get()、.all()、.filter を使用する必要があります

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