Django 4.0 ドキュメント学習 (1)

この連載記事は、Django 4.0版の
pycharm用開発ツールを使った学習の公式サイトドキュメントを元にしています。

> python -m django --version
4.0

初めての Django アプリを作成する、パート 1

プロジェクトを作成

pycharm ターミナル ウィンドウで実行

django-admin startproject mysite

ここに画像の説明を挿入
次のファイルは、現在のプロジェクトの作業ディレクトリに生成されます
ここに画像の説明を挿入

  • 最も外側のmysite/ルート ディレクトリはプロジェクトの単なるコンテナーであり、ルート ディレクトリの名前は Django には影響せず、任意の名前に変更できます。
  • manage.py: Django プロジェクトをさまざまな方法で管理できるコマンドライン ツールです。
  • 1 レベル内側のディレクトリにはmysite/、純粋な python パッケージであるプロジェクトが含まれています。
  • mysite/__init__.py: このディレクトリを Python パッケージと見なす必要があることを Python に伝える空のファイル。
  • mysite/settings.py: django プロジェクトの構成ファイル。
  • mysite/urls.py: Web サイトのディレクトリと同様に、django プロジェクトの URL 宣言。
  • mysite/asgi.py: ASGI 互換の Web サーバーで実行されているプロジェクトのエントリ ポイントとして機能します。
  • mysite/wsgi.py: WSGI 準拠の Web サーバーで実行されているプロジェクトのエントリ ポイントとして。

開発用のシンプルなサーバー

Django プロジェクトが本当に正常に作成されていることを確認してください。
一番外側の mysite/ ディレクトリに移動して、次を実行します。

> cd .\mysite\ 
> python manage.py runserver

次の出力を見ると、Django プロジェクトが正常に作成され、ctrl+c で操作が終了し、
ここに画像の説明を挿入
ブラウザが開きますhttp://127.0.0.1:8000/
ここに画像の説明を挿入
. デフォルトでは、runserver コマンドは、マシンの内部 IP のポート 8000 でリッスンするようにサーバーを設定します。
変更が必要な場合は、実行します

python manage.py runserver 8080

再実行すると、python manage.py runserverリンクが次のように変更されます。http://127.0.0.1:8080/

アプリケーションを作成

Django には、アプリケーションの基本的なディレクトリ構造を生成するのに役立つツールが付属しています。
アプリケーション名は任意です。

> python manage.py startapp polls

ここに画像の説明を挿入

最初のビューを書く

polls/views.py

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello,world.You're at the polls index.")

これは Django で最も単純なビューです。効果を確認するには、URL をマップする必要があります。そのために URLconf が必要です。

URLconf を作成するには、新しい urls.py ファイルを polls ディレクトリに作成する必要があります。
polls/urls.py

from django.urls import path
from . import views
urlpatterns=[
    path('',views.index,name='index'),
]

次のステップは、ルート URLconf ファイルで作成した polls.urls モジュールを指定することです。mysite/urls.py ファイルの urlpatterns リストに include() を挿入します。
mysite/urls.py

from django.contrib import admin
from django.urls import include,path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

動作していることを確認する

python manage.py runserver
http://127.0.0.1:8000/polls

ここに画像の説明を挿入

初めての Django アプリを作成する、パート 2

mysite/settings.pyいくつかの設定

#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans'#中文

#TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'#中国时区

データベース構成

mysite/settings.py
sqlite3 データベースの Django のデフォルト設定では、
'db.sqlite3'プロジェクトのルート ディレクトリにデータベース ファイルが保存されます。
ここに画像の説明を挿入

DATABASES = {
    
    
    'default': {
    
    
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

MySQL データベースを構成する場合は、最初に MySQL コマンド ライン インターフェイスを入力して、次のようなプロジェクトのデータベースを構築する必要があります。

create database xxx数据库名;
DATABASES = {
    
    
    'default': {
    
    
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx数据库名',
        'USER': '用户名',
        'PASSWORD': '密码',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

モデルを作成

Django でデータベース駆動型の Web アプリケーションを作成するための最初のステップは、モデルを定義することです。つまり、データベース スキーマの設計とそれに付随するその他のメタデータを定義します。
投票アプリケーションを作成するための公式 Web サイトのチュートリアルは、質問と選択肢の 2 つのモデルを作成する投票アプリケーションです。質問モデルには、質問の説明と投稿日時が含まれます。Choice モデルには、オプションの説明と現在の投票数の 2 つのフィールドがあります。各オプションは質問に属します。
polls/models.py

from django.db import models
class Question(models.Model):
    question_text = models.CharField(max_length=200)#CharField字符字段
    pub_date=models.DateTimeField('date published')#DateTimeField日期时间字段
class Choice(models.Model):
    question=models.ForeignKey(Question,on_delete=models.CASCADE)
    choice_text=models.CharField(max_length=200)
    votes=models.IntegerField(default=0)

活性化モデル

まず、投票アプリケーションをプロジェクトにインストールし、
mysite/settings.py
INSTALLED_APPS リストに追加する必要があります。'polls.apps.PollsConfig'

> python manage.py makemigrations polls

Migrations for 'polls':
  polls\migrations\0001_initial.py
    - Create model Question
    - Create model Choice

makemigrations コマンドを実行すると、Django はモデル ファイルへの変更を検出し、変更を移行として保存します。
移行は、モデル定義 (つまり、データベース構造) への変更を保存する Django の方法です。polls/migrations/0001_initial.py に保存されます。
ここに画像の説明を挿入
移行コマンドによって実行される SQL ステートメントを確認します。sqlmigrate コマンドは移行名を受け取り、対応する SQL を返します。

> python manage.py sqlmigrate polls 0001

ここに画像の説明を挿入
migrate コマンドを実行して、新しく定義されたモデルのデータ テーブルをデータベースに作成します。

> python manage.py migrate

移行は非常に強力な機能で、テーブルを削除して再度作成することなく、開発中にデータベース構造を継続的に変更できます。モデルを変更するには、次の 3 つの手順が必要です。

  • models.py ファイルを編集してモデルを変更します。
  • python manage.py makemigrations を実行して、モデル変更の移行ファイルを生成します。
  • python manage.py migrate を実行して、データベースの移行を適用します。

初期テスト API

python コマンドラインを開く

python manage.py shell

データベース API を試す

>>> from polls.models import Choice,Question
>>> Question.objects.all()
<QuerySet []>
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> q.id
1
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2023, 3, 17, 7, 30, 17, 75596, tzinfo=datetime.timezone.utc)
>>> q.question_text="What's up?"
>>> q.save()
>>> Question.objects.all()                                             
<QuerySet [<Question: Question object (1)>]>

<Question: Question object (1)>このオブジェクトの詳細を理解するのに役立ちません。Question モデル ( polls/models.pyにあります) のコードを編集して、これを修正します。Question と Choice にstr () メソッドを追加。str
() メソッドを model に追加することは非常に重要です。これにより、コマンド ラインでの使用が便利になるだけでなく、このメソッドを使用して、Django によって自動的に生成された admin 内のオブジェクトを表すこともできます。次に、このモデルにカスタム メソッドを追加します: polls/models.py

import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
    question_text = models.CharField(max_length=200)#CharField字符字段
    pub_date=models.DateTimeField('date published')#DateTimeField日期时间字段
    def __str__(self):
        return self.question_text
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
    question=models.ForeignKey(Question,on_delete=models.CASCADE)
    choice_text=models.CharField(max_length=200)
    votes=models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

quit()コマンドラインを終了します。python manage.py shellコマンドを使用して、 Python 対話型コマンド ラインを再度開きます。

>>> from polls.models import Choice,Question
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(id=1)  
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's up?>]>
>>> from django.utils import timezone
>>> current_year=timezone.now().year                          
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?>
>>> Question.objects.get(pk=1)
<Question: What's up?>
>>> q=Question.objects.get(pk=1)
>>> q.was_published_recently()
True
>>> q.choice_set.all()
<QuerySet []>
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
>>> c.question
<Question: What's up?>
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
>
>>> q.choice_set.count()
3
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
>
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
(1, {
    
    'polls.Choice': 1})

quit()終了します。

Django 管理ページの紹介

管理者アカウントのpython manage.py createsuperuser
パスワードを作成する 私が admin と書いた

> python manage.py createsuperuser
用户名 (leave blank to use 'dell'): admin
电子邮件地址: admin@example.com
Password: 
Password (again):
密码跟 用户名 太相似了。
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

開発サーバーを起動しpython manage.py runserver
てログインhttp://127.0.0.1:8000/admin
ここに画像の説明を挿入
し、
ここに画像の説明を挿入
管理ページに
polls/admin.pyを追加します。

from django.contrib import admin
from .models import Question
admin.site.register(Question)

ページを更新して
ここに画像の説明を挿入
便利な管理機能を体験し
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
、変更履歴を確認してください
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_46322367/article/details/129618100