Django教程1 Django基本理解篇


1. 创建并启动项目

-----
# プロジェクトの作成
django-admin startproject myblog


# サーバの起動
$ python manage.py runserver

-----

1. 应用程序开发
2. 开发应用程序

# Application definitionの箇所にアプリケーション定義の記述
# hello/apps.py を参考に書く

vi /project/settings.py

# Application definition

INSTALLED_APPS = [
    'hello.apps.HelloConfig',  #<<
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]


# python manage.py startapp hello コマンドを使う

$ cd myblog
$ python manage.py startapp hello


# view.pyの変更

vi hello/view.py

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World')


# 2.ルーティングするための編集(プロジェクト側urls.py編集)
# myblog/urls.pyを作成する。include, path関数をインポートしpath関数でhelloを指定する。

vi myblog/urls.py

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

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


# myblog/hello/urls.pyを作成する。path関数を指定する。
vi hello/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

# ブラウザから確認を取る。
https://localhost:8000/hello

3. 给Django添加模板。

# アプリ内views.py にテンプレートを呼び出す処理に変更する
--------------------(変更前)--------------------
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World')
--------------------(変更後)--------------------
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return render(request, 'hello/index.html')

# ※renderはデータとテンプレートを組み合わせてwebページを返すショートカット関数

创建用于模板的目录结构和模板index.html文件。

pwd
home/myblog/hello


mkdir templates


cd templates
mkdir hello


cd hello
vi index.html
<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>hello world</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        <!-- この下に、htmlタグを追記する -->
        <h1>hello world</h1>
        <p>This is hello</p>
    </body>
</html>

通过浏览器确认。

只要能够成功调用index.html,模板调用就会正常执行。




# 4.テンプレートにデータを渡す


将应用程序hello/views.py中的数据传递给模板的方式进行修改。

你好/views.py的修改

——————-(原文)——————–
import render from django.shortcuts
import HttpResponse from django.http

def index(request):
return render(request, ‘hello/index.html’)

def index(request):
context = {
‘message’: ‘欢迎来到我的世界’,
‘players’: [‘勇者’, ‘战士’, ‘魔法师’]
}
return render(request, ‘hello/index.html’, context)

将能够接收在hello/index.html模板中传递的上下文进行处理的代码进行更改。

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>hello world</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        <!-- この下に、htmlタグを追記する -->
        <h1>hello world</h1>
        <p>{{ message }}</p>
        {% for player in players %}
            <p>{{ player }}はモンスターと戦った</p>
        {% endfor %}
    </body>
</html>

使用浏览器进行确认。

如果能够顺利将数据传递到index.html,则表示成功。



---
# 5.djangoのモデルを作ろう


モデルは、データベースのレコードを Pythonのオブジェクトに割り当てる機能。
通常、データベースを操作するにはSQLを使います。SQLは、データベースの操作で標準となる重要な技術ですが、Pythonとは文法や考え方も異なります。
そこで使うのが、モデルというオブジェクトです。モデルは、データベースのレコードをオブジェクトに割り当てます。
モデルを使えば、SQL(エスキューエル)を書かなくても、Pythonのコードでデータベースのレコードをオブジェクトとして操作できできます。
このようにオブジェクトでデータベースを操作するツールを「ORマッパー」(Object-relational mapper)と呼びます。


---
# 5-1. データベースを作成

今回は、本格的なデータベースMySQLを利用する設定にしたいと思います。
(SQLiteをそのまま利用する場合は、このMySQLの設定はスキップできます。)

データベースサーバ(MySQL)はサーバ作成時に設定したので起動していますが、
設定していない場合は、以下のように起動しておきましょう。

使用以下命令启用MySQL并启动它:

$ sudo systemctl enable mysql
$ sudo systemctl start mysql

在这里,使用mysql命令来创建一个名为”mydb”的数据库。

让我们执行以下命令吧。

$ mysql -u root
create database mydb;

我们成功创建了数据库。
接下来,让我们在应用程序中进行设置,以便使用这个数据库。

数据库的设置在名为”mysite/mysite/settings.py”的文件中进行。

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

5-3. 定义表示数据库记录的模型。

我的app/bbs/models.py

从django.db模块导入models模块

类文章(Article):
内容(content)= models.CharField(max_length=200)

def __str__(self):
    return self.content

—模型.py
通过导入模型库中的models模块,定义django数据库模型

类 Diary(models.Model):
主题 = models.CharField(max_length=200)

def __str__(self):
    return self.topic

5-3. 适用于已创建的模型的差分变更应用

创建迁移文件

用Python编写,执行命令”python manage.py makemigrations bbs”。

执行迁移

执行下列命令,本土语言的汉语进行转述即可:python manage.py migrate。



# 6. Djangoの管理サイトを使ってみよう


管理サイトは アプリ・DB・ユーザ情報のための管理機能。django標準で用意。
管理サイトの機能で DBの追加・変更・削除
そのためにはスーパーユーザの登録(ユーザ名)(メルアド)が必要。


在django项目中注册超级用户。

用Python执行manage.py文件,创建超级用户。

用户名:管理员
电子邮箱地址:admin@gmail.com
密码:

启动Django项目的服务器

请运行`python manage.py runserver`命令。

在浏览器中访问管理网站。

使用刚刚创建的超级用户信息进行访问。


编辑hello/admin.py文件以描述超级用户权限的处理

你好/admin.py
从django.contrib导入admin
从.models导入Article

admin.site.register(Article) 可以改为以下方式:

admin.site.register(Article)。










# 7. モデルのデータを一覧表示しよう

hello/views.pyにmodelsからデータを取り出す処理を追記する。

hello/views.py

```hello/views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Article


def index(request):

articles = Article.objects.all()

    context = {
       'message': 'Welcome my hello',
       'articles': artiles,
    }
    return render(request, 'hello/index.html', context)

在index.html中追加从models中提取数据的逻辑处理。

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>hello world</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        <!-- この下に、htmlタグを追記する -->
        <h1>hello world</h1>
        <p>{{ message }}</p>
        {% for article in articles %}
            <p>{{ article.content }}</p>
        {% endfor %}
    </body>
</html>

显示了使用编号6注册的数据库记录。

展示数据的详细信息 – 第一节

    • 掲示板のルーティング定義

 

    • (ドメイン名)/bbs/ index 一覧表示

 

    • (ドメイン名)/bbs/id detail 個別表示

 

    • (ドメイン名)/admin/ admin.site.urls 管理サイト

 

    urls.pyに/detailを追加する

我的应用程序/bbs/urls.py

from django.urls import path
from . import views

app_name = 'bbs'

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:id>', views.detail, name='detail'),  # 整数型のidがあったら views関数をdetail名を呼び出す
]

    views.pyを修正する

为了确认操作,直接在HttpResponse中显示数据。


from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Article

def index(request):
    articles = Article.objects.all()
    context = {
        'message': 'Welcome my BBS',
        'articles': articles,
    }
    return render(request, 'bbs/index.html', context)

def detail(request, id):
    article = get_object_or_404(Article, pk=id)
    return HttpResponse(article)

9. 让我们来展示数据详情-第二部分。

    views.pyに、detail関数を追加

我的应用程序的bbs视图.py

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Article

def index(request):
    articles = Article.objects.all()
    context = {
        'message': 'Welcome my BBS',
        'articles': articles,
    }
    return render(request, 'bbs/index.html', context)

def detail(request, id):
    article = get_object_or_404(Article, pk=id)
    context = {
        'message': 'Show Article ' + str(id),
        'article': article,
    }
    return render(request, 'bbs/detail.html', context)
    detail.htmlを追加する

我的应用程序/bbs/templates/bbs/detail.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>paiza bbs</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        <h1>paiza bbs</h1>
        <p>{{ message }}</p>
        <p>{{ article.content }}</p>
        <p><a href="{% url 'bbs:index' %}">一覧</a></p>
    </body>
</html>
    一覧表示から詳細表示にリンク

我的应用程序/论坛/模板/论坛/首页.html

{% for article in articles %}
{{article.title}}
{{article.date}}
{{article.content}}
{% endfor %}

{{article.content}}, 详情.

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>hello world</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        <!-- この下に、htmlタグを追記する -->
        <h1>hello world</h1>
        <p>{{ message }}</p>
    {% for article in articles %}
        <p>
            {{ article.content }},
            <a href="{% url 'bbs:detail' article.id %}">詳細</a>
        </p>
    {% endfor %}
    </body>
</html>
广告
将在 10 秒后关闭
bannerAds