Djangoシリーズ:Djangoアプリケーション(アプリ)の作成と設定

ジャンゴシリーズ
Django アプリケーション (アプリ) の作成と構成

著者: Li Juncai (jcLee95) : https://blog.csdn.net/qq_28550263
電子メール : [email protected]
記事アドレス: https://blog.csdn.net/qq_28550263/article/details/132893616


【介绍】:应用是Django项目的组成部分,一个Django项目可以分为多个应用,本文讲解Django应用(app)的创建,并实际完成一个简单应用的配置和开发。

前のセクション: 「Django のプロジェクト構造と構成分析 | 次のセクション: 「Django の高度なルーティング ルール


1。概要

Django アプリケーション (App) は、特定の機能を実装する Django プロジェクトのモジュール式コンポーネントです。通常、Django プロジェクトは複数のアプリケーションで構成され、それぞれが独自の機能と責任を持ちます。前回の記事では、Django におけるアプリケーションとプロジェクトの違いと、コマンド ライン ツールを使用してアプリケーションとプロジェクトを作成する方法を紹介しました。次に、この記事では、Django におけるアプリケーション (アプリ) の関連する使用法を包括的に紹介し、Django プロジェクトに基づいてアプリケーション (アプリ) を作成して完成させます。

2. 最初の Django アプリを作成する

Django プロジェクトのルート ディレクトリを作成し、そのディレクトリに入ったら、次の手順に従って Django アプリケーションを作成し、構成し、簡単なコードを記述して、最後に実行できます。

2.1 Django アプリケーションを作成する

Django プロジェクトのルート ディレクトリ (この場合は myproject) で、次のコマンドを実行して Django アプリケーションを作成します。

python manage.py startapp myapp

これにより、 という名前のアプリケーション ディレクトリが作成されますmyapp。このディレクトリには、Django アプリケーションの基本構造が含まれています。

ここに画像の説明を挿入します

2.2 Django アプリケーションの登録

プロジェクトのルート ディレクトリにあるファイルを開きmyproject/settings.pyINSTALLED_APPS[設定] を見つけます。アプリケーションをこのリストに追加します。

INSTALLED_APPS = [
    # ...
    'myapp',  # 添加该项以注册应用,应用名即使用 startapp 指定的名称
]

これにより、アプリケーションが現在のプロジェクトに存在することが Django フレームワークに通知されます。

2.3 データモデル(モデル)の記述

myappディレクトリ下のmodels.pyファイルにモデルを定義します。以下に例を示します。

from django.db import models

# 创建一个名为 MyModel 的 Django 数据模型类
class MyModel(models.Model):
    # 定义一个名为 name 的字段,类型为 CharField,最大长度为 100 个字符
    name = models.CharField(max_length=100)
    
    # 定义一个名为 description 的字段,类型为 TextField,用于存储文本数据
    description = models.TextField()

    # 定义一个特殊方法 __str__,用于返回对象的字符串表示,通常在管理界面中显示对象时使用
    def __str__(self):
        # 返回对象的 name 属性作为字符串表示
        return self.name

2.4 ビューの作成 (ビュー)

myappディレクトリ内のviews.pyファイルにビュー関数を作成します。簡単な例を次に示します。

from django.http import JsonResponse
from .models import MyModel

# 导入 Django 的 render 函数,用于渲染 HTML 模板
from django.shortcuts import render

def my_view(request):
    # 查询 MyModel 中的所有对象
    my_objects = MyModel.objects.all()

    # 创建一个包含所有对象信息的列表
    data = []
    for obj in my_objects:
        data.append({
    
    
            'name': obj.name,
            'description': obj.description,
        })

    # 返回 JSON 响应
    return JsonResponse(data, safe=False)

2.5 アプリに URL を割り当てる

Django のルーティングは階層化されており、最初にアプリにルートを割り当てる、つまりincluede関数を使用して、指定したアプリケーション配下のファイルをサブアプリケーションのルーティング ファイルとして含めることができます。ただし、これは必要ありません。理論的には、プロジェクトが十分に単純であれば、プロジェクト全体のアプリを作成せずに、プロジェクトのルート ルーティング ファイル (プロジェクト ホーム ディレクトリ内の urls.py ファイル) を直接使用できます。ホーム ディレクトリはプロジェクトのルートを指します。プロジェクトと同じ名前のディレクトリ) はビューを直接割り当てます。これにより、MVC フレームワークにおけるコントローラー (スケジューラー) の作業が実際に完了していることがわかります。

プロジェクトのルート ディレクトリ内のファイルにmyproject/urls.py、アプリケーションの URL をプロジェクトに含めます。

from django.contrib import admin

# 导入 Django 的 URL 路由和包含模块
from django.urls import path, include

# 定义 URL 映射关系列表 urlpatterns
urlpatterns = [
    # 当用户访问 /admin/ 路径时,将请求交给 admin.site.urls 处理
    path('admin/', admin.site.urls),
    
    # 添加这行:当用户访问 /myapp/ 路径时,将请求交给 myapp.urls 模块中定义的 URL 处理
    path('myapp/', include('myapp.urls')),
]

リクエストはpath('myapp/', include('myapp.urls'))myapp という名前のアプリケーションにマップされ、アプリケーションの URL マッピングはmyapp.urls(myapp アプリケーションの下の urls.py) モジュールで定義されます。
このようにして、ユーザーが/myapp/ルートにアクセスすると、myapp.urlsモジュール内の URL 処理を使用してリクエストが処理されます。これにより、アプリケーションは独自のビューと関数を定義し、それらをメイン プロジェクトの URL マッピングに関連付けることができます。

2.6 アプリのビューに URL を割り当てる

myappディレクトリの下に という名前のファイルを作成しurls.py次の内容を追加します。

from django.urls import path
from . import views

# 都将继承app路由 'myapp/'
urlpatterns = [
    # 为# views模块下的视图 my_view 分配路由 'myapp/myview/'
    path('myview/', views.my_view, name='my_view'),  
]

urlpatterns リストで複数のルート割り当てを指定して、views.pyのさまざまなビュー関数またはビュー メソッドにルートを割り当てることができます。

2.7 データベーステーブルの作成(移行)

次のコマンドを実行してデータベース テーブルを作成します。

python manage.py makemigrations # 创建数据库模型的迁移文件
python manage.py migrate # 应用数据库迁移

これにより、モデルで定義されている内容に基づいてデータベース テーブルが作成されます。

ここに画像の説明を挿入します
デフォルトでは、他のデータベースをインストールする必要はありません。SQLite データベース ファイルが自動的に生成されます。SQLite データベースは、モバイル デバイスやアプリケーションの埋め込みによく使用される軽量のデータベースです。デフォルトでは、生成後にプロジェクトのルート ディレクトリに保存されます。

ここに画像の説明を挿入します

ここでは SQLiteSpy ソフトウェアを使用して開きます。

ここに画像の説明を挿入します
現在のアプリに対応するテーブルが表示されますmyapp_mymodelその中にはmyapp、現在のデータ モデルに対応する現在のアプリケーション名が含まれておりmymodel、小文字で表現され、アプリケーションとはアンダースコアで区切られています。Django アプリケーション (アプリ) で複数のデータ モデル クラスを定義した場合、移行の実行後には、同様の名前を持つ対応するデータ テーブルも生成されます。

データ モデルが使用されていない場合、データ移行中にデータ移行ファイルは生成されず、それに応じて後続のアプリケーション データの移行も行われないことに注意してください。たとえば、ビュー関数が次のように変更されたとします。

from django.http import HttpResponse
def my_view(request):
   return HttpResponse("Hello, Django!")

これはデータ モデルをまったく使用せず、機能することもありますが、データ移行は実行されず、対応するデータベースに関連テーブルは作成されません。

Django に限らず、多くの同様のフレームワークは、実行時に同様のコマンドまたはプログラミング インターフェイスを提供します。で:

1.makemigrationsコマンド

makemigrations コマンドは、データベース モデルの移行ファイルを作成するために使用されます。移行ファイルには、データベース モデルを変更する方法に関する指示が含まれています。

Django がデータベース モデル (モデル) への変更を検出しない場合は、移行ファイルを作成するコマンドを実行した後、「変更は検出されませんでした」と表示されます。

No changes detected

2.移行コマンド

移行コマンドは、データベース移行を適用してデータベース スキーマをアプリケーションのモデルと同期するために使用されます。

移行コマンドを実行すると、Django はすべての移行ファイルを調べ、それらのファイル内の指示を使用して、モデル定義と一致するようにデータベース テーブルを作成、変更、または削除します。

移行コマンドは、最も古い移行から開始して移行ファイルを順番に実行し、データベースが現在のアプリケーションの状態と一貫性を保つように変更を段階的に適用します。

2.8 ブラウザでアプリケーションにアクセスする

これで、Django の開発サーバーを実行してアプリケーションを表示できるようになりました。

python manage.py runserver

http://localhost:8000/myapp/myview/ブラウザで「Hello, Django!」を確認するには、アクセスしてください。これは、単純な Django アプリケーションを作成して実行するための基本プロセスです。このアプリケーションは、ニーズに合わせて拡張およびカスタマイズできます。

ここに画像の説明を挿入します

JsonResponseの使用により、最新のブラウザでは JSON の美しい出力のオプションが自動的に提供されます。ただし、ここにはデータがないため、表示されるのは「[]」です。

後で管理画面に手動でデータを追加して効果を確認することもできますが、ここでは 2 つの方法でデータを挿入します。1 つは Django Shell を使用し、もう 1 つは SQL 言語を使用します。SQL 言語を使用している場合は、SQLite データベースを開くことができる小さなソフトウェアが必要です (他のデータベースを使用している場合は、対応するソフトウェアまたは Sell ツールを使用することもできます)/

Django シェルを使用してデータを挿入する

テーブルはデータ モデルMyModelを通じて作成されるため、次の手順でデータを挿入できます。

  1. プロジェクトのルート ディレクトリで次のコマンドを実行して、Django シェルを開きます。
python manage.py shell
  1. モデルクラスをインポートしますMyModel
from myapp.models import MyModel
  1. 新しいデータ レコードを作成して保存します。モデル クラスのcreateメソッドを使用することも、モデル クラスを直接インスタンス化してsaveメソッドを呼び出すこともできます。サンプルコードは次のとおりです。
# 使用 create 方法创建新记录
MyModel.objects.create(name="记录1", description="这是记录1的描述")
MyModel.objects.create(name="记录2", description="这是记录2的描述")

# 或者直接实例化模型类并保存
record3 = MyModel(name="记录3", description="这是记录3的描述")
record3.save()
  1. Django シェルを終了します。
exit()

図に示すように:
ここに画像の説明を挿入します

MyModelこれで、図に示すように、いくつかのデータをテーブルに手動で挿入しました。

ここに画像の説明を挿入します

必要に応じてデータ レコードをさらに追加できます。このデータはデータベースに保存され、アプリケーションでクエリしたり使用したりできます。
次に、開発サーバーを再実行します。

python manage.py runserver

ブラウザを再度開いてページに入りますhttp://127.0.0.1:8000/myapp/myview/。表示された結果が空の配列ではなくなっていることがわかります。

ここに画像の説明を挿入します
ちょっと意外でコードが文字化けしているような感じでしょうか?——実際にはそうではなく、通常の中国語がエンコードされているだけです。

これは、http://127.0.0.1:8000/myapp/myview/ にアクセスすると、view 関数が JSON 形式で応答を返します。これは、view 関数で使用されJsonResponse、モデル データを含む JSON データを返すためです。JSON データの表示モードはデフォルトで、Unicode エンコードでレンダリングされます。これが、ブラウザに Unicode エスケープ文字が表示される理由です。

ブラウザで JSON データをより読みやすい方法で表示したい場合は、ブラウザ拡張機能を追加するか、オンライン JSON ビューアを使用できます。これらのツールは、JSON データをより読みやすい形式にフォーマットして表示できます。

このメソッドは初期化データまたはテスト データの挿入にのみ適用されることに注意してください。実際の運用環境では、通常、データはユーザー インターフェイスまたはその他の手段を通じて動的に追加されます。

SQL を使用してデータを直接挿入する

また、SQL ステートメントを直接入力して、MySQL Workbench、pgAdmin (PostgreSQL 用)、SQLite の SQLiteSqy などのデータベース管理ツールを通じてデータを挿入することもできます。たとえば、次は SQLiteSqy にデータを挿入します。

ここに画像の説明を挿入します
最も重要な文は次のとおりです。

INSERT INTO myapp_mymodel (name, description)
VALUES
  ('记录1', '这是记录1的描述'),
  ('记录2', '这是记录2的描述'),
  ('记录3', '这是记录3的描述');

3. アプリでテンプレートを使用する

アプリ ディレクトリに template という名前のフォルダーを作成し、HTML テンプレート ファイルを保存します。例として、ここではディレクトリ内にmy_template.htmlという名前の HTML ファイルを作成し、そのテキスト コンテンツを次のように編集します。

<!-- my_template.html -->

<!DOCTYPE html>
<html>
<head>
    <title>我的模板</title>
</head>
<body>
    <h1>欢迎来到{
   
   { site_name }}网站</h1>
    <p>今天是{
   
   { current_date }}</p>
    
    <ul>
        {% for item in items %}
            <li>{
   
   { item }}</li>
        {% endfor %}
    </ul>
    
    <p>总价: ${
   
   { total_price|floatformat:2 }}</p>
</body>
</html>

この例では、Django が提供するテンプレート構文を使用します。二重中括弧は補間構文を表し、中央は Python 変数名で、挿入された値を表します。フロントエンドを学習した読者は、実際、多くのユーザーを対象としています。 Vueフレームワークなどでは、これらのうちの 1 つは同じでありこの補間方法は、Mustache 補間構文と呼ばれます。たとえばこの場合:

  • { { site_name }}: これは、テンプレートに変数の値を挿入するために使用される補間構文です。
  • { { current_date }}: これは補間構文でもあり、現在の日付の値を挿入するために使用されます。

{ { total_price|floatformat:2 }}Django テンプレートのフィルター構文が使用されます。この例では、変数 total_price を小数点以下 2 桁の浮動小数点数としてフォーマットします。フィルター構文の特徴の 1 つは、|以下が前の変数のフィルター条件を示していることです。

{% for item in items %}{% endfor %}テンプレートを形成するループ ステートメントは、フロントエンド フレームワークVuevue-forディレクティブに似ています。

この例では:

<ul>
  {% for item in items %}
    <li>{
   
   { item }}</li>
  {% endfor %}
</ul>

このステートメントは、items という名前のリストを反復処理し、反復ごとにリストに要素を挿入します。

次に、このアプリに新しいビュー関数を追加しviews.py、ビュー関数でこの HTML テンプレートを使用して HTTP リクエストを返します。

# 新增到 views.py
from django.shortcuts import render

def my_template_view(request):
    site_name = "我的Django网站"
    current_date = "2023-09-15"
    items = ["物品1", "物品2", "物品3"]
    total_price = 123.45

    context = {
    
    
        'site_name': site_name,
        'current_date': current_date,
        'items': items,
        'total_price': total_price,
    }
    return render(request, 'my_template.html', context)

このうち、render は Django フレームワークのビュー関数であり、HTML テンプレートをレンダリングし、HTTP 応答を生成するために使用されます。その主な機能は、テンプレートとデータを組み合わせて最終的な HTML ページを生成し、そのページを HTTP 応答としてクライアント ブラウザに返すことです。

次に、現在のアプリの urls.py の urlpatterns にビュー関数 my_template_view のルートを追加します。

from django.urls import path
from . import views

urlpatterns = [
    path('myview/', views.my_view, name='my_view'),
    # 新增
    path('my_template_view/', views.my_template_view, name='my_template_view'),
]

次に、Django プロジェクトの構成も変更する必要があります。プロジェクトを開いて構成項目の下に追加するsettings.pyと、Djangoが各アプリケーション (アプリ) 内のフォルダーを見つけてテンプレート ファイルを取得できるようになります。TEMPLATES'APP_DIRS': True,templates

TEMPLATES = [
    {
    
    
        # ...
        'APP_DIRS': True,
    },
]

ここに画像の説明を挿入します

APP_DIRSINSTALLED_APPSDjango エンジンがインストールされているアプリケーションでテンプレート ソース ファイルを検索するかどうかを示します。そのため、現在のアプリケーションが次のようにインストール (登録) されていることを確認してください。
ここに画像の説明を挿入します
このようにして、 を実行するとpython manage.py runserver、アクセスにhttp://127.0.0.1:8000/myapp/my_template_view/は次の効果が表示されます。

ここに画像の説明を挿入します

そうしないと、アクセス中に次のようなテンプレートが見つからないエラーが表示される場合があります。

ここに画像の説明を挿入します
さらに、Django はテンプレートの検索結果をキャッシュすることがあります。開発における一般的なデバッグのヒントは、正しいコードを変更したことを確認しても新しい効果が表示されない場合は、次のコマンドを使用して Django のキャッシュをクリアできることですclearcache

python manage.py clearcache

4. Django Admin でアプリを管理する

Django の admin は、管理バックエンド インターフェイスを自動的に生成する強力な機能で、開発者はデータベース内のモデル データを含む Web サイト データを簡単に管理できます。

4.1 スーパーユーザーの作成

Django の管理者を使用する前に、管理者のバックグラウンド管理インターフェイスにログインして管理操作を実行するために、まずスーパー ユーザー アカウントを作成する必要があります。スーパーユーザーは次のコマンドを使用して作成できます。

python manage.py createsuperuser

次に、プロンプトに従ってユーザー名、電子メール アドレス、パスワードを入力し、スーパーユーザー アカウントを作成します。例えば:

ここに画像の説明を挿入します

デモンストレーションとして、私は意図的に短すぎるパスワードを使用しました。Django が「このパスワードは短すぎます。少なくとも 8 文字が含まれている必要があります。このパスワードは短すぎます。」というプロンプトを表示したことがわかります少なくとも 8 文字を含める必要があります。
このパスワードは一般的すぎます。このパスワードは一般的すぎます。
このパスワードはすべて数字です。このパスワードはすべて数字です。
それでも、「
パスワード検証をバイパスしてユーザーを作成しますか?」という処理を実行しますか?
「Y」と答えて確認します。

4.1 レジスタモデル

権利がない場合

管理者バックグラウンド管理インターフェイスでモデル データを管理するには、モデルをadmin.pyファイルに登録する必要があります。アプリケーションの admin.py ファイルで、関連するモデルをインポートし、admin.site.register関数を使用して登録します。

admin.py に登録しないと、以下の管理インターフェイスにログインした後、モデルが表示されないことに注意してください。
ここに画像の説明を挿入します
写真の Group (ユーザー グループ) と Users (ユーザー) は両方とも Django 独自のモデルです管理アプリケーション、および定義するモデルはありません。

# myapp 应用的 admin.py
from django.contrib import admin
from .models import MyModel

# Register your models here.
admin.site.register(MyModel)

4.3 管理者の背景にアクセスする

ブラウザで管理者バックグラウンド管理インターフェイスにアクセスし、URL (通常は ) で開発サーバー (runserver コマンド) を実行しますhttp://127.0.0.1/admin/先ほど作成したスーパーユーザー アカウントを使用してログインできます。たとえば、ここでは次の場所にアクセスしますhttp://127.0.0.1:8000/admin

ここに画像の説明を挿入します

まだログインしていないため、Django の権限管理は管理者のログイン ルート、つまり に自動的にリダイレクトしますhttp://127.0.0.1:8000/admin/login/?next=/admin/管理者ホームページに入るには、以前に作成したスーパー ユーザー名と対応するパスワードをここに入力するだけです。

ここに画像の説明を挿入します
myapp アプリケーションの下にあるデータ モデル MyModels が Admin (My Models) に表示されていることがわかります。

4.4 モデルデータの管理

myapp アプリケーション内の以下のデータ モデル (マイ モデル) をクリックして、次を確認します。

ここに画像の説明を挿入します
以前に追加したデータを確認できます

次のことができます。

  • データの表示: 管理者のバックグラウンドで、データベース内のモデル データをリスト、詳細、またはその他のフォームで表示できます。

  • データの追加: 新しいデータレコードを追加し、フィールドに入力して保存できます。

  • データの編集と更新: 既存のデータ レコードを編集し、変更を保存できます。

  • データの削除: 不要になったデータレコードを削除できます。

4.5 管理インターフェースのカスタマイズ

Django の管理インターフェイスは、特定のニーズに合わせてカスタマイズできます。admin.py ファイルでモデルの管理クラスを定義し、フィールドの表示、フィルター、検索、並べ替え、その他のオプションをカスタマイズして、管理インターフェイスでのモデルの表示方法を変更できます。

from django.contrib import admin
from .models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('name', 'description')

admin.site.register(MyModel, MyModelAdmin)

4.6 拡張機能

データのインポートとエクスポートを行うdjango-import-exportや、管理インターフェイスを美しくするdjango-grappelliなど、サードパーティのライブラリやプラグインを使用して Django 管理の機能を拡張することもできます。

たとえば、django-grappelli をインストールして使用できます。

pip install django-grappelli

次に、それを settings.py の INSTALLED_APPS に登録します。

INSTALLED_APPS = (
    'grappelli',
    'django.contrib.admin',
    # ...
)

次に、ルートを割り当てます。

from django.conf.urls import include

urlpatterns = [
    path('grappelli/', include('grappelli.urls')), # grappelli URLS
    path('admin/', admin.site.urls),
]

次に、テンプレートのコンテキスト ハンドラーを登録します。

TEMPLATES = [
    {
    
    
        ...
        'OPTIONS': {
    
    
            'context_processors': [
                ...
                'django.template.context_processors.request',
                ...
            ],
        },
    },
]

サーバー展開に正式に使用される場合、次の方法を使用してメディア ファイルを収集できます。

python manage.py collectstatic

同じ機能により、管理インターフェースが「美化」され、たとえば、「http://127.0.0.1:8000/admin/myapp/mymodel/」に再度アクセスすると、次のように表示されます。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_28550263/article/details/132893722