본문 바로가기

programming/Gukbi

국비 교육 106일차 - ORM 게시판 만들기,MySQL 사용

728x90
반응형

정말 막바지를 향해 달려가고 있다..

오늘은 ORM을 사용해서 게시판을 만드는걸 배웠다. 저번에 한번 했지만 이번에 더 자세하게 배웠다. 

 

일단 pycharm에서 mysql을 사용하려면 이렇게 먼저 등록을 해주어야 한다. 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sist',
        'USER': 'root',
        'PASSWORD':'1234',
        'HOST':'',
        'PORT':''
    }
}

 

views.py에서는 원래 만들어져있는 클래스를 import받아와서 사용을 한다. 

from django.db.models import F
from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView
from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView
from django.views.generic.edit import DeleteView
from .models import Board
from django.urls import reverse_lazy
# Create your views here.
class BoardListView(ListView):
      model=Board
      paginate_by = 5 #rowSize=5

class BoardCreateView(CreateView):
      model=Board
      fields=['name','subject','content','pwd']  # insert into board(name,subject,content,pwd)
      success_url = reverse_lazy('list')
      template_name_suffix = '_create'
class BoardDetailView(DetailView):
      model=Board

class BoardUpdateView(UpdateView):
      model= Board
      fields=['name','subject','content']
      template_name_suffix = "_update"
class BoardDeleteView(DeleteView):
      model=Board
      success_url = reverse_lazy('list')




 

그리고 urls.py도 조금 다르게 설정해준다. 

from django.urls import path,include
from .views import BoardListView,BoardCreateView,BoardDetailView,BoardUpdateView,BoardDeleteView
# Spring => @RequestMapping()
urlpatterns=[
    path('',BoardListView.as_view(),name="list"),
    #@RequestMapping("board/insert.do")
    path('insert/',BoardCreateView.as_view(),name="insert"),
    path('detail/<int:pk>',BoardDetailView.as_view(),name='detail'),
    path('update/<int:pk>',BoardUpdateView.as_view(),name='update'),
    path('delete/<int:pk>',BoardDeleteView.as_view(),name='delete')
]

 

models.py 설정

import datetime

from django.db import models
from django.utils.timezone import now
from django.urls import reverse
# Create your models here.
class Board(models.Model):
    no=models.BigIntegerField(default=1)
    name=models.CharField(max_length=34)  # name VARCHAR(34)
    subject=models.CharField(max_length=1000)
    content=models.TextField()
    pwd=models.CharField(max_length=10)
    regdate=models.DateTimeField(default=now)
    hit=models.BigIntegerField(default=0)

    def get_absolute_url(self):
        return reverse('detail',args=[str(self.id)])
    @property
    def update_counter(self):
        self.hit=self.hit+1
        self.save()
    class Meta:
        ordering=['-id']   # id (ASC), -id(DESC)

 

이렇게만 써주면 굳이 sql쿼리문장을 써주지 않아도 된다. 

 

그리고 templates 파일들 사용 방법

<div class="row">
            <div class="text-center">
                <ul class="pagination">
                    {% if page_obj.has_previous %}
                    <li class="page-item"><a href="{% url 'list' %}"?page="{{page_obj.previous_page_number}}">&lt;</a></li>
                    {% else %}
                      <li class="page-item disabled"><a href="#">&lt;</a></li>
                    {% endif %}
                    {%  for object in page_obj.paginator.page_range %}
                     <li><a href="{{request.path}}?page={{forloop.counter}}">{{forloop.counter}}</a></li>
                    {% endfor %}
                    {% if page_obj.has_next %}
                    <li><a href="{% url 'list' %}"?page="{{page_obj.next_page_number}}">&gt;</a></li>
                     {% else %}
                      <li class="page-item disabled"><a href="#">&gt;</a></li>
                    {% endif %}
                </ul>
            </div>
        </div>

 페이지 블록을 처리해주는 방법이다. 

일반적으로 사용하는 것과는 다르다. 

 

 

728x90
반응형