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>