ビュー層の
白は、三つの軸になる
のHttpResponse
レンダリング
リダイレクト
戻り値を持っている必要がありますビュー機能を、そして値のデータ型でなければなりません返したHttpResponseオブジェクト
JsonResponse
分離の終了前後の
「」 '
どのように相互作用する前と後のデータの終わり?
通常、JSON文字列の末尾データの前に、使用する相互作用の場合後(辞書)
バックエンドの必要性は、このインタフェースにアクセスするためのURLあなたを適切なフロントエンドインターフェイスを書く
だけ+開発ドキュメントに大きな辞書を返す必要が
フロントエンドエンジニアを伝えるために使用しますあなたがデータを返すことができ、このインターフェイス
「」 '
フロント及び抗シーケンス法である配列の後端
後JSパイソン
json.dumps JSON.stringify
json.loads
JSON.parse
インデックスDEF(要求):
user_dic = { '名前': '私は大好きジェイソン・グッドShuaio〜'、 'パスワード': '123'}
自動的にないJSONを取得中国のトランスコーディングにあなたを助けるためにどのように#
#json_str = JSON。ダンプ(user_dic、ensure_ascii =偽)
#戻りのHttpResponse(json_str)
#リターンjsonResponse(user_dic、json_dumps_params = { 'ensure_ascii':FALSE})
L = [1,2,3,4,5,6,7、]
#jsonResponseデフォルトあなたが辞書の安全な使用のパラメータのシーケンスを追加する必要があります(JSONのシリアライズモジュール缶)他のデータ型の列をしたい場合は
、戻りjsonResponse(安全な= FalseのL、)
FBVの
基本的な機能の眺め
CBVの
クラスベースのビュー
django.viewsインポートビューから
MyLoginクラス(ビュー):
DEF(自己、requset)を取得:
印刷( '私はgetメソッドの内部MyLogin午前')
レンダリング(requset、 'login.htmlと')を返します
def post(self,requset):
print('我是MyLogin里面的post方法')
return HttpResponse('post')
CBVと少し異なっを書くのルーティングを注意してください
URL(R '^インデックス/'、views.index)、
CBV文言
URL(R '^インデックス/'、views.MyLogin.as_view())
CBVデコレータを追加する
django.utils.decoratorsインポートmethod_decoratorから
# 2.可以指定给谁装
# @method_decorator(outter,name='post')
# @method_decorator(outter,name='dispatch')
class MyLogin(View):
@method_decorator(outter)
def dispatch(self, request, *args, **kwargs): # 如果你想在视图函数执行之前 做一些操作 你可以在你的CBV中定义dispatch方法来拦截
return super().dispatch(request,*args,**kwargs)
# @outter # 1.直接写
# @method_decorator(outter) # 1.推荐写法
def get(self,request):
print('我是MyLogin里面的get方法')
return render(request,'login.html')
# @outter
def post(self,request):
print('我是MyLogin里面的post方法')
time.sleep(1)
return HttpResponse('post')
テンプレート層の
テンプレート構文
のみ2個の書き込みフォーマット
{} {}:関連の変数
、カラムとして{%}%論理的に関連し、:、、もし
テンプレート伝統的な値は、
データ型に渡すことができ
機能:
伝達関数名:テンプレートの構文は自動的にテンプレートの構文に基づいてショーとして括弧と関数の戻り値で関数を呼び出しますとき、HTMLページに渡さ{{index1の}}関数名は、HTMLを渡す手段を渡すパラメータ機能をサポートしていません。ページには、唯一の機能パラメータを渡す必要はありません呼び出すことができます
フィルタ
文法構造の
テンプレート構文もを提供します、いくつかのビルトイン(のみ最大2つのパラメータに)あなたが迅速にデータを処理するのに役立つ方法
フロントとリアエンドアンエスケープ
フロント
|安全な
バックエンド
のインポートmark_safe django.utils.safestringから
SSS2を= "
マイH2タグ
「RES = mark_safe(SSS2)
フィルタのテンプレートの構文は自動的に|最初の引数の左側にあるフィルタなどのデータ:2番目のパラメータとして右
{
統計長(そうでない場合は、デフォルトのリターン・カウント0):{{S |長さ}}
}{
加算器(内部例外捕捉支援デジタル添加が戻りを空の文字列連結を満たしていない):{{N |追加:Fを}}
}{
スライシングもかかわらず、テールケアをサポート手順:{{1 |スライス:0:5:2 '}}
}{
(値そのものを示す値がデフォルト値を表示する値を持たない)値かどうかを決定する:{{is_value |デフォルト:「is_valueポイント変数名が空です」}}
}{
ファイルのサイズを自動的にフォーマットに変換:{{FILE_SIZE | filesizeformat}}
}{
3点が5つの文字に考えることができる取ら取らテキスト(文字):{{S | truncatechars:8}}
}{
{| truncatewords {S1:5}}(スペースに応じて計算された)採取テキストコンテンツは5点三つの言葉を取っていません
}デフォルトでは、自動的にあなたが悪意のある攻撃を防ぐために、フロントエンドのHTMLタグを変換する手助けされていません
{<p>展示带有标签的文本:{{ sss|safe }}</p>}
{<p>展示带有标签的文本:{{ sss1|safe }}</p>}
もしための併用
Lでfooの{%}%
{%}%forloop.first IF
これが私の最初の時間です
{%のelif forloop.last%}
これは、ああ、最後の時間です
{%他%}
{{FOO}}
{%ENDIF%}
{%空%}
それは行くだろうと、ループのためのオブジェクトが空の場合
{%ENDFOR%}
値テンプレートの構文は、均一な塗布期間を破る唯一の方法であります
{{}} comp_dic.hobby.2.2.age
カスタムフィルタとラベルは、
最初の準備をするための3つのステップを持っている必要があります。
アプリケーションの名前でtemplatetagsと呼ばれるように、新しいファイル名を作成するために、
フォルダ内のPyファイルは、任意の名前を作成します
次の2つのPYファイルにコードを記述する必要があります
django.templateインポートライブラリから
レジスタ=ライブラリ()
その後は、レジスタカスタマイズフィルタやラベルを使用することができます
使用カスタムフィルタは、
{%負荷%}によってhtmlページのファイル名にロードする必要があります
デフォルトのフィルタのようなカスタムフィルタは、最大2つの引数を取ることができます
@ register.filter(名= '赤ちゃん )# 以前PYで作成したファイルに登録した方法により行わ.filter
DEF指数(A、B):
リターンA + B
フロント:
{% load 文件名 %}
{{1|baby:1}
# 若想传入多个参数的话只能以字符串的形式传入
{{1|baby:’1|2|3|4‘}} # 在通过字符串的切割就能取出多个
カスタムラベル
カスタムタグは、任意の数のパラメータを受け入れること
@ register.simple_tag(名= 'mytagという')
デフmytagという(、B、C、D):
リターン'???%S%S%S%S' %(、B、C、D)
フロント:
{% load 文件名 %}
{% mytag 'a','b','c','d' %}
注:カスタムフィルタは、論理的な文で使用することができ、タグはできません
カスタムinclusion_tag
カスタムinclusion_tag
「」 "
引数はhtmlページ渡され、その後に渡さ受け入れることができ、外の世界の関数である
データ取得後にページのレンダリングが完了し
、コールinclusion_tagに良い場所にページをレンダリングします
"" "
Register.inclusion_tag( 'mytag.html'、NAME = 'XXX')@
DEF index666(N):
L = []
:レンジ(N)におけるIため
l.append( '%sの項目の' %のI )
地元の人々についてのリターン()#1はページmytag.htmlに直接渡さ
内のデータを取得mytag.htmlレンダリング:
{% for foo in l %}
<li>{{foo}}<li>
{%endfor%}
text.htmlは、レンダリングされたページに示されています:
値によってロードmytagという%%} {
{{XXX}} 10
継承テンプレート
あなたはあなたがあなたの指定した領域の使用することができたときに、継承を使用することをページ上の線引き面積を進めるために必要な後に
あなたがいない場合という手段をその後、あなたはページのコンテンツを変更することはできません任意の領域を指定
あなたが最初にあなたが継承させたいページでbolck可能な将来の変化によって地域を画定
ラインは、サブページの連続に延びて
自動的にコンテンツを変更したいエリアを選択するように要求ブロックを使用して
{%}は%コンテンツブロックは
「」 '
内部でHTML指定エリア
'' '
{%}%の末端ブロック
別のHTMLファイルに:
#ページ継承{% 'はhome.html' %を拡張します}
{%ブロック含量%は}
コンテンツ領域にテンプレートコンテンツを変更
{%エンドブロック%}
テンプレートの詳細ブロック領域、ページの強い展開
私はあなたがテンプレートページに少なくとも三つの領域を持ってお勧め:
css区域
html代码区域 可以设置多个block
js区域
これらの三つの領域は、各ページには独自の個別のCSSやJSのコードを持って実施することができるであろう
{% 'はhome.html' %延び}
CSSスタイル:
{% block css %}
<style>
p {
color: green;
}
</style>
ページコンテンツ
{%の末端ブロック%}
{%ブロック含量%}
ログインページ
{%エンドブロック%}
JSスクリプト
{%ブロックJS%}
{%の末端ブロック%}
また、サブページに親ページの内容を継続して使用することができます
{{ block.super }}
テンプレートをインポートすると、
直接使用にモジュールとしてページをhtnlます
使用するHTMLページをインポート
{% 'はbform.html' %含みます}