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-project 폴더todoapp로 이동하고 서버를 실행합니다.

    cd todoapp
    python manage.py runserver



  • Ctrl + C를 사용하여 서버를 종료하고 프로젝트 내에 응용 프로그램 구성 요소를 만듭니다todolist.

    python manage.py startapp todolist


  • todoapp/settings.py INSTALLED_APPS의 앱 목록에 응용 프로그램 구성 요소를 추가합니다.

  • 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 })
    


  • 각 보기에 대해 보기와 동일한 todolist 디렉토리에 생성된 파일urls.py에 경로를 등록합니다.

  • from django.urls import path
    from . import views
    
    urlpatterns = [
        path("", views.index, name="index")
    ]
    


  • include 기능을 사용하여 기본 앱의 todoapp/urls.py에 todolist URL을 추가합니다.

  • from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('todolist.urls')),
    ]
    


  • todoapp 및 todolist 디렉터리와 동일한 수준에 있는 프로젝트 루트 디렉터리에 templates/base.html 파일을 만듭니다.
    Django에 필요한 약간의 수정

  •                 {% csrf_token %}
    


  • todoapp/settings.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 모델 정의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")
    
    


  • todolist/urls.py의 urlpatterns에 보기를 추가합니다.

  • 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'),
    ]
    


    템플릿/base.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에 푸시하고 가상 환경을 비활성화합니다.

    $ deactivate
    $ conda deactivate

    📚 Sam의 다른 블로그



  • | Hashnode.dev | Medium.com
  • Github
  • 좋은 웹페이지 즐겨찾기