[Westagram]:投稿の登録
課題
コード#コード#
models.py
from django.db import models
from users.models import TimeStampedModel
class Posting(TimeStampedModel) :
email = models.ForeignKey('users.User' ,on_delete=models.CASCADE)
content = models.TextField(max_length=500, null=True, blank=True)
class Meta :
db_table = 'postings'
class Image(TimeStampedModel) :
img_url = models.CharField(max_length=500, null=True, blank=True)
posting = models.ForeignKey('Posting', on_delete=models.CASCADE)
class Meta :
db_table = 'images'
1つの文章に複数の画像があるため、画像テーブルを分離します.
画像テーブルはもちろん文章のidを参照します
views.py
class PostingView(View) :
@login_decorator
def post(self, request) :
#Posting : content
#Image : img_url
try :
data = json.loads(request.body)
email_id = request.user.id
img_url = data.get('img_url', None)
content = data.get('content', None)
posting = Posting.objects.create(
email_id = email_id,
content = content
)
if img_url :
for imgs in img_url :
Image.objects.create(
posting_id = posting.id,
img_url = imgs
)
except KeyError :
return JsonResponse({'message':'KEY_ERROR'}, status=401)
except json.decoder.JSONDecodeError :
return JsonResponse({'message':'값을 하나라도 입력하세요'}, status=401)
return JsonResponse({'message':'Success'}, status=200)
まず、アクセサリーで宣言されたrequestです.userを読み込みemail id変数に保存
写真をアップロードしたり、文章を書いたり、データがなければNone
ロケーションを登録してから、イメージファイルを登録する必要があります.
賭けオブジェクトを作成した後、画像オブジェクトを作成します.
画像は複数あり得るので、リストとして受信し、ドアに切り替えることができる.
行数でデータを格納する @login_decorator
def get(self, request) :
#등록된 모든 게시물 / 등록한 사람, 등록한 시간, 게시물url, 게시물 내용
try :
postings = Posting.objects.all()
result = []
for posting in postings :
img_url = posting.image_set.all()
url_list = []
for urls in img_url :
url_list.append({
'url_list' : urls.img_url
})
result.append(
{
'등록한 사람' : User.objects.get(id=posting.email_id).email,
'등록한 시간' : posting.created_at.strftime("%Y-%m-%d %H:%M:%S"),
'게시물 url' : url_list,
'게시물 내용' : posting.content
}
)
return JsonResponse({'message':result}, status=201)
except AttributeError as msg :
return JsonResponse({'message':msg}, stauts=400)
except TypeError as msg :
return JsonResponse({'message':msg}, stauts=400)
画像はPostingのIDを参照しているので、逆参照で画像をインポート
strftime()を使用して時間を変換する
Reference
この問題について([Westagram]:投稿の登録), 我々は、より多くの情報をここで見つけました
https://velog.io/@kyleee/Westagram-게시물-등록
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from django.db import models
from users.models import TimeStampedModel
class Posting(TimeStampedModel) :
email = models.ForeignKey('users.User' ,on_delete=models.CASCADE)
content = models.TextField(max_length=500, null=True, blank=True)
class Meta :
db_table = 'postings'
class Image(TimeStampedModel) :
img_url = models.CharField(max_length=500, null=True, blank=True)
posting = models.ForeignKey('Posting', on_delete=models.CASCADE)
class Meta :
db_table = 'images'
class PostingView(View) :
@login_decorator
def post(self, request) :
#Posting : content
#Image : img_url
try :
data = json.loads(request.body)
email_id = request.user.id
img_url = data.get('img_url', None)
content = data.get('content', None)
posting = Posting.objects.create(
email_id = email_id,
content = content
)
if img_url :
for imgs in img_url :
Image.objects.create(
posting_id = posting.id,
img_url = imgs
)
except KeyError :
return JsonResponse({'message':'KEY_ERROR'}, status=401)
except json.decoder.JSONDecodeError :
return JsonResponse({'message':'값을 하나라도 입력하세요'}, status=401)
return JsonResponse({'message':'Success'}, status=200)
@login_decorator
def get(self, request) :
#등록된 모든 게시물 / 등록한 사람, 등록한 시간, 게시물url, 게시물 내용
try :
postings = Posting.objects.all()
result = []
for posting in postings :
img_url = posting.image_set.all()
url_list = []
for urls in img_url :
url_list.append({
'url_list' : urls.img_url
})
result.append(
{
'등록한 사람' : User.objects.get(id=posting.email_id).email,
'등록한 시간' : posting.created_at.strftime("%Y-%m-%d %H:%M:%S"),
'게시물 url' : url_list,
'게시물 내용' : posting.content
}
)
return JsonResponse({'message':result}, status=201)
except AttributeError as msg :
return JsonResponse({'message':msg}, stauts=400)
except TypeError as msg :
return JsonResponse({'message':msg}, stauts=400)
Reference
この問題について([Westagram]:投稿の登録), 我々は、より多くの情報をここで見つけました https://velog.io/@kyleee/Westagram-게시물-등록テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol