1分でシンプルなPythonのdjango todoアプリを開発する


ハロー・ジャンゴ


Completed App |
Django Official Website |
Getting Started

  • プロジェクトのディレクトリを作成して移動します

    mkdir hello-django && cd hello-django



  • Python仮想環境の作成と活性化

    python3 -m venv venv
    source venv/bin/activate



  • プロジェクトを作成する

    django-admin startproject todoapp



  • Djangoプロジェクトフォルダに移動しますtodoapp サーバを実行する

    cd todoapp
    python manage.py runserver



  • Ctrlキーを押しながらサーバーを終了し、プロジェクト内のアプリケーションコンポーネントを作成しますtodolist

    python manage.py startapp todolist


  • アプリケーションのリストにアプリケーションコンポーネントを追加するtodoapp/settings.py アプリケーション
  • INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'todolist', /* added line */
    ]
    
  • ビューを追加するにはtodolist/views.py
  • # Create your views here.
    def index(request):
        return render(request, "base.html", { "todo_list": todos })
    
  • 各ビューに対して、ルートをファイルに登録するurls.py ビューと同じトドストのディレクトリに作成されます.
  • from django.urls import path
    from . import views
    
    urlpatterns = [
        path("", views.index, name="index")
    ]
    
  • 使用するinclude 関数を追加するtodoapp/urls.py メインアプリで.
  • from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('todolist.urls')),
    ]
    
  • クリエイトtemplates/base.html ToDoAppとToolistディレクトリと同じレベルに座っているプロジェクトルートディレクトリのファイル.
    Jjangoによって必要な小さな変更を行う
  •                 {% csrf_token %}
    
  • ToDoApp/設定に移動します.Pyとtemplates ディレクトリDIR 配列のエントリTEMPLATES 配列.
  • TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': ['templates'], /* modified */
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
  • 内部のトドストモデルを定義するtodolist/models.py
  • from django.db import models
    
    # Create your models here.
    class Todo(models.Model):
        title=models.CharField(max_length=350)
        complete=models.BooleanField(default=False)
    
        def __str__(self):
            return self.title
    

  • ランpython manage.py makemigrations
  • このコマンドはモデルtodo
  • その後、実行python manage.py migrate
  • 管理パネルのスーパーユーザーを作成するpython manage.py createsuperuser次に、名前、電子メール、パスワードを作成する命令に従ってください
  • 移動するtodolist/admin.py モデルを登録する
  • from django.contrib import admin
    from .models import Todo
    
    # Register your models here.
    admin.site.register(Todo)
    
  • いいえtodolist/views.py TODOモデルをインポート
  • from django.shortcuts import render
    from .models import Todo
    
    # Create your views here.
    def index(request):
        todos = Todo.objects.all()
        return render(request, "base.html", { "todo_list": todos })
    
  • サーバーを再度実行し、テストpython manage.py runserver
  • 開発サーバーの起動http://127.0.0.1:8000/
    レコードを追加しようとすると、スローしてエラーになります.
    しかし、ToDoAppは管理パネルhttp://127.0.0.1:8000/admin
  • 行方不明のビューを実装するにはtodolist/views.py
  • from django.shortcuts import render, redirect
    from django.views.decorators.http import require_http_methods
    
    from .models import Todo
    
    # Create your views here.
    def index(request):
        todos = Todo.objects.all()
        return render(request, "base.html", { "todo_list": todos })
    
    @require_http_methods(["POST"])
    def add(request):
        title = request.POST["title"]
        todo = Todo(title=title)
        todo.save()
        return redirect("index")
    
    def update(request, todo_id):
        todo = Todo.objects.get(id=todo_id)
        todo.complete = not todo.complete
        todo.save()
        return redirect("index")
    
    def delete(request, todo_id):
        todo = Todo.objects.get(id=todo_id)
        todo.delete()
        return redirect("index")
    
    
  • ビューをurlpatternに追加するtodolist/urls.py
  • from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.index, name='index'),
        path('add', views.add, name='add'),
        path('delete/<int:todo_id>/', views.delete, name='delete'),
        path('update/<int:todo_id>/', views.update, name='update'),
    ]
    

    テンプレート/ベース。HTML


    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Todo App - Django</title>
            <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.css">
            <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.js"></script>
        </head>
        <body>
            <div style="margin-top: 50px;" class="ui container">
                <h1 class="ui center aligned header">Django ToDo App</h1>
    
                <form class="ui form" action="/add" method="post">
                    <div class="field">
                        <label>Todo Title</label>
                        <input type="text" name="title" placeholder="Enter ToDo task...">
                        <br>
                    </div>
                    <button class="ui blue button" type="submit">Add</button>
                </form>
    
                <hr>
    
                {% for todo in todo_list %} 
                <div class="ui segment">
                    <p class="ui big header">{{ todo.id }} | {{ todo.title }}</p>
    
                    {% if todo.complete == False %}
                    <span class="ui gray label">Not Complete</span>
                    {% else %}
                    <span class="ui green label">Complete</span>
                    {% endif %}
    
                    <a class="ui blue button" href="/update/{{ todo.id }}">Update</a>
                    <a class="ui red button" href="/delete/{{ todo.id }}">Delete</a>
    
                </div>
                {% endfor %}
    
            </div>
    
    
        </body>
    
    </html>
    
    
    最後に、アプリを再起動python manage.py runserver またはリフレッシュ.
    レビューアプリでhttp://127.0.0.1:8000/ そして、箱からAdmin Panel
    コミットし、コードをGithubにプッシュします.COMと仮想envを無効にします.
    $ deactivate
    $ conda deactivate

    📚 SAMの他のブログ


  • Hashnode.dev | Medium.com
  • Github