

Djangで次のようなアプリを作りたいです。入力フォームから、名前や価格を送信。データベース(Djangoのデフォルト)に保存。保存したデータベースをスプレッドシートに書き出す。  
以上の機能を持たせたいのですが、どのようなファイル構成やコードが考えられますか？  
少しでも、道筋、手順を示していただけるとありがたいです。


CC BY-SA 4.0
2023-06-02T00:08:42.407
95063
2023-06-02T05:49:45.047
58555
question
django
DjangoでWebアプリを作りたい。


djangoをインストール、設定する手順です。  
とりあえず、クリーンな状態でdjangoが起動するところまで、記載しました。  
（質問内容のほぼすべてが記載された書籍がいろいろあり、お勧めです。）

[前提条件]  
WindowsのWSL2 + Ubuntuを利用

1)djangoのインストール、環境設定

[code]

    python3 -m venv venv
    source venv/bin/activate
    pip3 install django
    
[/code]

2)djangoのプロジェクト、アプリケーションの作成

[code]

    django-admin startproject test_project
    cd test_project
    python3 manage.py startapp test_app
    
[/code]

3)アプリケーションの設定  
[test_project/test_project/settngs.py]をエディタで開き[INSTALLED_APPS]配列の末尾に、

[code]

    'test_app.apps.TestAppConfig',を追加する。
    
[/code]

4)データベースの初期化

[code]

    python3 manage.py makemigrations
    python3 manage.py migrate
    python3 manage.py createsuperuser
    →UsernameとPasswordを入力すること
    
[/code]

5.djangoテスト実行

[code]

    python3 manage.py runserver
    
[/code]

ブラウザより<http://localhost:8000/>へアクセス  
および  
ブラウザより<http://localhost:8000/admin>へアクセス  
作成したユーザーでログインできればOK  
ctrl + Cでdjangoを終了できる。


CC BY-SA 4.0
2023-06-02T05:08:36.680
95068
2023-06-02T05:45:28.223
2023-06-02T05:45:28.223
95063
answer


・フォルダ構成  
フォルダ構成は、  
test_proj/test_proj ← プロジェクトフォルダ  
test_proj/test_app ← アプリケーションフォルダ  
プロジェクトの中に、複数のアプリケーション(サブサイト)が包含される関係になります。

アプリケーションフォルダ内の、ファイル構成は、  
・urls.py  
リクエストの振り分け（projectフォルダ内にもあるので注意）を行います。  
リクエストがきたら、どのviewを利用して、どのHTMLテンプレートを利用するか、指定します。  
・views.py  
サーバーサイドの処理を記載します。  
モデルクラスの参照更新(データベースアクセス)、HTMLへ表示する項目を作成します。  
・models.py  
データベースのテーブルをORMしたクラス  
・templateフォルダ  
html、htmlテンプレートを記載します。

・データベース(Djangoのデフォルト)に保存  
モデルクラスを作成するとよいです。  
小規模であれば、一般的に[test_proj/test_app/models.py]に記載します。

[code]

    ################################################################################
    from django.db import models
    CATEGORY = (('business', 'ビジネス'), ('life', '生活'), ('other', 'その他'))
    
    class Book(models.Model):
        title = models.CharField(max_length=100)
        text = models.TextField()
        thumbnail = models.ImageField(null=True, blank=True)
        category = models.CharField(
            max_length=100,
            choices = CATEGORY,
        )
        user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    
        def __str__(self):
            return self.title
    
[/code]

[test_proj/test_app/admin.py]ファイルに、

[code]

    admin.site.register(Book)
    
[/code]

と追記することで、デフォルトの管理者サイトからデータを確認することができます。

・入力フォームから、名前や価格を送信。  
入力フォームなどのhtmlは、[test_proj/test_app/template/]フォルダに保存します。  
どのようなリクエストがきたら、どのhtmlファイルを利用するかは、[test_proj/test_app/urls.py]に記載します。  
サーバーサイドでの処理は、[test_proj/test_app/views.py]に記載します。

・保存したデータベースをスプレッドシートに書き出す。  
スプレッドシートに書き出す処理は、分かりません。  
他の方の回答を期待してください。


CC BY-SA 4.0
2023-06-02T05:43:31.460
95070
2023-06-02T05:49:45.047
2023-06-02T05:49:45.047
95063
answer