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)
중복 아이디가 들어오면 사이트에 에러가 남
📂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')
📂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">×</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>
<// 날짜를 선택할 때 뜨는 모달 창 (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차 수정 코드>
<재료 이름에 null 값이 들어간 상태>
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 모델> 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
https://education.github.com/globalcampus/student
https://education.github.com/pack/offers#namecheap
Lightsail | EC2 | |
---|---|---|
요금 | 가격에 따라 정해진 CPU, 메모리, 디스크 용량을 선택하게 되고 정해진 가격 만큼 과금되는 형식 | 사람들이 사이트에 접속해서 웹, DB서버 등에 통신이 이뤄지면 트래픽 당 별도로 또 돈을 결제해야 되는 형식 |
기능 | 일반적인 웹호스팅 기능 가능(가벼움) | 로드 밸런싱 등 여러 기능 수행 |
특징 | 작고 빠른 웹 호스팅에 유리 | 좀 더 자유로운 설정에 유리한 듯 |
<import smtplib
smtp_gmail = smtplib.SMTP('smtp.gmail.com', 587)
# 서버 연결을 설정하는 단계
smtp_gmail.ehlo()
# 연결을 암호화
smtp_gmail.starttls()
#로그인
smtp_gmail.login('[gmail아이디]@gmail.com','[비밀번호]')
from email.message import EmailMessage
msg=EmailMessage()
# 제목 입력
msg['Subject']="제목입니다"
# 내용 입력
msg.set_content("내용입니다")
# 보내는 사람
msg['From']='보내는 이메일 주소'
# 받는 사람
msg['To']='받는 이메일 주소'
smtp_gmail.send_message(msg)