취미삼아 배우는 프로그래밍

초등학교 학교게시판 만들기 본문

코드 자가리뷰(장고)

초등학교 학교게시판 만들기

Nadure 2020. 4. 18. 08:57

 

 

> 페이지 개요

로그인 여부에 따라서 nav항목을 바꿈

그리고 개설된 반 버튼을 누름에 따라 들어갈 페이지도 달라지는데,

이는 세션을 이용해서 처리했음

저기서 6학년 3반 버튼을 누르게 되면

6학년 3반에 대한 과제/학습/알림장 게시판 메뉴가 생성됨

 

글쓰기는 통합적으로기는 한데,

로그인한 사람이 교사이면서 본인 반이 있으면

이를 미리 선택하게끔 추가할 예정

 

글쓰기 페이지

글쓰기페이지는 ckeditor를 썼음

지금 materialized css를 사용중인데,

마테리얼 폼은 손수 손으로 적던가,

django-material 이라는 앱을 쓰던가 하는걸로 폼을 조금 쉽게 만들 수 있음.

 

문제는 이 materialized 때문에 django-material 를 통해 만든 폼이 제대로 작동을 안한다는거임

ㅠ 다른 폼들은 위젯을 만들어서 해결하긴 했는데,

content 부분은 해결 할 수가 없어서 그냥 대충 때웠음,,

나중에 보니까 django-materialize에 wywigs? 이게 따로 있긴 있던데..

ckeditor내에 있는 파일 업로드 사진 업로드 기능이 마음에 들어서 다시 버리진 못하겠음,,

시간나면 교체하는 방향으로 .. 해봐야 할 것 같음

from django.db import models
from django.contrib.auth.models import User
from ckeditor.fields import RichTextField, RichTextFormField
from ckeditor_uploader.fields import RichTextUploadingField
from django.conf import settings
from authentication.models import StudyClass

# Create your models here.
'''
유저역할(선생님, 학생, 학부모)
회원가입
게시판(학습/과제/알림장)
출석체크(채팅방형식)
SMS
'''

BoardTypeText = models.TextChoices('BoardType', '과제게시판 학습게시판 알림장')

class BaseBoard(models.Model):
    title = models.CharField(max_length=100, verbose_name='글 제목')
    class_fk = models.ForeignKey(StudyClass, on_delete=models.CASCADE, verbose_name='반')
    writer = models.ForeignKey(User, on_delete=models.CASCADE,)
    board_type = models.CharField(max_length=15, choices=BoardTypeText.choices, verbose_name='게시글타입')
    content = RichTextUploadingField()
    written_date = models.DateTimeField(verbose_name='글쓴 시간', auto_now_add=True)
    is_parent_view = models.BooleanField(verbose_name='학부모 열람가능', default=False)
    is_student_view = models.BooleanField(verbose_name='학생 열람가능', default=False)
    objects = models.Manager()

    # def __str__(self):
    #     return str(f'{self.title} / {self.writer}')

게시판 모델

 

from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import BoardForm
from .models import BaseBoard

# Create your views here.

def board_write_view(request):
    template = 'boardsystem/boardtemplate.html'
    if request.method == 'POST':
        form = BoardForm(request.POST)
        if form.is_valid():
            board = form.save(commit=False)
            board.writer = request.user
            board.save()
            return HttpResponseRedirect('/')
    else:
        context = {
            'form':BoardForm
        }
    return render(request, template_name=template, context=context)

def board_view(request):
    template = 'boardsystem/board_view.html'
    qs = BaseBoard.objects.all()
    context={
        'boards':qs
    }
    return render(request, template_name=template, context=context)


## TODO 구성원 관리 페이지

게시판 관련 뷰(게시판 보기에 관한 내용만)

 

from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import BoardForm
from .models import BaseBoard
from authentication.models import StudyClass
from django.urls import reverse
# from django.contrib.auth.models import User
from authentication.models import UserRole


def make_button(value):
    button = f'<a class="waves-effect waves-light btn" href="class_fk/{value.id}/">{value.classname}</a>'
    return button

def set_session_studyclass(request, studyclass):
    request.session['STUDYCLASS_FK'] = studyclass
    request.session['STUDYCLASS_NAME'] = StudyClass.objects.get(id=studyclass).classname
    return HttpResponseRedirect(reverse('home'))

def index_page(request):
    template = 'boardsystem/index.html'
    
    # request.session.set_test_cookie()
    STUDYCLASS_FK = request.session.get('STUDYCLASS_FK', None)

    qs = StudyClass.objects.all()
    buttons = []

    for q in qs:
        buttons.append(make_button(q))

    context = {
        'buttons':buttons,
        'value': STUDYCLASS_FK,
    }
    return render(request, template, context=context)


def group_manage(request):
    # TODO manage user page
    # Using Django-tables2
    """
    Show Users, Auth manage
    
    """
    template = 'boardsystem/group_manage.html'
    qs = UserRole.objects.all()
    context = {
        'userlist':qs,
    }
    return render(request, template, context=context)


def board_view(request, studyclass, boardtype):
    template = 'boardsystem/board_view.html'
    # TODO Do query reversely!
    qs = BaseBoard.objects.filter(board_type=boardtype).filter(class_fk_id=studyclass)
    context={
        'boards':qs
    }
    return render(request, template_name=template, context=context)

페이지 관련 뷰(게시판 말고 다른것들)

 

  <nav>
    <div class="nav-wrapper">
      <a href="{% url 'home' %}" class="brand-logo">{{ request.session.STUDYCLASS_NAME|default:"영가초등학교" }}</a>
      <a href="#" data-target="mobile-demo" class="sidenav-trigger"><i class="material-icons">menu</i></a>
      <ul class="right hide-on-med-and-down">
        <li><a href="{% url 'home' %}">홈</a></li>
        {% if user.is_authenticated %}
        <li><a href="{% url 'group_user' %}">구성원 관리</a></li>
        <li><a href="{% url 'board_write' %}">글 쓰기</a></li>
          {% if request.session.STUDYCLASS_FK %}
          <li><a href="{% url 'board_view_categorial' studyclass=request.session.STUDYCLASS_FK boardtype='과제게시판' %}">과제 게시판</a></li>
          <li><a href="{% url 'board_view_categorial' studyclass=request.session.STUDYCLASS_FK boardtype='학습게시판' %}">학습 게시판</a></li>
          <li><a href="{% url 'board_view_categorial' studyclass=request.session.STUDYCLASS_FK boardtype='알림장' %}">알림장</a></li>
          <li><a href="{% url 'group_user' %}">출석체크</a></li>
          <li><a href="{% url 'logout' %}">로그아웃</a></li>
          {% endif %}
        {% else %}
        <li><a href="{% url 'login' %}">로그인</a></li>
        <li><a href="{% url 'signup' %}">회원가입</a></li>
        {% endif %}
      </ul>
    </div>
  </nav>

  <ul class="sidenav" id="mobile-demo">
    <li><a href="{% url 'home' %}">홈</a></li>
    {% if user.is_authenticated %} 
    <li><a href="{% url 'group_user' %}">구성원 관리</a></li>
    <li><a href="{% url 'board_write' %}">글 쓰기</a></li>
    {% if request.session.STUDYCLASS_FK %}
    <li><a href="{% url 'board_view_categorial' studyclass=request.session.STUDYCLASS_FK boardtype='과제게시판' %}">과제 게시판</a></li>
    <li><a href="{% url 'board_view_categorial' studyclass=request.session.STUDYCLASS_FK boardtype='학습게시판' %}">학습 게시판</a></li>
    <li><a href="{% url 'board_view_categorial' studyclass=request.session.STUDYCLASS_FK boardtype='알림장' %}">알림장</a></li>
    <li><a href="{% url 'group_user' %}">출석체크</a></li>
    <li><a href="{% url 'logout' %}">로그아웃</a></li>
    {% endif %}
    {% else %}
    <li><a href="{% url 'login' %}">로그인</a></li>
    <li><a href="{% url 'signup' %}">회원가입</a></li>
    {% endif %}
  </ul>

nav 컴포넌트

 

모든 페이지에서 공통적으로 불러오는 항목인 만큼

조건식을 많이 써서 메뉴를 다양하게 호출할 수 있도록 만들어야할 것으로 보임

 

 

 

Comments