Python Djangoフレームワーク
12940 ワード
1、Django概要
Pythonの下には複数の異なるWebフレームワークがあり、Djangoは最も代表的なものです.多くの成功したウェブサイトとアプリはDjangoに基づいています.
DjangoはオープンソースのWebアプリケーションフレームワークで、Pythonによって書かれています.
DjangoはMVCのソフトウェア設計モード、すなわちモデルM、ビューV、コントローラCを採用している.
2、Djangoの特徴
1)強力なデータベース機能:pythonのクラスで継承し、数行のコードで動的なデータベース操作APIを持つことができ、必要に応じてSQL文を実行することもできる.
2)強力なバックグラウンド機能:数行のコードで、Webサイトに強力なバックグラウンドを持たせ、コンテンツを簡単に管理できます.
3)優雅なウェブサイト:正規マッチングウェブサイトを用いて,対応関数に渡す.
4)テンプレートシステム:強大で、拡張しやすいテンプレートシステム、設計が簡単で、コードとスタイルが別々に設計され、管理しやすい.
5)キャッシュシステム:memcachedまたは他のキャッシュシステムと連携し、より優れたパフォーマンスを発揮し、ロード速度がより速い.
6)国際化:多言語アプリケーションを完全にサポートし、翻訳の文字を定義し、異なる国の言語に簡単に翻訳することができます.
3、Djangoプロジェクトディレクトリ
1) urls.py:ウェブサイトの入り口、対応するviewsに関連します.pyの関数(またはgenericクラス)で、Webサイトにアクセスすると関数に対応します.
2) views.py:urlsとユーザーからのリクエストを処理します.pyに対応してtemplatesのWebページをレンダリングすることで、ログイン後のユーザー名、ユーザーが要求したデータなど、表示内容をWebページに出力することができます.
3) models.py:データベース操作に関連して、データの格納や読み出しに使用します.データベースが使用されない場合は使用しません.
4) forms.py:フォーム、ユーザーがブラウザにデータの提出を入力したり、データの検証作業や入力ボックスの生成などの作業をしたりしても、使用しなくてもいいです.
5)templatesフォルダ:views.pyの関数はtemplatesのhtmlテンプレートをレンダリングし、ダイナミックなコンテンツのページを得て、キャッシュで速度を高めることができます.
6) admin.py:バックグラウンドでは、少ないコードで強力なバックグラウンドを持つことができます.
7) settings.py:Djangoのプロファイル、例えばDEBUGのスイッチ、静的ファイルの位置など.
4、Django基本コマンド
1)新規プロジェクト: django-admin.py startproject project-name
Windowsでエラーが発生した場合、django-adminの代わりにdjango-adminを使用してみます.py .
2)新しいアプリを作成する: python manage.py startapp app-name
または django-admin.py startapp app-name
一般的に1つのプロジェクトに複数のappがありますが、もちろん共通のappも複数のプロジェクトで使用できます.
3)サーバーの起動: python manage.py runserver 0.0.0.0:8000
または python manage.py runserver
前者は他のコンピュータをサーバに接続することができ、マシン上のすべてのipの8000ポートを傍受し、アクセス時に127.0の代わりにコンピュータのipを使用する.0.1(8000はポート番号、説明しない場合はポート番号はデフォルト8000).後者はパソコンでサーバにアクセスし、ipは127.0.0.1にアクセスします.
5、ビューとウェブサイト
views.py:
urls.py:
サーバを起動し、ブラウザへのアクセス:127.0.0.1:8000.
修正後のurls.py:
サーバを起動し、ブラウザへのアクセス:127.0.0.1:8000/helloWorld.
url()関数:2つの必須パラメータregex、view、および2つのオプションパラメータkwargs、nameの4つのパラメータを受信できます.
①regex:正規表現で、それに一致するURLが対応する2番目のパラメータviewを実行します.
②view:正規表現に一致するURL要求を実行するために使用します.
③kwargs:ビューで使用する辞書タイプのパラメータ.
④name:URLを逆取得するために使用します.
6、Djangoテンプレート
1)例:
①appディレクトリでtemplatesディレクトリを作成しhelloWorldを作成する.htmlファイル: {{ helloWorld }}
②Djangoにテンプレートファイルのパスを説明し、settingsを修正する.pyファイル、TEMPLATESのDIRSを[BASE_DIR+"/templates",]に変更します.
③viewsを修正する.py:
renderはパラメータとして辞書contextを使用し、context辞書の要素のキー値「helloWorld」はテンプレートの変数「{helloWorld}」に対応します.
④サーバーを起動し、ブラウザでアクセスする:127.0.0.1:8000/helloWorld.
2)Djangoテンプレートラベル
①if/elseラベル
if/elseはネストをサポートし、{%if%}ラベルはand、orまたはnotキーワードを受け入れて複数の変数を判断したり、変数を逆にしたりします. {% if condition %} ... {% endif %}
または、 {% if condition1 %} ... {% elif condiiton2 %} ... {% else %} ... {% endif %}
②forタグ
{%for%}は、1つのシーケンスで反復できます.ネストをサポートします.各サイクルでは、テンプレートシステムは{%for%}と{%endfor%}の間のすべてのコンテンツをレンダリングします. {% for person in list %} {{ person.name }} {% endfor %}
ラベルにreversedを追加して、リストを逆反復します. {% for person in list %} ... {% endfor %}
③ifequal/ifnotequalラベル
{%ifequal%}ラベルは2つの値を比較し、それらが等しい場合、{%ifequal%}と{%endifequal%}のすべての値を表示します.{%if%}と同様に、{%ifequal%}はオプションの{%else%}ラベルをサポートします. {% ifequal person1 person2 %} YES {% endifequal %}
④コメントラベル
Djangoコメントは{##}を使用します.
⑤フィルター
テンプレートフィルタは、変数が表示される前に変更できます.フィルタはパイプ文字を使用します.
大文字を小文字に変換します.
フィルタパイプの出力は、次のパイプの入力としても使用できます.
{{name|first|upper}}最初の要素を大文字に変換します.
一部のフィルタにはパラメータがあり、フィルタのパラメータはコロンの後に続いて常に二重引用符で囲まれています.
{{name|truncatewords:"3"}}変数の上位3語を表示します.
addslashes:任意の反スラッシュ、単一引用符、または二重引用符の前に反スラッシュを追加します.
date:指定したフォーマット文字列パラメータでdateオブジェクトまたはdatetimeオブジェクトをフォーマットします.たとえば、{{pub_date|date:"Fj,Y"}}などです.
length:変数の長さを返します.
⑥includeラベル
{%include%}ラベルを使用すると、テンプレートに他のテンプレートの内容を含めることができます.
{% include "test.html" %}
7、Djangoモデル
Djangoは様々なデータベースに良いサポートを提供し、Djangoはデータベースに統一的な呼び出しAPIを提供し、ビジネスニーズに応じて異なるデータベースを選択することができます.
MYSQLデータベースを例に、mysqlドライバのコマンド:sudo pip install mysqlclientをインストールします.
1)データベース構成
プロジェクトのsettings.pyファイルにDATABASES設定項目が見つかり、その情報を次のように変更します.
ここに中国語の注釈が追加されているのでsettings.pyファイルヘッダに#-*-coding:UTF-8-*-.
2)モデルの定義
①アプリの作成:
Djangoは、モデルを使用する場合はappを作成する必要があり、以下のコマンドを使用してapp:python manageを作成することを規定しています.py startapp TestModel.
②TestModel/modelsを修正する.pyファイル:
クラス名はデータベーステーブル名を表し、modelsを継承する.Model、クラス内のフィールドはデータテーブルのフィールド(name)を表し、データ型はCharField(varcharに相当)、DateField(datetimeに相当)、max_lengthパラメータによって長さを制限する.
③settings.pyでINSTALLED_を見つけるAPPSという項目は、「TestModel」を追加します.
④コマンドラインで以下のコマンドを実行し、データテーブルを作成します.テーブル名はアプリケーション名_クラス名(例:TestModel_test):
view plain copy
3)データベース操作
databaseを追加する.pyファイル:
[python] view plain copy
urlsを変更します.py:
view plain copy
サーバを起動し、ブラウザへのアクセス:127.0.0.1:8000/database.
①データの追加
[python] view plain copy
②データ取得
[python] view plain copy
③データの更新
[python] view plain copy
④データの削除
データベース内のオブジェクトを削除するには、オブジェクトのdelete()メソッドを呼び出すだけです.
[python] view plain copy
8、Djangoフォーム
1)Getメソッド
①searchを作成する.pyファイル、ユーザーのリクエストを受信するために使用されます.
[python] view plain copy
②templatesにsearch_を追加するform.htmlフォーム:
[html] view plain copy
Pythonの下には複数の異なるWebフレームワークがあり、Djangoは最も代表的なものです.多くの成功したウェブサイトとアプリはDjangoに基づいています.
DjangoはオープンソースのWebアプリケーションフレームワークで、Pythonによって書かれています.
DjangoはMVCのソフトウェア設計モード、すなわちモデルM、ビューV、コントローラCを採用している.
2、Djangoの特徴
1)強力なデータベース機能:pythonのクラスで継承し、数行のコードで動的なデータベース操作APIを持つことができ、必要に応じてSQL文を実行することもできる.
2)強力なバックグラウンド機能:数行のコードで、Webサイトに強力なバックグラウンドを持たせ、コンテンツを簡単に管理できます.
3)優雅なウェブサイト:正規マッチングウェブサイトを用いて,対応関数に渡す.
4)テンプレートシステム:強大で、拡張しやすいテンプレートシステム、設計が簡単で、コードとスタイルが別々に設計され、管理しやすい.
5)キャッシュシステム:memcachedまたは他のキャッシュシステムと連携し、より優れたパフォーマンスを発揮し、ロード速度がより速い.
6)国際化:多言語アプリケーションを完全にサポートし、翻訳の文字を定義し、異なる国の言語に簡単に翻訳することができます.
3、Djangoプロジェクトディレクトリ
1) urls.py:ウェブサイトの入り口、対応するviewsに関連します.pyの関数(またはgenericクラス)で、Webサイトにアクセスすると関数に対応します.
2) views.py:urlsとユーザーからのリクエストを処理します.pyに対応してtemplatesのWebページをレンダリングすることで、ログイン後のユーザー名、ユーザーが要求したデータなど、表示内容をWebページに出力することができます.
3) models.py:データベース操作に関連して、データの格納や読み出しに使用します.データベースが使用されない場合は使用しません.
4) forms.py:フォーム、ユーザーがブラウザにデータの提出を入力したり、データの検証作業や入力ボックスの生成などの作業をしたりしても、使用しなくてもいいです.
5)templatesフォルダ:views.pyの関数はtemplatesのhtmlテンプレートをレンダリングし、ダイナミックなコンテンツのページを得て、キャッシュで速度を高めることができます.
6) admin.py:バックグラウンドでは、少ないコードで強力なバックグラウンドを持つことができます.
7) settings.py:Djangoのプロファイル、例えばDEBUGのスイッチ、静的ファイルの位置など.
4、Django基本コマンド
1)新規プロジェクト:
Windowsでエラーが発生した場合、django-adminの代わりにdjango-adminを使用してみます.py .
2)新しいアプリを作成する:
または
一般的に1つのプロジェクトに複数のappがありますが、もちろん共通のappも複数のプロジェクトで使用できます.
3)サーバーの起動:
または
前者は他のコンピュータをサーバに接続することができ、マシン上のすべてのipの8000ポートを傍受し、アクセス時に127.0の代わりにコンピュータのipを使用する.0.1(8000はポート番号、説明しない場合はポート番号はデフォルト8000).後者はパソコンでサーバにアクセスし、ipは127.0.0.1にアクセスします.
5、ビューとウェブサイト
views.py:
from django.http import HttpResponse
def helloWorld(request):
return HttpResponse("Hello world! ")
urls.py:
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^$', view.helloWorld)
]
サーバを起動し、ブラウザへのアクセス:127.0.0.1:8000.
修正後のurls.py:
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^helloWorld$', view.helloWorld)
]
サーバを起動し、ブラウザへのアクセス:127.0.0.1:8000/helloWorld.
url()関数:2つの必須パラメータregex、view、および2つのオプションパラメータkwargs、nameの4つのパラメータを受信できます.
①regex:正規表現で、それに一致するURLが対応する2番目のパラメータviewを実行します.
②view:正規表現に一致するURL要求を実行するために使用します.
③kwargs:ビューで使用する辞書タイプのパラメータ.
④name:URLを逆取得するために使用します.
6、Djangoテンプレート
1)例:
①appディレクトリでtemplatesディレクトリを作成しhelloWorldを作成する.htmlファイル:
②Djangoにテンプレートファイルのパスを説明し、settingsを修正する.pyファイル、TEMPLATESのDIRSを[BASE_DIR+"/templates",]に変更します.
③viewsを修正する.py:
from django.shortcuts import render
def hello(request):
context = {}
context['helloWorld'] = 'Hello World!'
return render(request, 'helloWorld.html', context)
renderはパラメータとして辞書contextを使用し、context辞書の要素のキー値「helloWorld」はテンプレートの変数「{helloWorld}」に対応します.
④サーバーを起動し、ブラウザでアクセスする:127.0.0.1:8000/helloWorld.
2)Djangoテンプレートラベル
①if/elseラベル
if/elseはネストをサポートし、{%if%}ラベルはand、orまたはnotキーワードを受け入れて複数の変数を判断したり、変数を逆にしたりします.
または、
②forタグ
{%for%}は、1つのシーケンスで反復できます.ネストをサポートします.各サイクルでは、テンプレートシステムは{%for%}と{%endfor%}の間のすべてのコンテンツをレンダリングします.
ラベルにreversedを追加して、リストを逆反復します.
③ifequal/ifnotequalラベル
{%ifequal%}ラベルは2つの値を比較し、それらが等しい場合、{%ifequal%}と{%endifequal%}のすべての値を表示します.{%if%}と同様に、{%ifequal%}はオプションの{%else%}ラベルをサポートします.
④コメントラベル
Djangoコメントは{##}を使用します.
⑤フィルター
テンプレートフィルタは、変数が表示される前に変更できます.フィルタはパイプ文字を使用します.
大文字を小文字に変換します.
フィルタパイプの出力は、次のパイプの入力としても使用できます.
{{name|first|upper}}最初の要素を大文字に変換します.
一部のフィルタにはパラメータがあり、フィルタのパラメータはコロンの後に続いて常に二重引用符で囲まれています.
{{name|truncatewords:"3"}}変数の上位3語を表示します.
addslashes:任意の反スラッシュ、単一引用符、または二重引用符の前に反スラッシュを追加します.
date:指定したフォーマット文字列パラメータでdateオブジェクトまたはdatetimeオブジェクトをフォーマットします.たとえば、{{pub_date|date:"Fj,Y"}}などです.
length:変数の長さを返します.
⑥includeラベル
{%include%}ラベルを使用すると、テンプレートに他のテンプレートの内容を含めることができます.
7、Djangoモデル
Djangoは様々なデータベースに良いサポートを提供し、Djangoはデータベースに統一的な呼び出しAPIを提供し、ビジネスニーズに応じて異なるデータベースを選択することができます.
MYSQLデータベースを例に、mysqlドライバのコマンド:sudo pip install mysqlclientをインストールします.
1)データベース構成
プロジェクトのsettings.pyファイルにDATABASES設定項目が見つかり、その情報を次のように変更します.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # mysql.connector.django
'NAME': 'test',
'USER': 'test',
'PASSWORD': 'test123',
'HOST':'localhost',
'PORT':'3306',
}
}
ここに中国語の注釈が追加されているのでsettings.pyファイルヘッダに#-*-coding:UTF-8-*-.
2)モデルの定義
①アプリの作成:
Djangoは、モデルを使用する場合はappを作成する必要があり、以下のコマンドを使用してapp:python manageを作成することを規定しています.py startapp TestModel.
②TestModel/modelsを修正する.pyファイル:
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
クラス名はデータベーステーブル名を表し、modelsを継承する.Model、クラス内のフィールドはデータテーブルのフィールド(name)を表し、データ型はCharField(varcharに相当)、DateField(datetimeに相当)、max_lengthパラメータによって長さを制限する.
③settings.pyでINSTALLED_を見つけるAPPSという項目は、「TestModel」を追加します.
④コマンドラインで以下のコマンドを実行し、データテーブルを作成します.テーブル名はアプリケーション名_クラス名(例:TestModel_test):
view plain copy
python manage.py migrate #
python manage.py makemigrations TestModel # Django
python manage.py migrate TestModel #
3)データベース操作
databaseを追加する.pyファイル:
[python] view plain copy
from django.http import HttpResponse
from TestModel.models import Test
def database(request):
test = Test(name='Alice')
test.save()
return HttpResponse(" !
")
urlsを変更します.py:
view plain copy
from django.conf.urls import *
from . import view,database
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^database$', database.database)
]
サーバを起動し、ブラウザへのアクセス:127.0.0.1:8000/database.
①データの追加
[python] view plain copy
from django.http import HttpResponse
from TestModel.models import Test
def database(request):
test = Test(name='Alice')
test.save()
return HttpResponse(" !
")
②データ取得
[python] view plain copy
from django.http import HttpResponse
from TestModel.models import Test
def database(request):
#
response = ""
response1 = ""
# objects all() , SQL SELECT * FROM
list = Test.objects.all()
# filter SQL WHERE,
response2 = Test.objects.filter(id=1)
#
response3 = Test.objects.get(id=1)
# , SQL OFFSET 0 LIMIT 2;
Test.objects.order_by('name')[0:2]
#
Test.objects.order_by("id")
#
Test.objects.filter(name="Alice").order_by("id")
#
for var in list:
response1 += var.name + " "
response = response1
return HttpResponse("" + response + "
")
③データの更新
[python] view plain copy
from django.http import HttpResponse
from TestModel.models import Test
def database(request):
# id=1 name save, SQL UPDATE
test = Test.objects.get(id=1)
test.name='Alice'
test.save()
#
# Test.objects.filter(id=1).update(name='Alice)
#
# Test.objects.all()..update(name='Google')
return HttpResponse("
")
④データの削除
データベース内のオブジェクトを削除するには、オブジェクトのdelete()メソッドを呼び出すだけです.
[python] view plain copy
from django.http import HttpResponse
from TestModel.models import Test
def database(request):
# id=1
test = Test.objects.get(id=1)
test.delete()
#
# Test.objects.filter(id=1).delete()
#
# Test.objects.all().delete()
return HttpResponse("
")
8、Djangoフォーム
1)Getメソッド
①searchを作成する.pyファイル、ユーザーのリクエストを受信するために使用されます.
[python] view plain copy
from django.http import HttpResponse
from django.shortcuts import render_to_response
#
def search_form(request):
return render_to_response('search_form.html')
#
def search(request):
request.encoding='utf-8'
if 'q' in request.GET:
message = ' : ' + request.GET['q'].encode('utf-8')
else:
message = ' '
return HttpResponse(message)
②templatesにsearch_を追加するform.htmlフォーム:
[html] view plain copy
<form action="/search" method="get">
<input type="text" name="q"/>
<input type="submit" value=" "/>
</form>
</code></pre>
<p> </p>
<p>③ urls.py:</p>
<p>[python] view plain copy</p>
<pre><code>from django.conf.urls import url
from . import view,database,search
urlpatterns = [
url(r'^helloWorld$', view.helloWorld),
url(r'^database$', database.database),
url(r'^search-form$', search.search_form),
url(r'^search$', search.search)
]
</code></pre>
<p>④ , :127.0.0.1:8000/search_form。</p>
<p>2) Post </p>
<p>① templates post.html :</p>
<p>[python] view plain copy</p>
<pre><code>
<meta charset="utf-8"/>
<title/>
<form action="/search-post" method="post">
{% csrf_token %}
<input type="text" name="q"/>
<input type="submit" value=" "/>
</form>
<p>{{ rlt }}</p>
</code></pre>
<p> </p>
<p>{% csrf_token %} :csrf Cross Site Request Forgery, Django 。POST , 。</p>
<p>② search2.py search_post POST :</p>
<p>[python] view plain copy</p>
<pre><code>from django.shortcuts import render
from django.views.decorators import csrf
# POST
def search_post(request):
ctx ={}
if request.POST:
ctx['rlt'] = request.POST['q']
return render(request, "post.html", ctx)
</code></pre>
<p> </p>
<p>③ urls.py:</p>
<p>[python] view plain copy</p>
<pre><code>from django.conf.urls import url
from . import view,database,search
urlpatterns = [
url(r'^helloWorld$', view.helloWorld),
url(r'^database$', database.database),
url(r'^search-form$', search.search_form),
url(r'^search$', search.search)
url(r'^search-post$', search2.search_post)
]
</code></pre>
<p> </p>
<p> ④ , :127.0.0.1:8000/search_post。</p>
</div>
</div>
</div>
</div>