【Pythonを覚えよう】Djangoのデータベースのセットアップ - ますみのブログ

ますみのブログ

パソコンとかプログラミングに関するあれこれ発信してます
【Pythonを覚えよう】Djangoのデータベースのセットアップのサムネイル

【Pythonを覚えよう】Djangoのデータベースのセットアップ

2023年05月23日

このエントリーをはてなブックマークに追加

本日はドキュメントのこのページをやってみたいと思います。

 

データベース等の基本的なセットアップと管理画面の修正をして、アプリケーションを動かす準備をしていきます。

 

データベースの準備

Djangoには最初からSqlite3が備わっていて、何の準備もせずにデータベースを使えるようです。

わたしはMySQLが使えると何かと都合がいいのでいずれそうしたいですが、とりあえずDjangoデフォルトのSqlite3で動かしてみようと思います。

 

〇〇/settings.py

# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

データベースの設定はsettings.pyのこの部分で行うようです。

デフォルトのSqlite3を使うのであれば修正する必要はありません。

 

特に何も編集する必要もなさそうなので、下のコマンドでマイグレーション(データベースの作成、セットアップ)をします

python manage.py migrate

 

ターミナルにこのように表示されればOK

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 auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

 

作成したテーブルの確認

この工程はやらなくてもいいですが、一応見てみたいと思います。

先ほどのコマンドで作成されたデータベースのテーブル、カラムを見てみます。

 

このコマンドでデータベースにログインします

python manage.py dbshell

デフォルトではユーザー名、パスワードは必要ありません。

 

次に.tablesと入力してテーブル一覧を表示します。

auth_group                  auth_user_user_permissions
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session

 

PRAGMA table_info(テーブル名);と入力するとテーブルの中身を確認できます。

 

コマンド

PRAGMA table_info(auth_group);

出力

0|id|integer|1||1
1|name|varchar(150)|1||0

 

管理画面にログインしてみる

ドキュメントの順番を少し飛ばして、Djangoデフォルトの管理画面を使ってみたいと思います。

 

上は管理画面へのログイン画面です。

データベースにはログイン情報がまだ無いため、これから作っていきます。

 

管理ユーザー作成コマンドを使用して、ユーザー名、メールアドレス、パスワードをデータベースに登録します。

 

管理ユーザー作成には下のコマンドを使います

python manage.py createsuperuser

 

入力するとユーザー名、メールアドレス、パスワードを順番に聞かれるので入力していきます。

下の文字が一行ずつ表示されます。聞かれた内容に答えていきます。

Username (leave blank to use 'mashmy'):
Email address:
Password:
Password (again):

 

Usernameは空白だったら自動でこれにします(わたしの場合はmashmy)と表示されています。

とりあえずパスワードはpasswordにしようと思ったのですが

This password is too common.

Bypass password validation and create user anyway? [y/N]

と表示されました。

このパスワードは危ないよ?本当にこれで作りますか?

ということを言っています。

今はDjangoの使い方を覚えるという目的ですが、本番環境では特定されやすいパスワードは使うべきではありません。

パスワードの安全性を検証してくれるのはありがたいことです。

 

今回は特定されやすいパスワードでも問題ないので、Bypass password validation and create user anyway? [y/N]yと入力します。(yes という意味)

Superuser created successfully.と表示されたらOKです。

 

python manage.py createsuperuser
Username (leave blank to use 'mashmy'):
Email address: example@example.com
Password:
Password (again):
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

 

それでは管理画面にログインしてみましょう

先ほどのユーザー名とパスワードを入力します(私の場合はユーザー名 : mashmy、パスワード : password)

 

 

ログインに成功するとこんな画面になります。

 

では次に、自分でデータベースのテーブルを定義して管理画面で編集するためのセットアップをしていきます。

 

自分でテーブルを作る

作業工程はこんな感じです

  1. モデルを定義する(テーブルの構成を決める)
  2. 作ったモデルを有効化する(主体のアプリケーションで読み込めるようにする)
  3. マイグレーション実行(作ったモデルの内容でテーブルを作る)

 

モデルを定義する

ドキュメント通りに進めていきます

pollsというのは前回の記事で作成したDjangoプロジェクト内の小さなアプリケーションです。

 

pollsフォルダ内のmodels.pyを編集します

models.pyは最初はこんな感じになっていると思います。

from django.db import models

# Create your models here.

 

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)

 

ざっくりこんな感じで定義するようですね

class テーブル名(models.Model):

    カラム名 = models.カラム型(オプション)

 

作ったモデルを有効化する

主体のアプリケーションで先ほど編集したpolls/models.pyを読み込めるようにします。

 

主体のアプリケーション名/settings.pyINSTALLER_APPSという項目を見つけます(30行目あたりにありました)

# Application definition

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

 

ここにpollsの設定を追加します

INSTALLED_APPS = [
    "polls.apps.PollsConfig", # 追加
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

 

ここではpolls/apps.py内のPollsConfigというクラスを読み込むようです

polls/apps.py

from django.apps import AppConfig


class PollsConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'polls'

 

これで設定完了です。

次に定義したモデルの情報を元にテーブル作成をしていきます。

 

マイグレーション実行

ここでは2つの手順が必要です

まずはモデルからマイグレーションファイルを作成します。

その次にマイグレーションファイル実行でテーブルを作成します。

 

まずは以下のコマンドを実行します

python manage.py makemigrations polls

 

ターミナルにこのように表示されたら完了です

Migrations for 'polls':
  polls\migrations\0001_initial.py
    - Create model Question
    - Create model Choice

 

先ほどpolls/models.pyで定義した二つのクラスが表示されています。

 

もしもNo installed app with label 'polls'.と表示されたらsettings.pyに正しく"polls.apps.PollsConfig",と記入できているか確認してみてください。

 

先ほどターミナルに表示されたこの部分の名前のファイルが作成されたと思います。

Migrations for 'polls':
  polls\migrations\0001_initial.py # ここ!
    - Create model Question
    - Create model Choice

 

わたしはpolls/migrations/0001_initial.pyというファイルが作成されました。

次にこのファイルを実行してテーブル作成は完了です。

 

マイグレーションは以下のコマンドで実行します

python manage.py migrate

 

出力

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions   
Running migrations:
  Applying polls.0001_initial... OK

こうなったらOKです。

 

まだ管理画面には作成したテーブルは表示されません。

次に管理画面で作成したテーブルを読み込むための設定を追加します。

 

管理画面で作成したテーブルを読み込む

先ほどpolls/models.pyQuestionChoiseという二つのクラスを定義しました。

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)

 

このクラスごとに管理画面に表示する設定をしていきます。

とりあえずドキュメント通りにQuestionを管理画面に表示してみます。

 

polls/admin.pyを編集します

デフォルトではこんな感じだと思います

from django.contrib import admin

# Register your models here.

 

このファイルに以下の二行を追加します。

from django.contrib import admin
from .models import Question # 追加

admin.site.register(Question) # 追加

 

これでQuestionが編集可能になりました

 

 

+Addをクリックでデータの追加が行えます。

 

できた!

続きはまた次回!

 

まとめ

管理画面標準装備はものすごくいいですね。

パスワードの安全性チェックもポイント高いです。

今のところものすごく快適なフレームワークだな、という印象です。

 


 

 

最後まで読んでいただきありがとうございます!

 

質問や、こんなことを記事にしてほしい!というのがありましたらTwitterのコメント等で受け付けていますので、お気軽にどうぞ!

ますみ - 愛知県在住の20代プログラマー - | @mashmy_98

 

それでは次の投稿もお楽しみに!

よかったらSNSシェアお願いします!

facebookで共有する このエントリーをはてなブックマークに追加
【Pythonを覚えよう】Djangoのデータベースのセットアップのサムネイル

この記事を書いた人

ますみ

愛知県在住の20代プログラマーです!

プログラミングと無縁の専門学校を卒業して働き出しましたが、コロナ禍でほぼ無職に...

無職時代に独学でプログラミングを勉強して、未経験からめでたくプログラマーとして採用していただけました。

このブログを見た方が、わたしが独学で勉強していた時期に悩んでいたことで悩まないように...そう願いながら情報を発信しています!

ますみ

愛知県在住の20代プログラマーです!

プログラミングと無縁の専門学校を卒業して働き出しましたが、コロナ禍でほぼ無職に...

無職時代に独学でプログラミングを勉強して、未経験からめでたくプログラマーとして採用していただけました。

このブログを見た方が、わたしが独学で勉強していた時期に悩んでいたことで悩まないように...そう願いながら情報を発信しています!

ますみ

愛知県在住の20代プログラマーです!

プログラミングと無縁の専門学校を卒業して働き出しましたが、コロナ禍でほぼ無職に...

無職時代に独学でプログラミングを勉強して、未経験からめでたくプログラマーとして採用していただけました。

このブログを見た方が、わたしが独学で勉強していた時期に悩んでいたことで悩まないように...そう願いながら情報を発信しています!

おすすめレンタルサーバー


当サイトはXserverを利用しています。 HTML、CSSで作成したホームページはもちろん、wordpress、Laravel等で作成した高度なアプリケーションも利用可能です!

おすすめ記事


【Pythonを覚えよう】Djangoのルーティングの設定をしてみる

Djangoは、PythonのWebアプリケーションフレームワークです。Djangoを使用することで、Webアプリケーションの開発を簡単かつ迅速に行うことができます。さて、わたしの専門分野(?)はPHP、typescript等です。Pythonは基礎文法レベルなので、この機に触ってみようと思ってDjangoに挑戦することにしました本日はDjangoのルーティングについて勉強してみようと思います。とりあえず何か表示するこちらの記事で作成したプロジェクトの主となるフォルダにurls.pyというファイルがありますこのurls.pyというファイルではURLと関数等を結びつける役割をします。まず試しにルートhttp://127.0.0.1:8000にアクセスしたらHello, World!と表示してみます。mypage/urls.pyfrom django.http import HttpResponse # 追加from django.contrib import adminfrom django.urls import pathurlpatterns = [ path('', lambda request: HttpResponse("Hello, world!")), # 追加 path('admin/', admin.site.urls),]無名関数(ラムダ式)を使ってとりあえず画面に文字を表示させてみます。問題なくHello, world!と表示されたらOKです。さて、Djangoではプロジェクトの中にアプリケーションをいくつも持つ構造になっているようです。ドキュメント通りにpollsというアプリケーションを作成してみたいと思います。アプリケーション作成このコマンドでアプリケーションを作成します。python manage.py startapp pollsmanage.pyの部分はDjangoプロジェクトルートのmanage.pyを指定する必要があるため、必要に応じてパスを正確に指定します。こんな感じでpollsが生成されましたもちろんコマンドのpollsの部分は好きに変えて大丈夫です。python manage.py startapp ここが作成するアプリケーション名になるviews.pyを修正先ほど生成したpollsフォルダ内のviews.pyを修正していきますpolls/views.pyfrom django.shortcuts import render# Create your views here.初期状態でこんな感じだと思います。ドキュメント通り以下のコードを追加しますfrom django.http import HttpResponse # 追加from django.shortcuts import render# Create your views here.def index(request): # 追加 return HttpResponse("Hello, world. You're at the polls index.") # 追加この関数ではHello, world. Youre at the polls index.という文字のレスポンスを返します。つまり、あるURLにアクセスしたらこのindexという関数を呼ぶように設定すれば、画面にはHello, world. Youre at the polls index.と表示されるわけです。ではあるURLにアクセスしたらindexという関数を呼ぶという処理を、mypage/urls.pyとpolls/urls.pyに書いていきます〇〇/urls.pyにルーティングを追加どうやらDjangoでは、小さいアプリケーションでのルーティングを設定それを主体のアプリケーションで呼び出しといった流れでルーティングをしていくようです。当記事(ドキュメント通りですが)では、小さいアプリケーションがpolls、主体のアプリケーションがmypageになっています。ドキュメントを見た感じpollsにもurls.pyを作成し、それを主体のmypageのurls.pyで呼び出す必要があるっぽいですまずは小さいアプリケーションのpollsにurls.pyを作成してルーティングを設定します。polls/urls.pyfrom django.urls import pathfrom . import viewsurlpatterns = [ path("", views.index, name="index"),]これを大きいアプリケーションのmypageのurls.pyで呼び出しますmypage/urls.pyfrom django.contrib import adminfrom django.urls import include, pathurlpatterns = [ path("polls/", include("polls.urls")), path('admin/', admin.site.urls),]これでpolls/にアクセスしたらHello, world. Youre at the polls index.と表示されるようになります。今回のまとめDjangoは主となるアプリが小さいアプリをいくつも束ねて管理するフレームワークなのかな?イメージこれは慣れているLaravelやSymfonyにはない概念だったのでびっくりです。大規模なWebアプリケーションを管理するにはめちゃくちゃよさそうな感じがします。最後まで読んでいただきありがとうございます!質問や、こんなことを記事にしてほしい!というのがありましたらTwitterのコメント等で受け付けていますので、お気軽にどうぞ!ますみ - 愛知県在住の20代プログラマー - | @mashmy_98それでは次の投稿もお楽しみに!

Read More

【python入門】配列を使ってみよう!

こんにちは!プログラマーのますみです!今回はpythonで配列を使う方法をご紹介します!Pythonはこちらのサイトで簡単に動かしてみることができます!paiza.io是非実際にプログラムを書いてみながら変数の使い方を覚えてみてくださいね!配列ってなに?変数とはデータを格納するための箱のようなものです!プログラムの中で変数に値を格納しておくと、変数を書くだけで値を呼び出して、計算したり表示したりすることができます!pythonで配列を使う方法配列とは、複数のデータを一つの変数で扱うことができる仕組みのことです!例えば、pythonの場合は、以下のように配列を定義することができます!prices = [1000, 1200, 2000, 500]これは4種類の商品の価格を一つの配列に定義した例ですね、この配列を使ってどんな処理ができるのかを紹介していきます!配列を使うメリット配列をうまく使うことで、複数のデータに一括で処理を行うことに強いプログラムを書くことができます!例えば、上記のpricesという配列に定義した価格をすべて表示してみましょう!配列内の値すべてに処理を実行するには、pythonのmapという機能を使っていきます。prices = [1000, 1200, 2000, 500]for price in prices:    # ここに処理を書く!ではすべての価格を表示してみましょう!prices = [1000, 1200, 2000, 500]for price in prices:    print(price)こうすると、配列に格納されている価格を順番に表示することができます!※paiza.ioでコピペで動かしてみる場合、黄色い部分を一度消してTabキーを押してから実行してみてください!prices = [1000, 1200, 2000, 500]for price in prices: print(price)これだけでは味気ないので、価格の後に円と表示してみましょう!prices = [1000, 1200, 2000, 500]for price in prices:    print(str(price) + "円")これで1000円という形式で価格を表示することができました!さらに消費税を含めた価格を表示するようにしてみましょう!prices = [1000, 1200, 2000, 500]for price in prices:    print(str(price * 1.1) + "円")こんな感じで、配列を使うことでプログラミング言語に備わっている便利な機能を使える上、変更に強い良いソースコードが書けるようになります!今回はpythonでの配列の使い方を解説しました!このブログは、わたしがプログラミングを学習し始めたころに悩んでいたポイントをわかりやすく記事にして、わたしと同じ悩みを持つ方が少しでも減るように!と思って運用しています!共有やお気に入り登録していただけたら励みになりますので是非よろしくお願いします!それでは次の記事もお楽しみに!

Read More

【python入門】オブジェクトを使ってみよう!

こんにちは!プログラマーのますみです!今回はpythonでオブジェクトを使う方法をご紹介します!pythonはこちらのサイトで簡単に動かしてみることができます!paiza.io是非実際にプログラムを書いてみながらオブジェクトの使い方を覚えてみてくださいね!オブジェクトってなに?オブジェクトとは、プログラムの中で扱うデータを、そのデータに適した形でまとめたものです!例えば、pythonの場合は、以下のようにオブジェクトを定義することができます!product = {    'name': 'トマト',    'price': 150}例ではトマトという商品の情報をproductという変数に定義しています。このようにまとまった情報を一つの変数で管理できるため、さまざまな処理が書きやすいメリットがあります!オブジェクトを使った処理を書いてみよう!それではオブジェクトを使った処理の例を書いてみますね!product = {'name': 'トマト','price': 150}print('商品名は' + product['name'] + 'です')print('価格は' + str(product['price']) + 'です')こんな感じで、オブジェクトに格納された値を使うには、オブジェクト名前[オブジェクトの中身の名前]という感じで値を取り出すことができます!オブジェクトはこのように二階層、三階層というようにも定義できるのですがproduct = {'name': 'トマト','price': 150,'shop': {'name': '八百屋'}}この場合はproduct[shop][name]というように、productの中のshopの中のnameといった感じで指定していけば大丈夫です!そして、オブジェクトは配列に格納することもできます。products = [    {'name': 'トマト', 'price': 150},    {'name': 'にんじん', 'price': 120}]pythonの配列についての記事はこちらを是非読んでみてください!それではまず、商品の情報を順番に表示してみましょう!products = [    {        'name': 'トマト',        'price': 150    },    {        'name': 'にんじん',        'price': 120    }]for product in products:    print('商品名は' + product['name'] + 'です')    print('価格は' + str(product['price']) + 'です')これを実行してみると商品名はトマトです価格は150です商品名はにんじんです価格は120ですと表示できたと思います!それではこれを、商品名のリストと合計価格を表示するようにしてみましょう!少し複雑になりますが、こんな感じです!products = [    {        "name": "トマト",        "price": 150    },    {        "name": "にんじん",        "price": 120    }]productList = ""totalPrice = 0for product in products:    productList += product["name"] + "\n"    totalPrice += product["price"]print("商品リスト\n" + productList)print("合計価格\n" + str(totalPrice) + "円")pythonでは、+=と書くと対象の変数の値に追加するという書き方ができます。これを実行してみると商品リストトマトにんじん合計価格270円と表示されたと思います。こんな感じで、オブジェクトを使うことでデータをひとまとめに管理し、わかりやすいコードを書くことができます!今回はpythonでのオブジェクトの使い方を解説しました!このブログは、わたしがプログラミングを学習し始めたころに悩んでいたポイントをわかりやすく記事にして、わたしと同じ悩みを持つ方が少しでも減るように!と思って運用しています!共有やお気に入り登録していただけたら励みになりますので是非よろしくお願いします!それでは次の記事もお楽しみに!

Read More

人気記事


簡単に管理画面を作れるlaravel-adminのセットアップ方法を解説

こんにちは!エンジニアのますみです!本日はlaravel-adminのセットアップのやり方を解説します!laravel-adminとは PHPフレームワーク『Laravel』用の管理画面用ライブラリ 管理人用テーブル、管理画面のレイアウト、CRUDが一瞬で作れる リレーションにも対応した便利なフォームが既に準備されているlaravel-adminの公式ドキュメントはこちら目次 インストール コマンドで管理人のアカウントを作成する Modelから管理画面を作成する 管理画面にログインしてルーティングの設定を完了するインストールcomposerを使ってインストールしますcomposer require encore/laravel-admin:1.*インストールが完了したら以下のコマンドを実行しますphp artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"configディレクトリ内にadmin.phpが作成されます。admin.phpを編集して管理画面に関する様々な設定を行うことができます。その後、以下のコマンドを実行してセットアップを完了しますphp artisan admin:installこのコマンドを実行するとapp/Adminapp/Admin/Controllers/HomeController.php app/Admin/Controllers/AuthController.php app/Admin/Controllers/ExampleController.phpapp/Admin/bootstrap.phpapp/Admin/routes.phpが作成されます。特に編集することが多いのはapp/Admin/routes.phpです。このファイルを編集してテーブルごとのルーティングを定義します。app/Admin/Controllers/ExampleController.phpはサンプルとして作成されるだけなので消してしまっても良いです。コマンドで管理人のアカウントを作成する以下のコマンドを実行すると管理人アカウントを作成できます。php artisan admin:create順番にユーザーネーム、パスワード、名前を聞かれるので入力していきます。 Please enter a username to login: ますみ Please enter a password to login: Please enter a name to display: ますみこのように表示されたら完了です。User [ますみ] created successfully.http://localhost:8000/adminにアクセスして、先ほど設定したusernameとpasswordを入力してログインできます。管理画面ダッシュボードはこんな感じです。Modelから管理画面を作成するlarave-adminはadmin:makeコマンドを使用して管理画面を作成できます。php artisan admin:make 作成するコントローラー名 --model=モデルのパス例えばこのようなモデルがあったなら?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Blog extends Model{ use HasFactory; protected $fillable = [ 'title', 'text' ];}こんな感じでBlogモデルの管理画面を作成できます。php artisan admin:make BlogController --model=App\\Models\\Bloglaravel-adminは自動でテーブルのカラムを読み込み管理画面を設定してくれますが、マイグレーションを行う前に上記のコマンドを実行してしまうと、空のコントローラーが作成されてしまいます。ターミナルには親切にapp/Admin/routes.phpにこのコードを追加してねと表示されると思います。INFO App\Admin\Controllers\BlogController [C:\Users\mashmy\laravel-admin\app/Admin/Controllers/BlogController.php] created successfully.Add the following route to app/Admin/routes.php: $router-resource('blogs', BlogController::class);app/Admin/routes.phpに上記のソースコードを追加しないと、作成したBlog用管理画面にアクセスできません。app/Admin/routes.php?phpuse Illuminate\Routing\Router;Admin::routes();Route::group([ 'prefix' = config('admin.route.prefix'), 'namespace' = config('admin.route.namespace'), 'middleware' = config('admin.route.middleware'), 'as' = config('admin.route.prefix') . '.',], function (Router $router) { $router-get('/', 'HomeController@index')-name('home'); $router-resource('blogs', BlogController::class);});このようにルーティングの設定をします。コントローラーを作成するたびにapp/Admin/routes.phpを編集してルーティングの設定を行っていきます。作成されたコントローラーはこんな感じで、カラムを自動で読み込みセットアップしてくれています。?phpnamespace App\Admin\Controllers;use App\Models\Blog;use Encore\Admin\Controllers\AdminController;use Encore\Admin\Form;use Encore\Admin\Grid;use Encore\Admin\Show;class BlogController extends AdminController{ /** * Title for current resource. * * @var string */ protected $title = 'Blog'; /** * Make a grid builder. * * @return Grid */ protected function grid() { $grid = new Grid(new Blog()); $grid-column('id', __('Id')); $grid-column('title', __('Title')); $grid-column('text', __('Text')); $grid-column('created_at', __('Created at')); $grid-column('updated_at', __('Updated at')); return $grid; } /** * Make a show builder. * * @param mixed $id * @return Show */ protected function detail($id) { $show = new Show(Blog::findOrFail($id)); $show-field('id', __('Id')); $show-field('title', __('Title')); $show-field('text', __('Text')); $show-field('created_at', __('Created at')); $show-field('updated_at', __('Updated at')); return $show; } /** * Make a form builder. * * @return Form */ protected function form() { $form = new Form(new Blog()); $form-text('title', __('Title')); $form-textarea('text', __('Text')); return $form; }}このままではブログの管理画面にはアクセスできません。管理画面から作成した管理ページを表示するための設定を行う必要があります。管理画面にログインしてルーティングの設定を完了する管理画面にログインしたら画面左側のメニューからMenuをクリックします。表示された画面で先ほどコマンドで作成したBlog用管理画面へのルーティングを設定します。Parentはメニューのどこに表示するかを指定できます。ROOTにした場合は左側のメニューバーにそのまま表示されます。この状態で例えばAdminを設定すると、メニューバーのAdmin内のリストに追加されます。Titleは好きな名前で大丈夫ですが、URLはテーブル名を指定する必要があります。今回はParentにROOTを指定したので、メニューバーにアイコンが追加されました。作成されたアイコンをクリックまたはマウスカーソルを当てると、指定したタイトルのボタンが表示されます。今回はTitleはブログと指定したのでブログと表示されます。ボタンをクリックするとブログ用の管理画面にアクセスできました。右上のNewボタンをクリックすると編集画面にアクセスできます。編集画面は既にTitleとText用のフォームが自動で設定されています。素晴らしい...データを保存する処理も自動でやってくれているので、このまま編集してSubmitをクリックすれば入力したデータがデータベースに保存できます。おしまいこんな感じで簡単に管理画面のセットアップができました!Laravelの管理画面用ライブラリの中では有名なものだと思っているのですが、意外と記事が無かったので解説記事を書いてみました!質問や、こんなことを記事にしてほしい!というのがありましたらTwitterのコメント等で受け付けていますので、お気軽にどうぞ!ますみ - 愛知県在住の20代プログラマー - | @mashmy_98それでは次の投稿もお楽しみに!

Read More

文字が一文字ずつ現れるアニメーションの作り方【HTML、CSS】

こんにちは!エンジニアのますみです!本日はCSSで作れる文字が一文字ずつ表れるアニメーションの作り方とサンプルを紹介します!目次 一文字ずつペラペラ現れるアニメーション 文字が下からスライドして現れる 文字が上からふわっと降ってくる 一文字ずつ横からスライドして現れるそれではさっそく見ていきましょう一文字ずつペラペラ現れるアニメーションS a m p l e T e x t再生HTMLdiv span class='text' style="animation-delay: 0s"S/span span class='text' style="animation-delay: 0.2s"a/span span class='text' style="animation-delay: 0.4s"m/span span class='text' style="animation-delay: 0.6s"p/span span class='text' style="animation-delay: 0.8s"l/span span class='text' style="animation-delay: 1s"e/span span class='text' style="animation-delay: 1.2s" /span span class='text' style="animation-delay: 1.4s"T/span span class='text' style="animation-delay: 1.6s"e/span span class='text' style="animation-delay: 1.8s"x/span span class='text' style="animation-delay: 2s"t/span/divCSS.text { display: inline-block; font-size: 2rem; font-family: "Ryumin ExtraBold KL"; letter-spacing: -0.15rem; animation: text-animation 0.8s forwards; transform: rotateY(90deg);}@keyframes text-animation { 0% { transform: rotateY(90deg); } 100% { transform: rotateY(0deg); }}@keyframesはCSSでアニメーションを定義できるプロパティです。transformと:hoverや:focus等の疑似クラスの組み合わせでもアニメーションは作成可能ですが、@keyframesは より複雑なアニメーションが作れる マウスホバーやフォーカス等の操作に関係なくアニメーションをスタートできるといったメリットがあります。Sample Textという文字を一文字ずつspanで区切り、文字ごとにアニメーションをスタートするタイミングを変えることで順番に文字が現れるアニメーションを作ることができます。文字が下からスライドして現れる再生HTMLdiv class="container" span class='text' style="animation-delay: 0s"S/span span class='text' style="animation-delay: 0.2s"a/span span class='text' style="animation-delay: 0.4s"m/span span class='text' style="animation-delay: 0.6s"p/span span class='text' style="animation-delay: 0.8s"l/span span class='text' style="animation-delay: 1s"e/span span class='text' style="animation-delay: 1.2s" /span span class='text' style="animation-delay: 1.4s"T/span span class='text' style="animation-delay: 1.6s"e/span span class='text' style="animation-delay: 1.8s"x/span span class='text' style="animation-delay: 2s"t/span/divCSS.container { overflow: hidden;}.text { display: inline-block; font-size: 2rem; font-family: "Ryumin ExtraBold KL"; letter-spacing: -0.15rem; animation: llfsdi-text-animation 0.8s forwards; transform: translateY(3rem);}@keyframes text-animation { 0% { transform: translateY(3rem); } 100% { transform: translateY(0rem); }}基本的な部分は先ほどと同様、@keyframesとanimation-delayによるアニメーション開始時間の調整で作ることができます。親要素にoverflow : hiddenを指定して、文字が下の方にいる時に表示されないようにします。文字が上からふわっと降ってくる再生HTMLdiv span class='text' style="animation-delay: 0s"S/span span class='text' style="animation-delay: 0.2s"a/span span class='text' style="animation-delay: 0.4s"m/span span class='text' style="animation-delay: 0.6s"p/span span class='text' style="animation-delay: 0.8s"l/span span class='text' style="animation-delay: 1s"e/span span class='text' style="animation-delay: 1.2s" /span span class='text' style="animation-delay: 1.4s"T/span span class='text' style="animation-delay: 1.6s"e/span span class='text' style="animation-delay: 1.8s"x/span span class='text' style="animation-delay: 2s"t/span/divCSS.text { display: inline-block; font-size: 2rem; font-family: "Ryumin ExtraBold KL"; letter-spacing: -0.15rem; animation: llfsdi-text-animation 0.8s forwards; transform: translateY(-1rem); opacity: 0;}@keyframes text-animation { 0% { opacity: 0; transform: translateY(-1rem); } 100% { opacity: 1; transform: translateY(0rem); }}こちらのサンプルでは透明度を調整するopacityも追加しました。他のアニメーションにもopacityを追加するとふわっと現れるアニメーションになります。お好みでカスタマイズしてみてください。一文字ずつ横からスライドして現れる再生HTMLdiv span class='text'span style="animation-delay: 0s"S/span/span span class='text'span style="animation-delay: 0.2s"a/span/span span class='text'span style="animation-delay: 0.4s"m/span/span span class='text'span style="animation-delay: 0.6s"p/span/span span class='text'span style="animation-delay: 0.8s"l/span/span span class='text'span style="animation-delay: 1s"e/span/span span class='text'span style="animation-delay: 1.2s" /span/span span class='text'span style="animation-delay: 1.4s"T/span/span span class='text'span style="animation-delay: 1.6s"e/span/span span class='text'span style="animation-delay: 1.8s"x/span/span span class='text'span style="animation-delay: 2s"t/span/span/divCSS.text-container { overflow: hidden;}.text { display: inline-block; font-size: 2rem; font-family: "Ryumin ExtraBold KL"; overflow: hidden;}.text span{ display: block; animation: llfsdij1-text-animation 0.8s forwards; transform: translateX(-2rem);}@keyframes text-animation { 0% { opacity: 0; transform: translateX(-1rem); } 100% { opacity: 1; transform: translateX(0rem); }}一文字ずつ横スライドして現れるように見せるには、HTMLも修正する必要があります。テキストをさらに一階層深い要素にし、テキストの親要素にoverflow : hiddenを指定してテキストが横から現れて見えるようにする必要があります。最後まで読んでいただきありがとうございます!質問や、こんなことを記事にしてほしい!というのがありましたらTwitterのコメント等で受け付けていますので、お気軽にどうぞ!ますみ - 愛知県在住の20代プログラマー - | @mashmy_98それでは次の投稿もお楽しみに!

Read More

Laravelのページネーションを自分でデザインする

こんにちは!エンジニアのますみです!本日はLaravelのページネーションを自分でデザイン、カスタマイズする方法を解説します!目次 まずは普通に表示 Viewテンプレートを変更する アプリ全体のページネーション用Viewテンプレートを変更する 自作のページネーション用Viewテンプレートを編集する テンプレートを自分でデザインする際に重要なプロパティ一覧 $paginator-hasPages() $paginator-onFirstPage() $paginator-currentPage() $paginator-lastPage() $paginator-perPage() $paginator-total() $paginator-count() $paginator-firstItem() $paginator-lastItem() $paginator-hasMorePages() $paginator-nextPageUrl() $paginator-previousPageUrl() デフォルトのテンプレートをアレンジして使うまずは普通に表示div {{ $collection-paginate(24)-links() }}/divLaravelはデフォルトでtailwindcssのテンプレートを使用しています。とりあえず表示させたいのであればCDNをヘッダーに追加して確認してみてください。https://tailwindcss.com/head script src="https://cdn.tailwindcss.com"/script/headこんな感じで表示されたらOKです。Viewテンプレートを変更するlinks()のかっこの中にViewテンプレートのパスを指定します。resources/views/components/paginate.blade.phpにテンプレートを作成した場合はcomponents.paginateをかっこの中に書きます。div {{ $collection-paginate(24)-links('components.paginate') }}/divこれでページネーションのテンプレートが指定したbladeファイルに置き換わります。アプリ全体のページネーション用Viewテンプレートを変更する上の書き方は、bladeファイルごとにページネーション用Viewテンプレートを指定できます。もしページごとにページネーションのテンプレートを変える必要がなく、統一してもよいのであれば、app/Providers/AppServicePrivider.phpを編集してアプリ全体のページネーション用Viewテンプレートを変更しておきましょう。app/Providers/AppServicePrivider.php?phpnamespace App\Providers;use Illuminate\Pagination\Paginator; // 追加use Illuminate\Support\ServiceProvider;class AppServiceProvider extends ServiceProvider{ /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { Paginator::defaultView('components.paginate'); // 追加 }}自作のページネーション用Viewテンプレートを編集するViewテンプレートには、ページ送りに関する情報が$paginaterに格納されて送られます。blade上で@dump($paginator)とするとプロパティを見ることができます。テンプレートを自分でデザインする際に重要なプロパティを解説します。テンプレートを自分でデザインする際に重要なプロパティ一覧$paginator-hasPages()コレクションの要素数がpaginate(数値)の数値以上あり、ページ送りをする必要があるかをbooleanで返します。基本的には1ページ目にすべてのデータを表示できたらページネーションボタンを表示する必要はないため、ページネーションボタンを表示するかどうかを判定するのに使えます。使用例@if ($paginator-hasPages()) {{-- ここにページネーションボタンを作成 --}}@endif$paginator-onFirstPage()現在のページが最初のページかどうかをbooleanで返します。最初のページにいる場合は、前のページのリンクを無効にする必要があるためこのプロパティを使用して判定することができます。使用例@if ($paginator-onFirstPage()) span戻る/span@else a href="{{ $paginator-previousPageUrl() }}"戻る/a@endif$paginator-currentPage()現在のページの番号を返します。使用例span{{ $paginator-currentPage() }}ページ目/span$paginator-lastPage()最後のページの番号を返します。使用例span{{$paginator-lastPage()}}ページ中{{ $paginator-currentPage() }}ページ目です/span$paginator-perPage()1ページあたりの表示件数を返します。使用例span{{$paginator-perPage()}}件ずつ表示/span$paginator-total()コレクションの総数を返します。使用例span全{{$paginator-total()}}件/span$paginator-count()現在のページに表示される要素数を返します。使用例span{{$paginator-count()}}件表示/span$paginator-firstItem()現在のページの最初の要素の番号を返します。使用例span{{$paginator-firstItem()}}~{{ $paginator-lastItem() }}を表示しています/span$paginator-lastItem()現在のページの最後の要素の番号を返します。使用例span{{$paginator-firstItem()}}~{{ $paginator-lastItem() }}を表示しています/span$paginator-hasMorePages()現在のページが最後のページではない場合、つまり次のページがある場合にtrueを返します。最後のページにいる場合は、次のページのリンクを無効にする必要があるためこのプロパティを使用して判定することができます。使用例@if($paginator-hasMorePage()) ​a href="{{ $paginator-nextPageUrl() }}"次へ/a@endif$paginator-nextPageUrl()次のページのURLを返します。使用例​a href="{{ $paginator-nextPageUrl() }}"次へ/a$paginator-previousPageUrl()前のページのURLを返します。使用例 a href="{{ $paginator-previousPageUrl() }}"戻る/aデフォルトのテンプレートをアレンジして使うphp artisan vendor:publish --tag=laravel-paginationこのコマンドを実行すると、resources/views/vendor/pagination/にLaravelのデフォルトのテンプレートが作成されます。resources/views/vendor/pagination/ default.blade.php simple-default.blade.php bootstrap-5.blade.php simple-bootstrap-5.blade.php bootstrap-4.blade.php simple-bootstrap-4.blade.php tailwind.blade.php simple-tailwind.blade.php semantic-ui.blade.php bulma.blade.php生成されたテンプレートは、既にページ数に応じたボタンの無効化判定などがされており、これを元にアレンジして使うのもおすすめです。最後まで読んでいただきありがとうございました!質問や、こんなことを記事にしてほしい!というのがありましたらTwitterのコメント等で受け付けていますので、お気軽にどうぞ!ますみ - 愛知県在住の20代プログラマー - | @mashmy_98それでは次の投稿もお楽しみに!

Read More