[Django]CRUD 맹둘기

냐항·2021년 9월 2일
0

허허,,
쟁고,,,
알수록 어렵군

0.

가산환경 만들기 혹은 활성화

source venv/Scripts/activate

1. articles/models.py

from django.db import models

# models패키지에서 Model이란 아이를 쓸 것임.
class Article(models.Model):
    # 이것들은 column의 정보이니라
    title = models.CharField(max_length=10) # 둘 다 문자열 타입이지만, 단 charfield는 길이 제한 해줘야 함.
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

python manage.py makemigrations: 설계도 저장해주기

python manage.py migrate: 설계도를 db에 적용할거야

2. articles/views.py

  1. index

    import articles
    from django.shortcuts import render, redirect
    
    # 명시적 상대경로  쩜 말하는 것임 현재 같은 경로에 있는 models에서 가져온다 Article을
    from .models import Article
    
    def index(request):
        # 작성한 모든 게시글을 출력할 것
        # 모든 게시글을 조회
        articles = Article.objects.all()[::-1]  # 가져와서 순서 뒤집기 
        context = {
            'articles': articles,
        }
    
        return render(request, 'articles/index.html', context)
  1. new

    def new(request):
        return render(request, 'articles/new.html')
  1. create

    def create(request):
        # new로부터 title과 content를 받아서 저장해야 함
        title = request.POST.get('title')
        content = request.POST.get('content')
        
        # 왼쪽 title은 클래스 변수 이름이고, 오른쪽은 할당할 값이며 위에 있는 아이
        article = Article(title=title, content=content)
        article.save()
    
        # 작성을 완료 했다면 해당 글의 디테일 페이지로 이동
        return redirect('articles:detail', article.pk)
  1. detail

    def detail(request, pk):
        article = Article.objects.get(pk=pk) # 무엇을 볼 것인지 콬 집기
        context = {
            'article': article,
        }
        return render(request, 'articles/detail.html', context)
  1. edit, update

    def edit(request, pk):   #edit.html에서 업데이트할 것
        article = Article.objects.get(pk=pk)
        context = {
            'article':article,
        }
        return render(request, 'articles/edit.html', context)
    
    -------------------------
    
    def update(request, pk):
        article = Article.objects.get(pk=pk)
        article.title = request.POST.get('title')
        article.content = request.POST.get('content')
    
        article.save()
    
        return redirect('articles:detail', article.pk)
  1. delete

    def delete(request, pk):
        article = Article.objects.get(pk = pk) # 삭제할 항목 고르기
        article.delete()
    
        return redirect('articles:index') #삭제하고 다시 index페이지로 돌아가

3. articles/templates/articles/------.html

  1. index.html

    {% extends 'base.html' %}
    
    {% block title %}요기는 인덱스양{% endblock title %}
    
    {% block content %}
      <h1>INDEX</h1>
      <a href="{% url 'articles:new' %}">NEW</a>
    
      
    {% comment %} <h2>{{ articles }}</h2> {% endcomment %}  # 전체 조회
      
      <hr>
      {% for article in articles  %}
        <p>번호: {{ article.pk }}</p>   # 보기 편하게 번호 붙여줌
        <p>제목: {{ article.title }}</p>
        <p>내용: {{ article.content }}</p>
            #클릭하면 detail로 연결
        <a href="{% url 'articles:detail' article.pk %}">DETAIL</a> 
        <hr>
        
      {% empty %}  # 비어 있다면 없다고 표시
        <p>게시글 엄썽</p>
      {% endfor %}
      
    {% endblock %} 

  1. new.html

    {% extends 'base.html' %}
    
    {% block title %}입력하라우{% endblock title %}
    
    {% block content %}
    
      <h1>NEW</h1>
      <form action="{% url 'articles:create' %}" method="POST"> # form태그로 정보넘겨주긔
        {% csrf_token %} # 보안
        <label for="title">TITLE:</label>
        <input type="text" id="title" name="title">
        <br>
        <label for="content">CONTENT:</label>
        <textarea name="content" id="content" cols="30" rows="10"></textarea>
        <br>
        <input type="submit" value="작성">
      </form>
    
      <a href="{% url 'articles:index' %}">BACK</a>
        
    {% endblock %}

  1. detail.html

delete에서 버튼을 빼려고 하니 링크가 뜨지 않

{% extends 'base.html' %}

{% block title %}DETAIL이란다{% endblock title %}

{% block content %}
  <h1>DETAIL</h1>
  <p>{{ article.pk }}번째 글</p>  
  <hr>
  <p>{{ article.title }}</p>
  <p>{{ article.content }}</p>
  <p>작성일 : {{ article.created_at }}</p>
  <p>수정일 : {{ article.updated_at }}</p>
  <hr>
  
  <a href="{% url 'articles:edit' article.pk %}">EDIT</a>
  <form action="{% url 'articles:delete' article.pk %}" method='POST'>
    {% csrf_token %}
    <button class="btn btn-danger">DELETE</button>
  </form>
  <a href="{% url 'articles:index'%}">BACK</a>
    
{% endblock %}

  1. edit.html

    {% extends 'base.html' %}
    
    {% block title %}수정하라우{% endblock title %}
    
    {% block content %}
    
      <h1>EDIT</h1>
      <form action="{% url 'articles:update' article.pk %}" method="POST">
        {% csrf_token %}
        <label for="title">TITLE: </label>
        <input type="text" name="title" id="title" value="{{ article.title }}"><br>
        <label for="content">CONTENT: </label>
        <textarea name="content" id="content" cols="30" rows="10">{{ article.content }}</textarea><br>
        <input type="submit" value="수정">
      </form>
      <a href="{% url 'articles:index' %}">BACK</a>
      
    {% endblock %}

0개의 댓글