철학과 학생의 개발자 도전기
[프로젝트] MOCO 모각코를 위한 웹서비스 03 - Place 구현 본문
Place Model 구현
class Place(models.Model):
CATEGORY_CHOICE = [
('Cafe', '카페'),
('StudyRoom', '스터디룸'),
('Etc', '기타'),
]
SOCKET_CHOICE = [
('Many', '많음'),
('Average', '보통'),
('Less', '적음'),
('No', '없음'),
]
WIFI_CHOICE = [
('Fast', '빠름'),
('Slow', '느림'),
('No', '없음'),
]
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=25)
location = models.CharField(max_length=25)
category = models.CharField(max_length=10, choices=CATEGORY_CHOICE)
opening_time = models.TimeField()
closing_time = models.TimeField()
wifi = models.CharField(max_length=5, choices=WIFI_CHOICE)
power_socket = models.CharField(max_length=10, choices=SOCKET_CHOICE)
rating = models.FloatField()
content = models.TextField()
published_at = models.DateTimeField(auto_now_add=True)
class PlaceImage(models.Model):
place = models.ForeignKey(Place, on_delete=models.CASCADE)
image = models.ImageField()
Place 모델도 ERD를 토대로 구현해봤다.
Place에 넣을 이미지는 없을 수도, 여러 장이 될 수도 있기 때문에 1:N 관계의 모델을 만들려고 시도해봤다.
기능 구현을 어떻게 할 것인지는 더 고민해봐야 할 것 같다.
Place 기능 구현
def home(request):
places = Place.objects.all()
sort = request.GET.get('sort', 'None')
if sort == "latest":
posts = posts.order_by("-published_at")
context = {
"places": places,
}
return render(request, template_name="place/home.html", context=context)
@login_required
def write(request):
if request.method == 'POST':
form = PlaceForm(request.POST)
if form.is_valid():
place = form.save(commit=False)
place.user = request.user
place.save()
return redirect('/place')
else:
form = PlaceForm()
context = {
'form': form,
}
return render(request, template_name="place/write.html", context=context)
def detail(request, id):
place = Place.objects.get(id=id)
context = {
"place": place,
}
return render(request, template_name="place/detail.html", context=context)
@login_required
def update(request, id):
place = Place.objects.get(id=id)
if request.method == "POST":
form = PlaceForm(request.POST)
if form.is_valid():
place.name = form.cleaned_data['name']
place.location = form.cleaned_data['location']
place.category = form.cleaned_data['category']
place.opening_time = form.cleaned_data['opening_time']
place.closing_time = form.cleaned_data['closing_time']
place.wifi = form.cleaned_data['wifi']
place.power_socket = form.cleaned_data['power_socket']
place.rating = form.cleaned_data['rating']
place.content = form.cleaned_data['content']
place.save()
return redirect(f'/place/detail/{id}')
else:
form = PlaceForm(instance=place)
context = {
"form": form,
"id": id,
}
return render(request, template_name='place/update.html', context=context)
@login_required
def delete(request, id):
if request.method == "POST":
place = Place.objects.get(id=id)
place.delete()
return redirect('/place')
우선 CRUD 기능만 빠르게 만들어봤다.
프론트엔드팀이 임시로 사용하면서 개발하는데 도움을 주기 위해 먼저 만들었다. 최대한 form을 많이 활용해서 생산성을 높이려고 해봤다. 하지만 검토를 거의 하지 않은 코드기 때문에 아마 대대적인 수정이 있을 것 같다.
앞으로의 계획
이제 users앱으로 돌아와 User 관련 기능들을 다듬고 추가할 예정이다.
아이디 찾기나 비밀번호 찾기 등의 기능을 만들 것 같다. 아이디는 이름과 생년월일로 찾을 것 같은데 그러면 이름과 생년월일이 같은 유저가 가입할 경우 어떻게 처리할 것인지에 대한 고민도 필요해보인다.
'프로젝트' 카테고리의 다른 글
[프로젝트] MOCO 모각코를 위한 웹서비스 06 - API 명세서 (0) | 2022.08.15 |
---|---|
[프로젝트] MOCO 모각코를 위한 웹서비스 05 - User 기능 추가(2) (0) | 2022.08.13 |
[프로젝트] MOCO 모각코를 위한 웹서비스 04 - User 기능 추가(1) (0) | 2022.08.13 |
[프로젝트] MOCO 모각코를 위한 웹서비스 02 - ERD 설계, User 구현 (0) | 2022.08.08 |
[프로젝트] MOCO 모각코를 위한 웹서비스 01 - 팀 결성 (0) | 2022.08.03 |