SW 프로젝트 10주차 활동 일지

고태경·2023년 10월 29일
0

SW 프로젝트

목록 보기
4/9
post-thumbnail

1주차 OT 8/30
2주차 주제 선정 (타임캡슐) 9/6
3주차 주제 변경 (냉장고 관리 웹사이트) 9/13
4주차 주제 결정 및 plan A, B 설정 9/20
5주차 프로젝트 첫 번째 중간 보고 9/27 (9/21~9/26)
6주차 프로젝트 두 번째 중간 보고 9/27 (9/27~10/3)
7주차 프로젝트 계획 보고서 발표
8주차 시험 주 (자습)
9주차 프로젝트 세 번째 중간 보고

10주차 프로젝트 네 번째 중간 보고(~10/31)

Ⅰ. 이전 주차에 한 것

    1. DB 연동
    2. 로그인 기능 구현

Ⅱ. 이번 주차에 한 것

① 중복 로그인 처리

9주차 이슈 : 중복 로그인 처리

중복 아이디가 들어오면 사이트에 에러가 남

9주차 이슈 해결 : 처리 코드 추가

  • issue
📂accounts/templates/signup.html 기존 코드

def signup(request):
    if request.method == 'POST':
        if request.POST['password1'] == request.POST['password2']:
            user = User.objects.create_user(
                                            username=request.POST['username'],
                                            password=request.POST['password1'],
                                            email=request.POST['email'],)
            auth.login(request, user)
            return redirect('/')
        return render(request, 'signup.html')
    return render(request, 'signup.html')
  • solve
📂accounts/templates/signup.html 수정 코드

def signup(request):
    duplicate_username = False

    if request.method == 'POST':
        if request.POST['password1'] == request.POST['password2']:
            username = request.POST['username']

            # 중복 아이디 확인
            if User.objects.filter(username=username).exists():
                duplicate_username = True
            else:
                user = User.objects.create_user(
                    username=username,
                    password=request.POST['password1'],
                    email=request.POST['email'],
                )
                auth.login(request, user)
                return redirect('/')

    return render(request, 'signup.html', {'duplicate_username': duplicate_username})
📂accounts/templates/signup.html 추가 코드

<!-- 중복 아이디 모달 창 -->
<div class="modal fade" id="duplicateUsernameModal" tabindex="-1" role="dialog" aria-labelledby="duplicateUsernameModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="duplicateUsernameModalLabel">중복 아이디 알림</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        중복된 아이디가 이미 사용 중입니다. 다른 아이디를 선택하세요.
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">닫기</button>
      </div>
    </div>
  </div>
</div>

<script>
  document.addEventListener('DOMContentLoaded', function () {
    // 중복 아이디 모달 창 열기
    if ('{{ duplicate_username }}' === 'True') {
      $('#duplicateUsernameModal').modal('show');
    }
  });
</script>

② 1차 입력 모달창 수정

<이전 입력창>
<// 날짜를 선택할 때 뜨는 모달 창 (origin)
           select: function (start, end, allDay) {
               var title = prompt("음식 정보를 입력하세요!");
               if (title) {
                   var start = $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss");
                   var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
                   // 서버로 이벤트 데이터 전송
                   $.ajax({
                       type: "GET",
                       url: '/add_event',
                       data: {'title': title, 'start': start, 'end': end},
                       dataType: "json",
                       success: function (data) {
                           calendar.fullCalendar('refetchEvents');
                           alert("Added Successfully");
                       },
                       error: function (data) {
                           alert('There is a problem!!!');
                       }
                   });
               }
           },
<이전 코드>

<1차 수정 입력창>
    // 날짜를 선택할 때
            select: function (start, end, allDay) {
                var foodName = "";
                var endDate = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");

                // 모달 대화 상자 열기
                $("#event-food").val("");
                $("#event-end").val(endDate);

                $("#event-dialog").dialog({
                    title: '이벤트 정보 입력',
                    buttons: {
                        '저장': function () {
                            foodName = $("#event-food").val();
                            endDate = $("#event-end").val();

                            // 서버로 이벤트 데이터 전송
                            $.ajax({
                                type: "GET",
                                url: '/add_event',
                                data: {'title': foodName, 'end': endDate},
                                dataType: "json",
                                success: function (data) {
                                    calendar.fullCalendar('refetchEvents');
                                    alert("Added Successfully");
                                    $("#event-dialog").dialog('close');
                                },
                                error: function (data) {
                                    alert('There is a problem!!!');
                                }
                            });
                        },
                        '취소': function () {
                            $("#event-dialog").dialog('close');
                        }
                    },
                    close: function () {
                        // 다이얼로그가 닫힐 때 입력 값 초기화
                        $("#event-food").val("");
                        $("#event-end").val("");
                    },
                    modal: true
                });
            },
<1차 수정 코드>

ISSUE 1 (1차 입력창 모달 수정)

ISSUE 2 : DB에서 null 값을 허용해버림

<재료 이름에 null 값이 들어간 상태>

DB 모델 수정

from django.db import models

# Create your models here.
class Events(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255,null=True,blank=True)
    start = models.DateTimeField(null=True,blank=True)
    end = models.DateTimeField(null=True,blank=True)

    class Meta:
        db_table = "tblevents"
<기존 DB 모델>
fullcalandar 시연 과정에서 사용한 모델

<계획서에 실은 tblevent ERD (start 필드 삭제)>
  class Events(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, null=False, blank=False)
    expiration_dt = models.DateTimeField(null=False, blank=False)
    categories = models.CharField(max_length=50, null=False, blank=False)

    class Meta:
        db_table = "tblevents"
<계획서를 바탕으로 수정한 DB>
python manage.py makemigrations
python manage.py migrate

ISSUE 3 폼 입력이 안됨

무료 도메인 얻는 법

https://education.github.com/globalcampus/student

https://education.github.com/pack/offers#namecheap

Ⅲ. 공부한 것

AWS Lightsail vs EC2

LightsailEC2
요금가격에 따라 정해진 CPU, 메모리, 디스크 용량을 선택하게 되고 정해진 가격 만큼 과금되는 형식사람들이 사이트에 접속해서 웹, DB서버 등에 통신이 이뤄지면 트래픽 당 별도로 또 돈을 결제해야 되는 형식
기능일반적인 웹호스팅 기능 가능(가벼움)로드 밸런싱 등 여러 기능 수행
특징작고 빠른 웹 호스팅에 유리좀 더 자유로운 설정에 유리한 듯

python 자동 메일 전송 방법 공부

방법1

  1. SMTP(Simple Mail Transfer Protocol)프로토콜을 사용을 위해 파이썬의 smtplib라는 패키지 설치
<import smtplib
  1. 사용하는 이메일 계정의 smtp 서버 도메인 이름을 입력, gmail의 경우에는 도메인 이름은 smtp.gmail.com이고, 포트는 587
smtp_gmail = smtplib.SMTP('smtp.gmail.com', 587)
  1. 계정 로그인
# 서버 연결을 설정하는 단계
smtp_gmail.ehlo()
 
# 연결을 암호화
smtp_gmail.starttls()
 
#로그인
smtp_gmail.login('[gmail아이디]@gmail.com','[비밀번호]')
  1. sendmail함수를 이용해서 메일 전송 + EmailMessage 패키지를 이용하면 편리하게 메시지를 구성
from email.message import EmailMessage
msg=EmailMessage()
 
# 제목 입력
msg['Subject']="제목입니다"
 
# 내용 입력
msg.set_content("내용입니다")
 
# 보내는 사람
msg['From']='보내는 이메일 주소'
 
# 받는 사람
msg['To']='받는 이메일 주소'
 
smtp_gmail.send_message(msg)
profile
컴퓨터정보과

0개의 댓글