Djangoを勉強してみる_モデルを学ぶ_その3(入門編)

django-339744_640.png Django

前回の続きで、Djangoについて学んでいきます。

今回もモデルについて勉強していきます。

Djangoの勉強内容は以下の本を参考にしています。

参考

Python Django3超入門 (日本語) 単行本 – 2020/6/13 掌田 津耶乃 (著)

モデル

コードは以前の記事を参考にしてください。

Djangoを勉強してみる(入門編)
Djangoを勉強してみる(入門編その2)
Djangoを勉強してみる_urlを学ぶ(入門編)
Djangoを勉強してみる_テンプレートを学ぶ(入門編)
Djangoを勉強してみる_テンプレートを学ぶ_その2(入門編)
Djangoを勉強してみる_フォームを学ぶ_その1(入門編)
Djangoを勉強してみる_フォームを学ぶ_その2(入門編)
Djangoを勉強してみる_フォームを学ぶ_その3(入門編)
Djangoを勉強してみる_モデルを学ぶ_その1(入門編)
Djangoを勉強してみる_モデルを学ぶ_その2(入門編)

今回の目的

前回はモデルのデータベースのデータを表示することをしました。

今回からしばらくCRUDについて勉強していこうと思います。

CRUDとは

データベースを操作するときの基本機能のことを「CRUD(クラッド)」といいます。

これらはそれぞれの頭文字「CREATE」、「READ」、「UPDATE」、「DELETE」を合わせた文字です。

文字の意味はそのままの通りです。

CREATE:新規作成
READ:読み込み
UPDATE:更新
DELETE:削除

前回の一覧の表示はREADの部分になります。
今回はCREATE(新規作成)の部分を勉強していきます。

ではさっそく作っていきます。

データを新規作成する

新規作成するためには、「データを乳りょっくして、そのデータを保存する」という行為が必要です。

そのために、Djangoでは次のような書き方をします。
以下は前回のFriendモデルを例にしています。

friend = Frend()
friend変数にデータを入力
friend.save()

実際にコードを書いていきます。
まずはデータを入力するためにforms.pyを編集します。

1.forms.pyを編集

ファイル:sample_app>hello>forms.py

コード:

from django import forms

class HelloForm(forms.Form):
    name = forms.CharField(label='Name')
    mail = forms.EmailField(label='Mail')
    age = forms.IntegerField(label='Age')
    gender = forms.BooleanField(label='Gender', required=False)
    birthday = forms.DateField(label='Birthday')

続いて新規作成用の画面を準備します。

2.create.htmlを作成・編集

ファイル:sample_app>hello>templates>hello>create.html

コード:

<!DOCTYPE html>
<html lang="ja">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">

    <title>{{ title }}</title>
</head>
<body class = "container">
    <h1>{{ title }}</h1>
    <form action="{% url 'create' %}" method=post>
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="登録" class="btn btn-primary">
    </form>
</body>
</html>

次にindex画面から新規画面で呼び出せるように編集します。

3.index.htmlを編集

ファイル:sample_app>hello>templates>hello>index.html

コード:

<!DOCTYPE html>
<html lang="ja">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">

    <title>{{ title }}</title>
</head>
<body class = "container">
    <h1>{{ title }}</h1>
    <p>{{ msg|safe }}</p>
    <a href="{% url 'create' %}" class="btn btn-primary">新規作成</a>
    <table class="table">
        <tr>
            <th>ID</th>
            <th>NAME</th>
            <th>GENDER</th>
            <th>MAIL</th>
            <th>AGE</th>
            <th>BIRTHDAY</th>
        </tr>
    {% for item in data %}
        <tr>
            <td>{{ item.id }}</td>
            <td>{{ item.name }}</td>
            <td>{% if item.gender == False %}male{% endif %}
                {% if item.gender == True %}female{% endif %}</td>
            <td>{{ item.mail }}</td>
            <td>{{ item.age }}</td>
            <td>{{ item.birthday }}</td>
        </tr>
    {% endfor %}
    </table>

次はviews.pyに新規作成のコードを追加します。

4.views.pyを編集

ファイル:sample_app>hello>views.py

コード:

from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from .models import Friend
from .forms import HelloForm

def index(request):
    data = Friend.objects.all()
    params = {
        'title': 'Hello World!!',
        'msg': 'ALL Friends',
        'data': data,
    }
    return render(request, 'hello/index.html', params)

#create
def create(request):
    params = {
        'title': '新規作成画面',
        'form': HelloForm(),
    }

    if(request.method=='POST'):
        name = request.POST['name']
        mail = request.POST['mail']
        gender = 'gender' in request.POST
        age = int(request.POST['age'])
        birthday = request.POST['birthday']
        friend = Friend(name=name,mail=mail,gender=gender,age=age,birthday=birthday)
        friend.save()
        return redirect(to='/hello')
    return render(request, 'hello/create.html', params)

新規でcreateメソッドを追加しています。

createメソッドの動作としては、POSTメソッドでデータがきた時にPOSTでっきたデータを各変数へ代入して、最後にデータをFriendインスタンスを作成して、保存(friend.save())しています。

「return redirect」は引数のtoに指定したアドレスにリダイレクトするためのコードになります。

最後はurl.pyを編集して終わりです。

5.urls.pyを編集

ファイル:sample_app>hello>urls.py

コード:

from django.urls import path
from . import views

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

以上で設定が終わったので、動作確認してみます。

動作確認

python manage.py runserver

ブラウザで以下にアクセスします。

http://localhost:8000/hello

index画面に新規作成ボタンができました。

これをクリックしてみます。

新規登録画面へ遷移します。

最後に次のデータを入力して登録します。

Name:テストデータ4
Mail:test@hoge.co.jp
Age:40
Gender:チェック
Birthdasy:1980-10-10

ちゃんとデータが登録できました。

今回の目的であるCRUDのCreate(新規登録)することができました。

次回はもう少しCreateついて勉強していこうと思います。

以上です。ありがとうございました。

P.S.

勉強を継続することが苦手ですか?

少し前からココナラというサービスで習慣化のテクニックについて教えるサービスを始めました。

もし、いつも3日坊主で終わってしまうという方や、ダイエットを続けたい、勉強したい、運動したいなど何か習慣化したいと思っている方がいましたら全力でサポートしますので、まずは覗いてみてください。

すでに何人かの方に実践してもらって効果が出ているという感想をいただいてます。

人生変わる?【習慣化の方法】を教えます 【残り1名】ダイエット、勉強、運動を続けることが苦手ですか?

コメント

タイトルとURLをコピーしました