(2022.10.25) Today I Learned_Day-38

imRound·2022년 10월 25일
0
post-thumbnail

데이터 생성

@api_view(['GET','**POST**'])
def index(request):
    **if request.method == 'GET':**
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True) # 소화를 해서 만들어낸 결과값
        return Response(serializer.data) # .data 안에 저장
    **elif request.method == 'POST':
        print(request) # <rest_framework.request.Request: POST '/articles/index/'>
        return Response()**

<rest_framework.request.Request: POST '/articles/index/'> print(reqeust)

그 전까지는 multipart/form-data 를 사용했었다.

print(request.POST.get("key"))

지금은 application/json

{'key': 'value'} POST 시 나오는 print

@api_view(['GET','POST'])
def index(request):
    if request.method == 'GET':
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True) # 소화를 해서 만들어낸 결과값
        return Response(serializer.data) # .data 안에 저장
    elif request.method == 'POST':
        **print(request.data['key'])** # 키값을 입력해서 받아오고 싶다. print값은 value만 나
				serializer = ArticleSerializer(request.data) # request.data를 넣어주면 된다.
        return Response()

json에서 다시 article로 변경 >> deserializer

직렬화, 오브젝트형태로 되어있는 것을 스트링으로 단순하게 쭉 뽑아줬다.

AssertionError at /articles/index/

You must call `.is_valid()` before calling `.save()`.

Error가 나옴. is_valid한지 확인을 해야한다.

유효한지 검증을 해야한다!!

@api_view(['GET','POST'])
def index(request):
    if request.method == 'GET':
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True) # 소화를 해서 만들어낸 결과값
        return Response(serializer.data) # .data 안에 저장
    elif request.method == 'POST':
        # print(request.data['key'])
        serializer = ArticleSerializer(request.data)
        **if serializer.is_valid():
            serializer.save()**
        return Response()

여러 조건들이 있을 수 있다. models.py의 null=True, max_length=100 등…

조건들이 형태에 부합한지, 필요한 것들이 다 들어와 있는지 확인을 한다!

# 최종 error 해

@api_view(['GET','POST'])
def index(request):
    if request.method == 'GET':
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True) # 소화를 해서 만들어낸 결과값
        return Response(serializer.data) # .data 안에 저장
    elif request.method == 'POST':
        # print(request.data['key'])
        serializer = ArticleSerializer(data =request.data)
        if serializer.is_valid():
            serializer.save()
        else:
            print(serializer.errors)
        return Response()

해당 코드 수정 후

print 값이

{'content': [ErrorDetail(string='이 필드는 필수 항목입니다.', code='required')]}로 나온다.

string 필수항목 models 정의 할 때 null=True, blank=True

(null: db에서 빈값이여도 되는지? blank: 검증과정에서 비어있어도 되는지??)

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(**null=True, blank=True**)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

그 후 DB를 확인해보면 정상적으로 DB에 들어가있는 것을 확인 할 수 있다.

profile
Django 개발자

0개의 댓글