Westagram에 새로운 기능을 구현하는 것이므로 새로운 app인 postings를 만든다.
python manage.py startapp postings
게시물에 등록에 필요한 ERD를 설계한다. 게시물 등록을 위해서는 사용자, 생성 시간, 이미지 url, 게시물 제목, 게시물 내용 등이 필요하다.
from django.db import models
from users.models import User
class Posting(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="postings")
created_at = models.DateTimeField(auto_now_add=True)
image_url = models.URLField()
postname = models.CharField(default='', max_length=50)
contents = models.TextField(default='')
class Meta:
db_table = "postings"
전제
class PostingView(View):
@login_decorator
def post(self, request):
try:
data = json.loads(request.body)
user = request.user
image_url = data["image_url"] #data.get('imgae_url', None)
postname = data["postname"]
contents = data["contents"]
Posting.objects.create(
user = user,
image_url = image_url,
postname = postname,
contents = contents
)
return JsonResponse({"MESSAGE" : "SUCCESS"}, status=201)
except KeyError:
return JsonResponse({'MESSAGE' : 'KEY_ERROR'}, status = 400)
1) @login_decorator
로그인을 한 유저만 사용할 수 있으므로 login_decorator를 사용하여 유저의 로그인 유효성 검사와 유저 객체를 가져온다.
2) 데이터 입력 형식
def post(self, request):
try:
data = json.loads(request.body)
user = request.user
image_url = data["image_url"] #data.get('imgae_url', None)
postname = data["postname"]
contents = data["contents"]
3) Posting 객체 생성
Posting.objects.create(
user = user,
image_url = image_url,
postname = postname,
contents = contents
)
user = user
user는 Posting 모델링시 ForeignKey로 만들었으므로 User에 대한 객체를 받아야한다. 그러므로 request.user가 담긴 user를 넣는다.
나머지
request.body에서 입력 받는 값을 저장한다.