Django的基础

MTV(模型-模板-视图)的理念

模特儿

模型需要与数据库进行协作的文件。

用Django制作应用程序时会自动生成的models.py文件符合此条件。

以下是models.py文件中的一段示例代码。

from django.db import models

# Create your models here.

CATEGORY_CHOICES = (
    (1, '握り'),
    (2, '軍艦'),
    (3, '巻き'),
)


class SushiModel(models.Model):
    category = models.IntegerField(choices=CATEGORY_CHOICES)
    name = models.CharField(max_length=50)

ID会自动生成,category和name将成为数据库中的列名。

请给出中文原生翻译

views.py是Django自动生成的文件。
在视图中,我们可以指定每个函数要将信息传递给哪个HTML文件。这将使每个函数与模板相关联。

模板

简单来说,它是HTML文件。

1 (3).png

创建Django项目

你可以跳过虚拟环境的搭建,直接从Django的安装开始也可以。

建立虚拟环境

Python有一个名为venv的模块,可以用来创建虚拟环境。
通过使用py -m venv命令,可以创建虚拟环境,并指定目录名。
打开命令提示符,切换到要创建虚拟环境的目录。
切换后,使用venv来创建虚拟环境。

py -m venv DjangoVenv

当输入上述命令时,会创建一个名为DjangoVenv的目录。

用 VSCode 打开文件夹

我們將在VScode中打開剛剛建立的目錄。 VScode lì de .)

code DjangoVenv

运行这个命令将会打开VScode。在刚刚创建的目录下,已经创建了Include、Lib、Scripts和pyvenv.cfg四个文件。

DjangoVenv
├─Include
├─Lib
├─Scripts
└─pyvenv.cfg

激活虚拟环境

请在Windows中打开VScode的终端,输入Scripts目录下的activate文件的路径,然后虚拟环境将被激活。

\DjangoVenv>Scripts\activate
(DjangoVenv)\DjangoVenv>

当看到(虚拟环境的目录名称)时,表示成功。

安装Django

在VScode的终端中输入以下内容。

pip install django

如果显示如下,则表示成功。

Successfully installed asgiref-3.2.7 django-3.0.6 pytz-2020.1 sqlparse-0.3.1

可以通过运行pip list来进行确认。

>pip list
Package    Version
---------- -------
asgiref    3.2.7
Django     3.0.6
pip        19.2.3
pytz       2020.1
setuptools 41.2.0
sqlparse   0.3.1

当你看到 Django 出现时,这表示成功。

创建模版

执行命令 ”’django-admin startproject <项目名>”’ 将在当前目录下创建一个名为<项目名>的文件夹。

django-admin startproject django_practice 

輸入「と」と輸入すると,將建立django_practice目錄。
該目錄內容如下:

?django_practice
 ┣ ?django_practice#プロジェクト
 ┃ ┣ ?asgi.py #asgiというインタフェースの設定ファイル
 ┃ ┣ ?settings.py #プロジェクト設定ファイル
 ┃ ┣ ?urls.py #URLの設定
 ┃ ┣ ?wsgi.py #wsgiというインタフェースの設定ファイル
 ┃ ┗ ?__init__.py
 ┗ ?manage.py

让服务器运行一下

当您将runserver作为manege.py的参数传递时,可以启动服务器。

python manage.py runserver

当您输入时

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
May 11, 2020 - 09:24:15
Django version 3.0.6, using settings 'django_practice.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Django:締め切りのある完璧主義者のためのWebフレームワーク。.png

创建应用程序

请以中文分支创建一个应用程序,命令为:python manage.py startapp <应用程序名称>。

cd django_practice
python manage.py startapp django_application 

将会创建一个名为django_application的新目录。

建筑

?django_practice
 ┣ ?django_application #アプリケーション
 ┃ ┣ ?migrations #データベースの設計図
 ┃ ┣ ?admin.py #管理画面設定ファイル
 ┃ ┣ ?apps.py #アプリケーション設定ファイル
 ┃ ┣ ?forms.py **#form形成**
 ┃ ┣ ?models.py #データベース定義
 ┃ ┣ ?tests.py #テスト設定
 ┃ ┣ ?views.py #ビュー
 ┣ ?django_practice
 ┃ ┣ ?asgi.py
 ┃ ┣ ?settings.py
 ┃ ┣ ?urls.py
 ┃ ┣ ?wsgi.py
 ┃ ┗ ?__init__.py
 ┣ ?db.sqlite3 #runserverで作成されたデータベース
 ┗ ?manage.py

创建视图

请打开django_application/views.py文件,然后写下以下的Python代码:
定义一个hellofunc函数,
它是一个返回HttpResponse对象的函数。

from django.http import HttpResponse


def hellofunc(request):
    html = """
            <!DOCTYPE html>
            <html lang="ja">
            <head>
                <meta charset="UTF-8">
                <title>Django</title>
            </head>
            <body>
                <h1>Hello world</h1>
                <p>こんにちは</p>
            </body>
            </html>
            """
    return HttpResponse(html)

关于URL加载

2 (2).png

应用程序的URL协同连接

首先,在应用程序的目录中创建一个urls.py文件。

?django_application
 ┣ ?migrations
 ┃ ┗ ?__init__.py
 ┣ ?admin.py
 ┣ ?apps.py
 ┣ ?models.py
 ┣ ?tests.py
 ┣ ?urls.py #追加
 ┣ ?views.py
 ┗ ?__init__.py

为了将此应用程序的urls.py导入到django_practice/urls.py中,现在我们将写入以下内容。


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


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

通过这个,可以加载应用程序的urls.py。

使用views.py和urls.py来在网站上显示

请在应用程序的urls.py文件中编写以下代码,并将函数加载到path()函数的参数中。

from django.urls import path

from .views import hellofunc
urlpatterns = [
    path('hello/', hellofunc),
]
127_0_0_1_8000_application_hello_.png

使用模板

这次我们将使用模板来显示在网站上。

创建和设置模板目录

将模板目录创建在manage.py文件所在的目录下
同时在模板目录下创建html文件


?django_practice 
 ┣ ?django_application
 ┣ ?django_practice
 ┣ ?templates #追加
 ┃ ┗ test.html #追加
 ┣ ?db.sqlite3
 ┗ ?manage.py

我对HTML文件进行了如下调整。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <title>Django</title>
</head>

<body>
    <h1>render_test</h1>
</body>

</html>

更改settings.py文件中TEMPLATES下的DIRS,将其写成以下方式来设置模板目录。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],#書き変え
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

通过设置这个选项,可以在render()或get_template()以及类基视图的内部调用设置的目录。

使用render函数

render是一个函数,简单地说就是加载模板并将结果返回为HttpResponse对象。

在django_application的views.py文件中定义一个新的函数。

from django.shortcuts import render

def render_test(request):
    return render(request, 'test.html')

我也会更改urls.py文件。

from django.urls import path

from .views import hellofunc, render_test
urlpatterns = [
    path('hello/', hellofunc),
    path('render/', render_test)
]
Django.png

创建和配置静态目录

创建静态目录

?django_practice
 ┣ ?django_application
 ┣ ?django_practice
 ┣ ?static #追加
 ┃ ┗ ?test.css #追加
 ┣ ?templates
 ┣ ?db.sqlite3
 ┗ ?manage.py
h1 {
    color: red;
}

在settings.py的最后添加以下行来配置静态目录。

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

为了加载static目录到html文件中,将其改写如下。

<!DOCTYPE html>
<html lang="ja">

<head>
    {% load static %}<!-- staticディレクトリを読み込み-->
    <meta charset="UTF-8">
    <title>Django</title>
    <link rel='stylesheet' type='text/css' href="{% static 'test.css' %}">
</head>

<body>
    <h1>render_test</h1>
</body>

</html>
ジャンゴ.png

创建模型

我会对django应用程序的模型文件models.py进行更改,以创建一个模型。

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.CharField(max_length=50)

创建一个名为 ArticleModel 的模型,其包含了 title、content 和 reporter 这三个列。
每个列都由 Field 类的实例来代表,比如 CharField 表示字符字段。
每个字段向 Django 传达了它所持有的数据类型。

激活模型

你可以使用Django的功能来创建数据库。

settings.py文件中的INSTALLED_APPS设置

要使用模型,首先必须在Django的设置中配置和安装应用程序。

将通过startapp命令创建的应用程序添加到设置中。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_application',  # 追加
] 

把对Django模型的更改保存为迁移。

python manage.py makemigrations

执行上述操作将输出如下:

Migrations for 'django_application':
  django_application\migrations\0001_initial.py
    - Create model Article

迁移文件将被创建在应用程序的迁移目录下。

?django_application
 ┗ ?migrations
   ┣ ?0001_initial.py #追加される
   ┗ ?__init__.py

from django.db import migrations, models

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Article',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200)),
                ('content', models.TextField()),
                ('reporter', models.CharField(max_length=50)),
            ],
        ),
    ]

然后执行迁移操作,创建这些模型表到数据库中。

 python manage.py migrate

当以下内容显示出来的时候,表示成功:

正在应用django_application.0001_initial… 完成

这样,数据库中就会创建出表格并且可以使用模型。

在Django的管理网站上对模型进行操作

Django自动创建了模型管理网站,您可以利用该网站对模型进行操作。

创建管理用户

首先需要创建管理网站的管理用户
执行以下操作可以创建一个拥有网站管理权限的用户


python manage.py createsuperuser

请输入您喜欢的用户名并按下Enter键。

Username: admin

请您输入要使用的邮箱地址
如果不想注册,请直接按下Enter键

Email address: admin@example.com

输入密码

Password: **********
Password (again): *********
Superuser created successfully.

通过这个操作,管理员用户已被创建。接下来,运行服务器并访问 http://127.0.0.1:8000/admin。

Log_in_Django_site_admin.png

请输入刚刚创建的用户信息以登录。将会显示Django管理索引页面。

Site_administration_Django_site_admin.png

然而,目前尚无此次创建的应用程序的模型管理所在位置。若要添加到此处,需要修改应用程序的admin.py文件。

from .models import Article

admin.site.register(Article)

追加后,将在管理网站上显示出来。

Site_administration_Django_site_admin (1).png

您可以在本网站上进行Article模型的管理。

使用CreateView创建一个新的数据创建页面

在应用程序的目录中创建一个forms.py文件,以创建表单类型。

from django import forms
from .models import Article


class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = '__all__'

创建一个屏幕模板

<!doctype html>
<title>django_practice</title>

<body>
    <form method="post">
        <div>
            {{ form.as_p }}
            <!-- .as_pで要素ごとにPタグで囲む-->
        </div>
        <button>保存</button> {% csrf_token %}
    </form>
</body>

</html>


在views.py文件中创建一个继承CreateView的类。

from django.views.generic import CreateView

from .models import Article
from .forms import ArticleForm
from django.urls import reverse_lazy

class ArticleCreateView(CreateView):
    """
    新規作成
    """
    model = Article
    form_class = ArticleForm
    success_url = reverse_lazy('create')
    template_name = 'create.html'

成功的URL #指定数据创建成功后要转到的位置,请指定路径函数的名称部分。

在urls.py文件中,导入之前创建的类,并指定URL。

from django.urls import path

from .views import hellofunc, render_test, ArticleCreateView
urlpatterns = [
    path('hello/', hellofunc),
    path('render/', render_test),
    path('create/', ArticleCreateView.as_view(), name='create'),
]

?django_practice
 ┣ ?django_application
 ┃ ┣ ?admin.py
 ┃ ┣ ?apps.py 
 ┃ ┣ ?forms.py #ArticleForm作成
 ┃ ┣ ?models.py
 ┃ ┣ ?tests.py
 ┃ ┣ ?urls.py #新しくviewの読み込みurl指定
 ┃ ┣ ?views.py #ArticleCreateView作成
 ┣ ?django_practice
 ┣ ?templates
 ┃ ┣ ?create.html #ArticleCreateViewで表示するテンプレート作成
 ┃ ┗ ?test.html
 ┣ ?db.sqlite3
 ┗ ?manage.py