묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
formdata 와 json responser
안녕하세요 강사님, 그러면프론트엔드 서버에서 백엔드 서버로 데이터를 전송할 때는 formdata 를 이용해서 보내주고,백엔드 서버에서 프론트엔드 서버로 json 응답을 반환하는 건가요? ㅠㅠ 개념이 조금 어렵네요......질문이 너무 많아서 죄송합니다 ㅜㅜ
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
502 bad gateway
강사님 안녕하세요강사님 강의 덕분에 저 혼자서 페이지도 만들고 nginx 사용해서 서버까지 배포해보았습니다.다름이 아니라 3일전 까지만 해도 느리긴 했지만 잘 되던 서버가오늘 서버내의 기능을 사용할려고 하니 502 bad gateway를 내 뱉으면서 멈춰버립니다.(되다가 안되다가 반복함)그래서 error 로그를 찾아보니2023/11/01 00:20:22 [error] 10930#10930: *232 upstream prematurely closed connection while reading response header from upstream라고 뜨네요 3일동안 해봤는데 헛발짓만 했네용..gpt한테 물어봐도 메모리 리소스, 네트워크 문제 , 응답시간 문제 등 이라곤 하는데 메모리랑 네트워크에는 아무런 문제가 없는거 같습니다.3일전까지만 해도 잘되던 서버가 안되니까 많이 답답하네요..
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
axios url 질문이 있습니다
안녕하세요 강사님, 현재 태그를 누르면 포스트 목록 페이지 이동까지 구현을 성공한 상태입니다. (섹션 11에 올려주신 메인메뉴 수정 참고해서요 !)섹션 11 영상이 아니라 앞서 설명해주실 때에는 장고서버에서 설명해주셨어서 (?) 약간 헷갈리는 부분이 있는데,제가 이해하고 있는 게 맞는지 여쭤보고싶어서 질문 드립니다 !!postdetail.vue 에 내용에 의해serverPage(tagname) { console.log("serverPage()...", tagname); location.href = `/my_blog.html?tagname=${tagname}`; }이렇게 태그를 누르면 `/my_blog.html?tagname=${tagname}`; 로 이동하게 해놨는데, (저는 ~/my_blog 에 postlist 컴포넌트를 위치시켜놔서 url 이 저렇습니다 !)이러면 postlist.vue 에서 저 url 을 파싱해서created () { const params = new URL(location).searchParams; // const paramTag = params.get('tagname'); this.tagname = params.get("tagname") this.fetchPostList() },tagname 을 추출하는 것까지는 이해 했습니다 !그 후에 fetchPostList() { console.log("fetchPostList()...", this.tagname); // 메서드 이름을 콘솔에 로깅하여 메서드가 호출되는 것 확인 let getUrl = ''; if (this.tagname) getUrl = `/api/post/list/?tagname=${this.tagname}`; else getUrl = '/api/post/list/'; axios.get(getUrl) // axios를 사용하여 /api/post/list/로 HTTP GET 요청 보내기 .then(res => { // 성공적인 응답의 경우 then 부분 실행 // 서버로부터 받은 응답 데이터 는 res 매개변수 안에 console.log("POST LIST GET RES", res); // 서버 응답을 콘솔에 로깅 this.posts = res.data; // res.data 에 서버에서 받은 데이터가 있을 것 // 이 데이터를 Vue 컴포넌트의 this.posts 데이터 속성에 할당 axios 를 통해 해당 태그에 맞는 데이터를 가져오는 것으로 이해 했습니다. 근데 여기서 getUrl = `/api/post/list/?tagname=${this.tagname}` 부분이 약간 이해가 안되어서요.urlpatterns = [ path('post/list/', views.ApiPostLV.as_view(), name='post_list'), path('post/<int:pk>/', views.ApiPostDV.as_view(), name="post_detail"), path('tag/cloud/', views.ApiTagCloudLV.as_view(), name='tag_cloud'), ]django 에서 api 에 관련된 url 은 이렇게 지정을 해두었는데, post list 에서 특정 포스트를 누르면 해당 포스트의 id를 추출해서 axios 를 통해 요청하는 url은 axios.get(`/api/post/${postId}/`) 이잖아요. 이부분은 위의path('post/<int:pk>/', views.ApiPostDV.as_view(), name="post_detail"), 에서 <int:pk> 에 id 가 들어가는 거로 이해가 됩니다.그런데 태그에 대한 목록 부분은, api/post/list 뒤의 부분은 정의(?)를 안해두었는데, 어떻게 오류없이 저 url 뒤의 태그를 알아서 인식하고 해당 태그에 대한 데이터를 보내주는 것인지 궁금합니다. 감사합니다 :)
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
리뉴얼 강의 질문, 건의
선생님 안녕하세요.좋은 강의해주시고 리뉴얼도 준비해주셔서 감사합니다. 무척 기대하는 마음으로 기다리고 있는데요. 리뉴얼 강의에 대해서 질문 및 요청 사항이 있어서 글 남깁니다. 다른 질문 글에서 리뉴얼 강의에서도 리액트를 다룰 예정이시라고 들었는데요. 리액트에서 18버전에서 업데이트 된 기능들, server component 같은 부분도 다루어지는지, Next를 다루실 계획도 있으신지 궁금합니다. 그리고 혹시 리뉴얼에서 테스팅도 다루실 계획이 있으신가요? 앱을 만들어볼수록 테스팅이 참 중요하다는 걸 느끼게 되는데요. 실습으로 만드는 프로젝트를 위한 테스팅 코드까지 다루어진다면 정말 실전에서 필요한 건 빠지는 게 없는 강의가 되지 않을까 하는 기대를 해봅니다. 감사합니다!
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
프로필 update편 질문있습니다.
프로필 update편 진행 중에 이런 문제가 발생합니다.도와주세요 ㅜㅜ
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
수업질문
버튼 만들어서 post로 보내려고 할 때 발생하는 에러가 달라요강사님 영상에서는 Forbidden에러가 발생하는데 제꺼는 runtime error at /account/hellow_world 에러가 발생합니다. 어디서 문제일까요?
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
COOP error
61강 까지 들었고 IP주소 접근까지 되는데 이미지를 올릴때 COOP 오류가 뜹니다. Nginx.conf 에서 수정해야하나요?
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
61강 Dockerfile error
안녕하세요 61강을 듣고 따라하던중 오류가 있어서 문의드립니다. Docker image를 만들때 FROM python:3.11.6 WORKDIR /home/ RUN echo "testing1234" RUN git clone https://github.com/akfldk1028/pragmatic.git WORKDIR /home/pragmatic/ RUN pip install -r requirements.txt RUN pip install gunicorn RUN pip install mysqlclient RUN echo "SECRET_KEY=django-insecure-s0ypvv7i_g2n6&sax1tgnv7egn_r=4!%j3xmynfv$=hj5b8(ws" > .env EXPOSE 8000 CMD ["bash", "-c", "python manage.py collectstatic --noinput --settings=pragmatic.settings.deploy && python manage.py migrate --settings=pragmatic.settings.deploy && gunicorn pragmatic.wsgi --env DJANGO_SETTINGS_MODULE=pragmatic.settings.deploy --bind 0.0.0.0:8000"] 위의 코드와 같이 그대로 따라 했는데 이전에는 구동이 됬었는데RUN echo "testing1234" ```이거를 위에 붙이니까 다음과 같이 오류가 뜨더군요..fatal: could not read Username for 'https://github.com': No such device or address The command '/bin/sh -c git clone https://github.com/akfldk1028/pragmatic.git' returned a non-zero code: 128오류가 이렇게 떠서 이리저리 어려움을 겪다가 나중에 github 저장소를 private 에서 public으로 바꾸어주니까 다시 진행되긴 했는데 의문점이 남아 질문드립니다. 혹시 나중에 프로젝트를 private로 바꾸고 진행하려면 Docker file에 GitHub 액세스토큰을 추가해야하는 건가요? 아니면 DockerContainer 내에서 SSH키를 사용해야하는건가요?
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
static안에 base.css 에서 정의한 클래스가 적용되지 않습니다.
static안에 base.css 에서 정의한 클래스가 적용되지 않습니다.html 태그 내에서 직접 style로 정의할 때는 되는데 base.css로 옮기고 적용하려고 하면 적용이 안 돼요. 도와주세요 ㅜㅜ
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
강의 자료에 잘못 써져있는건 고쳐주시길 부탁드립니다.
이번에 듣고 있는데 CBV 설명하실 때context = self.get_queryset()를 잘 못 적으셨다고 합니다.이 부분은 강의를 듣는 사람에게 혼란을 야기할 수도 있다고 생각합니다. 그 이유는 설명에서는 get_context로 바꾸면 된다고는 하지만 그 다음 설명인 ListView의 내부를 살펴봤을 땐 'get_context_data', 'get_context_object_name'이 두가지의 함수가 존재합니다.그래서 어느 함수가 쓰여져있는지 강의를 듣는 사람 입장에서 혼란스러울 수 밖에 없는 입장이 될 수 있습니다.이 부분은 물론 강의 듣는 사람이 실습하면서 직접 알아볼 수 도 있지만 강의 하시는 분이시니 고쳐주셨으면 합니다. 오탈자 목록을 지원하지 않으시다면 수정해서 다시올려주시면 감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
drf + react 로 배포 고민이 있습니다
drf + react 로 배포 고민이 있는데요 혹시 참고할만한 강의 있을까요?그리고 portone 결제 강의 들었는데 drf 버젼으로 강의 만들어서 배포까지 가르치는 강의 계획은 없으신가요? 아니면 fastapi나 django ninja + react 강의는 계획 없으신가요?
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
질문
안녕하세요 강사님, 강의 보면서 블로그를 만들어보고 있는데, 혹시 이렇게 백엔드와 프론트엔드 서버를 분리 해서 개발해도, 블로그 친구들이나 팔로워 팔로잉 기능들은 django로 구현이 가능한걸까요?
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
질문입니다 !!
안녕하세요 강사님, 저는 강사님 코드에서 조금씩 수정하여 서버를 띄워보았는데, PostDetail 보여주는 부분에서 계속 오류가 생겨서요,TypeError: Object of type User is not JSON serializable [21/Oct/2023 21:14:51] "GET /api/post/2/ HTTP/1.1" 500 120254이렇게 오류가 뜨는데 왜 이럴까요? ㅠㅠ이전/다음 포스팅 보여주기 전에 포스팅 하나의 상세페이지 띄워주는 것까지는 정상적으로 확인이 됐었습니다.api/views.py# Create your views here. class ApiPostLV(BaseListView): model = Post def get_queryset(self): queryset = super().get_queryset() return queryset.order_by('-create_dt') def render_to_response(self, context, **response_kwargs): qs = context['object_list'] postList = [obj_to_post(obj) for obj in qs] return JsonResponse(data=postList, safe=False, status=200) class ApiPostDV(BaseDetailView): model = Post def render_to_response(self, context, **response_kwargs): obj = context['object'] post = obj_to_post(obj) post['prev'], post['next'] = prev_next_post(obj) return JsonResponse(data=post, safe=True, status=200)api/views_util.pydef obj_to_post(obj): post = dict(vars(obj)) if obj.create_dt: post['create_dt'] = obj.create_dt.strftime('%Y-%m-%d %H:%M') else: post['create_dt'] = '' if obj.modify_dt: post['modify_dt'] = obj.modify_dt.strftime('%Y-%m-%d %H:%M') else: post['modify_dt'] = '' if obj.tags: post['tags'] = [tag.name for tag in obj.tags.all()] else: post['tags'] = [] if obj.owner: post['owner'] = obj.owner.username else: post['owner'] = 'Anonymous' del post['_state'] return post def prev_next_post(obj): try: prevObj = obj.get_prev() prevDict = {'id' : prevObj.id, 'title' : prevObj.title, 'description' : prevObj.description, 'create_dt' : prevObj.create_dt, 'owner' : prevObj.owner} except obj.DoesNotExist as e: prevDict = {} try: nextObj = obj.get_next() nextDict = {'id' : nextObj.id, 'title' : nextObj.title, 'description' : nextObj.description, 'create_dt' : nextObj.create_dt, 'owner' : nextObj.owner} except obj.DoesNotExist as e: nextDict = {} return prevDict, nextDict blog/models.pyclass Post(models.Model): title = models.CharField(verbose_name='TITLE', max_length=50) # verbose_name : 칼럼에 대한 별칭 description = models.CharField('DISCRIPTION', max_length=100, blank=True, help_text='simple description text.') content = models.TextField('CONTENT') create_dt = models.DateTimeField('CREATE DATE', auto_now_add=True) modify_dt = models.DateTimeField('MODIFY DATE', auto_now=True) tags = TaggableManager(blank=True) owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, verbose_name='OWNER', blank=True, null=True) def __str__(self): return self.title def get_absolute_url(self): return reverse('blog:post_detail', args=(self.id,)) def get_prev(self): return self.get_previous_by_create_dt() def get_next(self): return self.get_next_by_create_dt() PostDetail.vue<template> <v-container class="white"> <v-row align="center" justify="center"> <!-- align 속성은 위아래, justify 속성은 좌우 위치 조정 --> <v-col cols="12" lg="10"> <!-- <v-card class="pa-2" outlined tile> --> <h1>{{ post.title }}</h1> <div> <h3>{{ post.description }}</h3> </div> <div> <p style="margin: 5px 0;">작성일자 : {{ post.create_dt }} 최종수정 : {{ post.modify_dt }}</p> <p style="margin: 5px 0;">written by {{ post.owner }}</p> </div> <v-divider></v-divider> <!-- </v-card> --> </v-col> </v-row> <v-row align="start" justify="center"> <v-col cols="12" lg="10"> <!-- <v-card class="pa-2" outlined tile> --> <p style="white-space: pre-wrap;"> {{ post.content }}</p> <div> <strong>TAGS:</strong> <v-chip class="ma-2" outlined v-for="(tag, index) in post.tags" :key="index">{{ tag }}</v-chip> </div> <v-divider></v-divider> <!-- </v-card> --> </v-col> </v-row> <v-row align="center" justify="center"> <v-col cols="12" lg="10"> <v-card class="pa-2" outlined tile> <v-row> <!-- 왼쪽에 다음 글 문구 배치 --> <v-col align="center" cols="2"> <p>이전 글</p> </v-col> <!-- 오른쪽에 다음 글 제목 문구 배치 --> <v-col cols="10"> <div> <h3 v-if="post.prev" @click="fetchPostDetail(post.prev.id)">{{ post.prev.title }}</h3> <p v-if="post.prev" @click="fetchPostDetail(post.prev.id)">{{ post.prev.description }}</p> </div> </v-col> </v-row> </v-card> <v-card class="pa-2" outlined tile> <v-row> <!-- 왼쪽에 다음 글 문구 배치 --> <v-col align="center" cols="2"> <p>다음 글</p> </v-col> <!-- 오른쪽에 다음 글 제목 문구 배치 --> <v-col cols="10"> <div> <h3 v-if="post.next" @click="fetchPostDetail(post.next.id)">{{ post.next.title }}</h3> <p v-if="post.next" @click="fetchPostDetail(post.next.id)">{{ post.next.description }}</p> </div> </v-col> </v-row> </v-card> </v-col> </v-row> </v-container> </template> <script> import axios from "axios"; export default { name: "PostDeatail", data: () => ({ post: {}, }), created() { console.log("created()..."); const postId = 2; this.fetchPostDetail(postId); }, methods: { fetchPostDetail(postId) { console.log("fetchPostDetail()...", postId); axios.get(`/api/post/${postId}/`) .then(res =>{ console.log("POST DETAIL GET RES", res); this.post = res.data; }) .catch(err => { console.log("POST DETAIL GET ERR_RESPONSE", err.response); alert(err.response.status + ' ' + err.response.statusText); }); } } } </script> <style scoped> </style> 계속 다시 코드를 짜보았는데도 어디서 오류가 나는 것인지 모르겠어서요 ㅠㅠ.....감사합니다 .. ㅜㅜ
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
Post model
modify_dt 가 아니라 아래처럼 create_dt 를 기준으로 이전 이후 나누게 코드 짜도 되나요? def get_prev(self): return self.get_previous_by_create_dt() def get_next(self): return self.get_next_by_create_dt()
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
taggit
안녕하세요 강사님, Post model 구현하는 과정에서from taggit.managers 이 부분이 저는 계속 밑줄이 뜨는데 왜 이러는 걸까요? ㅠㅠ
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
질문입니다 !!
안녕하세요 강사님, 5:41 부분에서 safe=True 라고 설명해주셨는데, 이 부분이 잘 이해가 안돼서요.list 데이터 전달해주는 위의 메서드에서는 safe=False 로 두셨는데 왜 이렇게 다르게 하는지 잘 모르겠습니다..... ㅠㅠ 구글링으로 찾아봐도 잘 와닿지 않아서 질문 드립니다 ㅜㅜ
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
질문이 있습니다.. !!
안녕하세요 강사님, post list 기능이 정상적으로 작동합니다.그런데 혹시 최신 포스팅을 목록 가장 상단에 위치하게 하고싶은데, 이건 어떤 속성을 건드려야 하나요? (수정된 건 영향을 주지 않고요 !)질문이 너무 많아서 죄송합니다 ㅜㅜ
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
context 변수
안녕하세요 강사님, api/view.py 에서 context 변수가 데이터가 전달되는? 딕셔너리 변수인 것은 알겠습니다. 그런데정의를 해주지 않았는데 어떻게 딕셔너리 변수가 되며, object_list 라는 키도 따로 context 변수에 넣어주지 않았는데 어떻게 바로 context['object_list'] 로 qs 변수에 저장할 수 있나요?그리고 object_list 또한 어떻게 Post 모델에서 포스팅 목록을 가져올 수 있는 건지 이해가 안됩니다 ㅠㅠ 이런거는 다큐먼트를 봐야 이해할 수 있을까요? ㅜㅜ
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
AUTH_USER_MODEL
안녕하세요 강사님,6:18 부근에서요, settings.py 에 AUTH_USER_MODEL='account.User' 을 명시해주시는데, Post 모델과 같이 다른 데이터를 받는(?) 모델은 이런 설정을 추가 안해주고, 유저 모델만 이렇게 명시를 해주어야 하는 이유가 있나요?그리고 이렇게 유저 모델 설정을 안해주면 문제가 발생할까요?
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
Magic Method - Not Implemented
안녕하세요,magic method를 다양하게 연습해보고 있었는데 하기와 같이 코드를 작성하니 에러는 아니지만 값 대신 'Not Implemented' 라는 문구가 출력되더라구요. 왜 그런걸까요? n = 10f = 12.345print (n.__mul__(f)) print (n.__mul__(12.345))는 값을 반환해주는 걸로 보아 int, float 차이 때문은 아닌 것 같습니다.