今回は参考ブログを変更して↓こちらのチュートリアルを参考に作業をしてみます。
はじめての 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, includeurlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
ここで動作確認しましょうとのことなのでサーバーを立ち上げ
raspberrypi:~/dreamer $ sudo python3 manage.py runserver 0:8000
確認して、うまくいくとHelloworld...〜〜と表示されるはずー
なんでじゃー!!凹
けど、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
結果
今度は成功!!!なんとなーく解って来たぞ。
ここからの参考ページ
はじめての 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.
ブラウザからアクセスすると
ん???
いつもと違った場所からアクセスしたせいか、エラーが出ました。
けどHTTPHOSTにlocalhost:8000が無いから無理ー!というメッセージです。
raspberrypi:~/dreamer $ nano dreamer/settings.py
で設定を変更します。
アドレスを書いても良いのですが、
ALLOWED_HOSTS = ['*']
と書くとどこからでもアクセス可能になるそうです。
すると、つながった〜!
ログインします。
GUIでユーザー管理が出来るページが自動で作成されるんですね。便利〜!
次はpoll(投票)アプリと結びつけます。
次に pollアプリをadminサイト上で編集できるようにするのです。
raspberrypi:~/dreamer $ nano polls/admin.py
Questionという部品をインポートするのですね。
from django.contrib import admin
# Register your models here.
from .models import Questionadmin.site.register(Question)
でそのままブラウザでアクセスすると
ちゃんと追加されてる!
Question追加を押すと、追加出来るページが表示されました!
ところが、Questionを押すと参考ページのようにはならずエラー凹
よーわからんっ!
わからんけどデータベースで必用な情報が見つからないらしい。
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.
繋がったっぽい!!
保存、追加、編集もOKっぽい。
おお!なんかよーわからんけど、とりあえず出来たので今回はここまで。
次回、情報はどう流れるのかの考察です。