DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

Django奮闘記③こいつ、動くぞ!ー感動の管理サイトー

前回はDjangoのサーバー起動ができました。

dreamerdream.hateblo.jp

 

今回は参考ブログを変更して↓こちらのチュートリアルを参考に作業をしてみます。

はじめての Django アプリ作成、その 1 | Django documentation | Django

 

今回は投票アプリを作成します。

raspberrypi:~/dreamer $ python3 manage.py startapp polls
raspberrypi:~/dreamer $ ls
db.sqlite3 dreamer manage.py polls

できました!

polls/view.pyをブログの通りに編集します。

from django.shortcuts import render

# Create your views here.
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

 

 

urls.pyというファイルをpollsディレクトリに作ります。

raspberrypi:~/dreamer $ nano polls/urls.py

中身はブログの通り

from django.urls import path

from . import views

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

 

 

次にプロジェクトディレクトリ内のurls.pyに「ここに別のurlsファイルがあるんだよー」と教えてあげます。

raspberrypi:~/dreamer/dreamer $ nano urls.py

includeを追加して、パスを通します。

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

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

 

ここで動作確認しましょうとのことなのでサーバーを立ち上げ

raspberrypi:~/dreamer $ sudo python3 manage.py runserver 0:8000

確認して、うまくいくとHelloworld...〜〜と表示されるはずー

f:id:DreamerDream:20180901095300p:plain

なんでじゃー!!凹

けど、polls/view.py のline5がおかしいぞ!と教えてくれています。

確認してみると

return HttpResponse("Hello, world. You're at the polls index.")

の部分。つまり、紐付け自体はうまく出来ているようです。

しかしエラー、、なんで?

諦めない!

テストコードを書いた。

raspberrypi:~/dreamer nano polls/test.py

中身はviewsを読んで表示するだけ

import views

print(views.index('test'))

 

結果

raspberrypi:~/dreamer/polls $ python3 test.py
Traceback (most recent call last):
File "test.py", line 3, in <module>
print(views.index('test'))
File "/home/---/dreamer/polls/views.py", line 5, in index
return HttpResponse("Hello, world. You're at the polls index.")
NameError: name 'HttpResponse' is not defined

HttpResponseが見つかんないとな?

確認すると

from django.shortcuts import render
from django.http import HttpResponse #←これ!
# Create your views here.
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

忘れてたー!!!だけ!

今度こそ!

raspberrypi:~/dreamer $ sudo python3 manage.py runserver 0:8000

結果

f:id:DreamerDream:20180901100427p:plain

今度は成功!!!なんとなーく解って来たぞ。

 

ここからの参考ページ

はじめての Django アプリ作成、その2 | Django documentation | Django

次にmigrateします。migrateすることでデータベースが作られるそうな。

初期設定ではSQLiteが起動するそうで初心者向けだそうです。

その前にsettingファイルで言語とタイムゾーンの設定をします

raspberrypi:~/dreamer $ nano dreamer/settings.py

 

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

と変更

migrateします。

raspberrypi:~/dreamer $ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
No migrations to apply.

おや?migrateionするアプリが無いとな?

なんか上手くいっていない感じたしたので一旦データベースを消してみます。

raspberrypi:~/dreamer $ rm db.sqlite3

もっかいmigrate

raspberrypi:~/dreamer $ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK

うまく出来たっぽい。

migrateするとデータベースが自動で作られるのですね。なるほど!

 

次にモデルを生成します。

raspberrypi:~/dreamer $ nano polls/models.py

中身はブログの通りに

from django.db import models

# Create your models here.


class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')


class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)

 

単純だと書いてあるけど正直よくわからん!

 

とにかく書かれている通りにモデルを有効にしてみます。

raspberrypi:~/dreamer $ nano dreamer/settings.py

 

INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

で、今度はpollアプリをmigrateするのですね。

raspberrypi:~/dreamer $ python3 manage.py makemigrations polls
Migrations for 'polls':
polls/migrations/0001_initial.py
- Create model Choice
- Create model Question
- Add field question to choice

makemigrationsをすることでDjangoに変更があったことが伝わるそうです。

 

管理者ユーザーを登録します。

raspberrypi:~/dreamer $ python3 manage.py createsuperuser

You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): polls.
Run 'python manage.py migrate' to apply them.

ユーザー名 (leave blank to use '---'): admin
メールアドレス: tester@gmail.com
Password:
Password (again):
このパスワードは短すぎます。最低 8 文字以上必要です。
このパスワードは数字しか使われていません。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

 

ユーザー名とメールアドレスとパスワードが問われます

短いパスワードだともう一度パスワードを設定し直すように促されますが「y」で。テスト用としては問題無いでしょう。

aspberrypi:~/dreamer $ python3 manage.py runserver 0:8000
Performing system checks...

System check identified no issues (0 silenced).

You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): polls.
Run 'python manage.py migrate' to apply them.

September 01, 2018 - 17:38:23
Django version 2.1, using settings 'dreamer.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.

 

 

ブラウザからアクセスすると

ん???

f:id:DreamerDream:20180903114458p:plain

いつもと違った場所からアクセスしたせいか、エラーが出ました。

けどHTTPHOSTにlocalhost:8000が無いから無理ー!というメッセージです。

raspberrypi:~/dreamer $ nano dreamer/settings.py

で設定を変更します。

アドレスを書いても良いのですが、

ALLOWED_HOSTS = ['*']

と書くとどこからでもアクセス可能になるそうです。

すると、つながった〜!

f:id:DreamerDream:20180901174125p:plain

ログインします。

f:id:DreamerDream:20180901174145p:plain

GUIでユーザー管理が出来るページが自動で作成されるんですね。便利〜!

f:id:DreamerDream:20180901174426p:plain

 

次はpoll(投票)アプリと結びつけます。

 

次に pollアプリをadminサイト上で編集できるようにするのです。

raspberrypi:~/dreamer $ nano polls/admin.py 

Questionという部品をインポートするのですね。

from django.contrib import admin

# Register your models here.
from .models import Question

admin.site.register(Question)

 

 

でそのままブラウザでアクセスすると

f:id:DreamerDream:20180903085911p:plain

ちゃんと追加されてる!

Question追加を押すと、追加出来るページが表示されました!

f:id:DreamerDream:20180903085940p:plain

ところが、Questionを押すと参考ページのようにはならずエラー凹

f:id:DreamerDream:20180903090039p:plain

よーわからんっ!

わからんけどデータベースで必用な情報が見つからないらしい。

f:id:DreamerDream:20180903091229p:plain

polls_questionテーブルが無いと言われてる、

ひとまず権限を777に変更してみる。

raspberrypi:~/dreamer $ sudo chmod 777 db.sqlite3

・・・違った

よく見るとサーバーを起動させた時に赤字で

Run 'python manage.py migrate' to apply them.

とでている。migrateしろってか?

やってみる。

aspberrypi:~/dreame python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
Applying polls.0001_initial... OK

なんか解らんが出来たっぽいのでもっかいサーバー起動

raspberrypi:~/dreamer $ python3 manage.py runserver 0:8000
Performing system checks...

System check identified no issues (0 silenced).
September 03, 2018 - 09:17:13
Django version 2.1, using settings 'dreamer.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.

 

繋がったっぽい!!

f:id:DreamerDream:20180903091928p:plain

保存、追加、編集もOKっぽい。

f:id:DreamerDream:20180903092117p:plain

おお!なんかよーわからんけど、とりあえず出来たので今回はここまで。

 

次回、情報はどう流れるのかの考察です。

dreamerdream.hateblo.jp

 

 

kampa.me