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:
    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ファイル:
  • {{ helloWorld }}  

  •  
    ②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キーワードを受け入れて複数の変数を判断したり、変数を逆にしたりします.
  • {% 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設定項目が見つかり、その情報を次のように変更します.
    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>