我打算用Django从头开始制作一个论坛应用程序。(第2部分)
这是第一个链接:
https://qiita.com/TuruMaru/items/4df41577fb9f722c7864
创建数据库
我正在创建一个数据库,为此首先需要在models.py中写入表格的内容。
from django.db import models
#timezoneを使うためにインポート
from django.utils import timezone
# Create your models here.
#models.Modelを書くのはお決まり
class Posts(models.Model):
#Metaとかobjectとかはおまじない
class Meta(object):
#作成されるテーブル名を指定
db_table = 'posts'
#カラム名=データの形式(管理画面に表示される名前,その他の制約)
text = models.CharField(verbose_name='本文', max_length=255)
created_at = models.DateField(verbose_name='作成日', default=timezone.now)
#管理画面に表示されるように設定(おまじない)
def __str__(self):
return self.text, self.created_at
通过这个步骤,已经准备好创建名为 “posts” 的表。
我们将根据这些操作来在终端中进行。
$ python manage.py makemigrations posts
Migrations for 'posts':
posts/migrations/0001_initial.py
- Create model Posts
用这个命令创建了0001_initial.py文件。
这个文件中记录了即将创建的数据库的内容。
但是,这个命令还没有创建数据库,还在准备阶段。
$ python manage.py sqlmigrate posts 0001
BEGIN;
--
-- Create model Posts
--
CREATE TABLE "posts" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "text" varchar(255) NOT NULL, "created_at" date NOT NULL);
COMMIT;
您可以在创建表时通过此命令查看到生成的SQL代码。
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, posts, sessions
Running migrations:
Applying posts.0001_initial... OK
好的,我已經完成了。非常感謝你。
虽然在管理界面上进行确认需要一些操作,但在这里就不详细说明了。
让通道通过
如果不进行通道设定工作,那么即使写了很好的代码,也无法在浏览器上显示出来。因为还有其他的设定要做,所以我们最好先处理它们。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#ここから追加部分
'posts',
'templates',
]
在创建完成应用程序后,请将其追加到INSTALLED_APPS中。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
#↓ここ1行を追加
'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',
],
},
},
]
我会告诉Python,我创建了一个名为”templates”的目录。
另外,为了进行操作确认,我也会稍微编写views.py和html。
from django.shortcuts import render
# Create your views here.
from django.views.generic import View
class IndexView(View):
def get(self,request, *args, **kwargs):
return render(request, 'posts/post.html')
index = IndexView.as_view()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block page_title %}{% endblock %}</title>
</head>
<body>
<hr>
<h1>{% block title %}{% endblock %}</h1>
<hr>
{% block content%}{% endblock %}
<hr>
</body>
</html>
{% extends "base.html" %}
{% block page_title %}post{% endblock %}
{% block title %}post{% endblock %}
{% block content %}
<h1>Posts</h1>
{% endblock %}
通常情况下,我们会将base.html作为所有页面的基础模板,然后将post.html等页面的内容放入其中。
接下来是要开始编写urls.py了。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('posts.urls')),
]
from django.urls import path
from . import views
app_name = 'posts'
urlpatterns = [
path('', views.index, name='index'),
]
这样做的话,我们可以启动本地服务器进行确认。
$python manage.py runserver 3000
那么,让我们在Google或其他地方尝试输入localhost:3000。

如果以这样的方式出现,那么与密码有关的部分就完成了。
接下来,让我们开始编写掲示板应用的代码吧。