我打算用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。

スクリーンショット 2019-11-04 21.39.07.png

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

bannerAds