Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- django test
- pyside6
- django
- django rank
- ERP
- Python
- materialized
- 중량 관리
- qpa_plugin
- django role based
- 파이썬
- 장고로 ERP
- qwindows.dll
- QApplication
- orm 최적화
- test drive development
- query 최적화
- 페이지 최적화
- Self ERP
- tensorflow
- pip 오류
- django erp
- 장고
- channels
- pip 설치
- optimization page
- 재고 관리
- django drf
- pyside6 ui
- uiload
Archives
- Today
- Total
취미삼아 배우는 프로그래밍
초등학교 게시판 만들기 -3 본문
만든 이유:
친구가 초등학교 교사인데, 쓰라고 만들어주는 게시판이
자꾸 터지더란다.
그때 내가 네이버 에듀를 소개했었더라면,,
그치만 생각이 짧았고
내가 말한 3시간은 1주일이 됐다.
사실 게시판 자체만 봤을 때는 3시간이면 충분한데,
아약스며 글 수정이며 글 삭제며
구성원 관리며
이상한 기능들을 넣다가
망했다. 심지어 돈 받고 한 거도 아니다..
프론트에 거의 시간을 못 쏟아 부어서 그런지
그렇게 잘 만들것 같지도 않다.
(그치만 시간을 더 부었어도 딱히 디자인이 더 나아졌을것 같지는 않다. 워낙 못하니까..)
나중에 묻고 보니 진짜 그냥 게시판이 필요한 거였다.
인증 모델
# https://yonghyunlee.gitlab.io/python/user-extend/
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
UserTypeText = models.TextChoices('UserType', 'None Teacher Parent Student')
class StudyClass(models.Model):
classname = models.CharField(max_length=20, verbose_name='반 이름')
class_master = models.CharField(max_length=20, verbose_name='담임 선생님')
objects = models.Manager()
def __str__(self):
return str(f'{self.classname} / {self.class_master}')
class UserRole(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='아이디')
user_kor_name = models.CharField(max_length=10, null=True, blank=True, verbose_name='이름')
is_authenticate = models.BooleanField(default=False, verbose_name='승인여부')
UserType = models.CharField(max_length=20, choices=UserTypeText.choices, default='None', verbose_name='유형')
phone_no = models.CharField(max_length=20, blank=True, null=True, verbose_name='휴대전화')
memo = models.CharField(max_length=100, blank=True, null=True, verbose_name='가입메모', default='없음')
class_fk = models.ForeignKey(StudyClass,on_delete=models.CASCADE, blank=True, null=True, verbose_name='반 정보')
objects = models.Manager()
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserRole.objects.create(user=instance,
memo=instance.memo, phone_no=instance.phone_no, user_kor_name=instance.user_kor_name)
# @receiver(post_save, sender=User)
# def save_user_profile(sender, instance, **kwargs):
# instance.UserRole.save()
유저 타입은 텍스트 초이스 형식으로 None, Teacher, Parent, Student 네 개로 만들었다
그리고 post_save를 통해 유저가 만들어질 시 따로 다른 데이터도 만들어준다.
뷰
from django.shortcuts import render, reverse
from django.http import HttpResponseRedirect, JsonResponse
from .forms import BoardForm
from .models import BaseBoard, Comment
from django.core.paginator import Paginator
from authentication.models import UserRole
from twilio.rest import Client
import json
from django.db.models import Q
USERTYPE_LIST = ['None', 'Teacher', 'Parent', 'Student']
# Create your views here.
def board_write_view(request, board_no=None):
'''
When Writing :
Baby No need to do check Categorial for write and CheckOptions
'''
template = 'boardsystem/boardtemplate.html'
study_class_fk = request.user.userrole.class_fk_id
current_user_role = request.user.userrole.UserType
if(current_user_role != 'Teacher'):
write_category = '과제게시판'
else:
write_category = None
if board_no:
Board_Instance = BaseBoard.objects.get(id = board_no)
form = BoardForm(instance=Board_Instance)
else:
Board_Instance = None
form = BoardForm(initial={'class_fk':study_class_fk, 'board_type':write_category})
if request.method == 'POST':
form = BoardForm(request.POST, instance=Board_Instance)
if form.is_valid():
board = form.save(commit=False)
board.writer = request.user
board.save()
return HttpResponseRedirect('/')
else:
context = {
'form':form,
}
return render(request, template_name=template, context=context)
def board_delete_view(request, board_no):
to_remove = BaseBoard.objects.get(id=board_no)
to_remove.delete()
# print(request.path_info)
# return HttpResponseRedirect(reverse('board_view_categorial'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def ajax_for_class_fk(request, user_id, type_id):
try:
if(type_id==0):
type_id == None
else:
type_id == int(type_id)
qs = UserRole.objects.filter(id=int(user_id))
qs.update(class_fk=type_id)
result = {'result':200}
except Exception as e:
print(e)
raise Exception('this is unknown touch!')
return JsonResponse(result)
def ajax_for_usertype(request, user_id, type_id):
try:
qs = UserRole.objects.filter(id=int(user_id))
qs.update(UserType= USERTYPE_LIST[int(type_id)])
result = {'result':200}
except Exception:
print(Exception)
raise Exception('this is unknown touch!')
return JsonResponse(result)
def ajax_for_authentication(request, user_id):
try:
qs = UserRole.objects.filter(id=int(user_id))
# qs.update(UserType= USERTYPE_LIST[int(type_id)])
oring_value = qs[0].is_authenticate
qs.update(is_authenticate=not oring_value)
result = {'result':200}
except Exception:
print(Exception)
raise Exception('this is unknown touch!')
return JsonResponse(result)
def ajax_for_comment_edit(request, comment_id):
result={
'status':'ok',
}
if request.is_ajax():
data = request.GET.get('text', '')
try:
comment = Comment.objects.filter(id=comment_id)
comment.update(content=data)
except Exception as e:
print(e)
raise Exception('Error occured when ajax call for comment edit !')
return JsonResponse(result)
def comment_delete_view(request, comment_id):
to_remove = Comment.objects.get(id=comment_id)
to_remove.delete()
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def sms_send_message(request):
if request.is_ajax():
content = request.GET.get('text', '')
to_phone_no = request.GET.get('to_phone_no', '')
ACCOUNT_SID = 'A***************a'
AuthToken = 'c************967'
tt = to_phone_no.replace("0","+82",1)
tt = tt.replace("-","")
if content=="":
return JsonResponse({'status':'no_content'})
client = Client(ACCOUNT_SID, AuthToken)
message = client.messages.create(
body=content,
from_='+12729991169',
to=tt,
)
result={
'status':'ok',
'result':message.sid,
}
return JsonResponse(result)
def phone_no_list(request):
'''
selected_data
1 = parent
2 = child
'''
ajax_request = json.loads(request.body)
class_fk = ajax_request.get('class_fk', None)
selected_data = ajax_request['selected_data']
print(selected_data)
# print(ajax_request['selected_data'][0])
qs = UserRole.objects.filter(class_fk=class_fk)
if 1 in selected_data:
qs = qs.filter(UserType='Parent')
if 2 in selected_data:
qs = qs.filter(UserType='Student')
data = list(qs.values())
res = {
'status':'ok',
'data':data
}
return JsonResponse(res)
어떻게든 결과를 빨리 끌어올리기 위해
온갖 잡기술을 사용했다.
그래서 그런지
이거 아직 권한관련된 부분이 제대로 들어가지 않아서 조금 많이 보안쪽은 취약한 것 같다.
그치만 애들이 뭘 알겠나 싶다
요기서 끝!
'코드 자가리뷰(장고)' 카테고리의 다른 글
장고 테스트 코드 작성기 (0) | 2020.08.08 |
---|---|
혼자서 만드는 마감정산 시스템(Django) (0) | 2020.08.07 |
초등학교 학교게시판 만들기. (0) | 2020.04.19 |
초등학교 학교게시판 만들기 (0) | 2020.04.18 |
django-tables 작성에 관한 고찰 (0) | 2020.03.30 |
Comments