묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
클래스 변수와 인스턴스 변수
클래스 변수를 이용한 코드를 혼자서 작성하다가, 조금 궁금한 부분이 있어 질문드립니다. 사람이 가방에 물건을 넣는 동작을 클래스로 구현해보고자 했는데요 class Person: bag = [] def put_bag(self, stuff): self.bag.append(stuff) james = Person() james.put_bag('책') maria = Person() maria.put_bag('열쇠') print(james.bag) print(maria.bag) 다음과 같이 bag 라는 클래스 변수를 선언하고, 코드를 실행해보니 james.bag와 maria.bag를 출력한 결과가 같게 나왔습니다. 각각 다른 인스턴스를 생성하여 bag에 물건을 넣었는데도 결과가 같게 나온 이유를 생각해 보았는데요... james.put_bag('책') 이 코드를 실행하면 def put_bag(self, stuff): self.bag.append(stuff) 이 메소드에서 self에는 james가 할당되므로 결과적으로 james.bag.append('책') 이 실행될 것입니다. 그런데 코드 상에서 james 인스턴스는 bag라는 변수가 네임스페이스에 존재하지 않으므로, 그 대신 Person 클래스의 네임스페이스에서 bag 변수를 찾아 여기에 '책'을 넣었다고 생각을 하였습니다. 혹시 잘못된 부분이 있으면 설명 부탁드립니다. 감사합니다
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
django url 매핑 관련 질문입니다.
안녕하세요. 장고 초보자 입니다. url 호출시 404 에러가 출력되어 질문하고 싶습니다. 쿠버네티스 환경에서 url ingress에 default path를 등록하였고 django에서 서브디렉토리를 urls.py에 등록하였는데 404에러가 뜨고 있습니다. 이런 경우 어떤 문제가 의심되는지 아시는 분 계시다면 댓글 부탁드립니다..ㅠ k8 ingress app/urls.py cu_auth/urls.py url 호출시
-
해결됨우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
내용 질문
안녕하세요! level 1을 마치고 level 2를 들을려고 합니다. level 2와 동시에 Django로 웹 개발공부를 해볼려고 합니다. 인프런에서 Django 로 코스를 선택했습니다. 그런데, 그 강좌에서 선수 파이썬 기본지식으로 `함수/클래스/상속/일급함수/장식자` 내용을 알아야 들을 수 있다고 하네요. 함수와 클래스는 Level 1에서 들었다고 하면 일급함수, 장식자는 TOC를 보면 Level2 에서 충분히 확인할 수 있는데, 상속은 어디서 들을 수 있는 건가요??? Level 3으로 가야 하나요????
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
django 관련 질문
안녕하세요! 이제 강의를 들을려고 합니다. 먼저 저의 상황은 이와 같습니다. Django를 통해 전체적인 웹개발에 대한 흐름을 공부해볼려고 시작합니다. 그 후, backend web 개발자나 Devops나 Data 분야로 가는 것을 결정해볼라고 합니다. Django에 대해 그냥 유튜브 검색을 해보니 [Django를 추천하지 않는 이유](https://www.youtube.com/watch?v=ObelJbEt8-Y) 를 보게 되었습니다. 이 영상에서 봤을 때, 웹 개발을 공부하고 싶으면 Django를 하지 말고 Spring을 해야 한다는 의견이었습니다. Django는 너무 dB에 집중되어 있다고 했습니다. 3년 전 영상이라 지금은 어떨지 모르겠습니다. java spring 시장이 한국에서 매우 거대하여 python Django가 상대적으로 적어도, 절대적으로는 적은 수는 아니라고 생각합니다. (그리고 python은 너무너무 가용성이 좋은 언어라 개인적으로 좋아하는 언어입니다 : ) ) 이에 대해 어떻게 생각하시는 지 궁금합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
passwordChangeForm을 FBV로 하면 안되나요?
안녕하세요 선생님 휴일인데 죄송합니다. 저는 강의를 듣기전에 미리 한번 먼저 해보고 하는 방식으로 공부중입니다. 다만 로그인이나 프로필 수정쪽은 FBV를 사용해서 직접 구현을 하셔서 이번 비밀번호 변경도 FBV로 구현을 하겠구나 생각하고 AUTH앱의 PasswordChangeForm과 FBV로 구현해보고 강의를 수강하였습니다. 선생님께서는 CBV로 구현을 하셔서 질문드립니다. CBV와 FBV를 다양하게 쓰는 예를 보여주시려고 사용하신건가요? 아니면 CBV는 AUTH앱의 passwordchangeVIew를 가져오면 기능들이 갖춰져 있기 때문에 편리하고 더 효율적이기 때문에 사용하신건가요? 아니면 그냥 아래 처럼 맞는지는 모르겠지만 함수로 구현해도 상관은 없는건가요? 처음 질문이라 좀 요점이 없는것 같은데 죄송합니다. @login_required def password_change(request): if request.method == 'POST': form = ChangeForm(request.POST) if form.is_valid(): form.save() messages.success(request,"비밀번호 변경 성공") else: form = ChangeForm() return render(request,"accounts/password_change_form.html",{'form':form,})
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
회원가입 시 sendgrid로 이메일 보내기 구현 중 질문드립니다.
강사님 안녕하세요~! 실습을 진행하면서 회원 가입시 sendgrid를 통해 메일을 보내는 부분 구현에서 에러 해결이 안되어 질문을 드립니다. 강의 영상을 참고해서, sendgrid 회원가입과, api key 발급을 마치고 다음과 같이 (window 환경에서 set 명령어를 통해) 환경 변수 설정이 된 것도 확인 했는데 회원가입 버튼을 누르면 다음과 같은 에러가 발생합니다. (django admin을 통해 봤을 때 회원가입은 이뤄지는 것을 보았습니다.) 혹시 에러의 원인이 무엇일지 짐작가시는 것이 있으실까 싶어서 질문을 드렸습니다. 그럼 감사합니다. !!
-
미해결
장고 프로젝트 중인데 페이지 이동이 되지를 않습니다.
파이썬과 장고를 이제 막 공부를 시작해서 프로젝트를 만들고 있는데, 아직 장고 기초지식이 부족한지 해결을 하기 어렵습니다.. 네이버 블로그 검색 api와 유튜브 api를 사용중이며, 구글처럼 메인페이지에서 검색을 하면, 그에 맞는네이버 블로그 글들과 유튜브 영상들이 나오게 하려고 합니다. 발생된 문제는, 검색 후 all.html 이라는 검색정보를 보여주는 페이지로 이동해야 되는데 왜인지 주소만 변경되고 이동이 되지않고 메인페이지로 유지됩니다. (http://127.0.0.1:8000/ -> http://127.0.0.1:8000/all ) <메인페이지> <코드> # urls.py from django.conf import settings from django.conf.urls import url, include from django.conf.urls.static import static from django.urls import path from . import views urlpatterns = [ url(r'^', views.index, name='index'), path('all/', views.all, name="all"), url(r'info/$', views.get_request_url, name="info"), url(r'video/$', views.youtube, name="video"), ] # views.py import json, os, sys, urllib.request, requests from django.shortcuts import render from django.conf import settings from django.views.generic import FormView from requests import request def index(request): return render(request, 'common/main.html') def make_naver_search_api_url(search_text, start_num, disp_num): base_url = 'https://openapi.naver.com/v1/search/blog.json' param_query = "?query=" + urllib.parse.quote(search_text) param_start = "&start=" + str(start_num) param_disp = "&display=" + str(disp_num) return base_url + param_query + param_start + param_disp def all(request): # naver search value search_text = request.POST.get('searchValue',"") API_URL = make_naver_search_api_url(search_text,1,30) config_secret_debug = json.loads(open(settings.SECRET_DEBUG_FILE).read()) client_id = config_secret_debug['NAVER']['CLIENT_ID'] client_secret = config_secret_debug['NAVER']['CLIENT_SECRET'] request = urllib.request.Request(API_URL) request.add_header("X-Naver-Client-Id", client_id) request.add_header("X-Naver-Client-Secret", client_secret) response = urllib.request.urlopen(request) rescode = response.getcode() print(rescode) if (rescode == 200): # youtube search value url = 'https://www.googleapis.com/youtube/v3/search' params = { 'key': '유튜브api', 'part': 'snippet', 'type': 'video', 'maxResults': '30', 'q': search_text, } response = requests.get(url, params) response_dict = response.json() response_body = response.read() naver_result = json.loads(response_body.decode('utf-8')) naver_items = naver_result.get('items') context = { 'items': naver_items, 'youtube_items': response_dict['items'] } return render(request, 'searchView/all.html', {'info_items': context[0], 'video_items': context[1]}) else: return None print("---error---") # main.html (메인페이지) <body> <div class="container"> <div class="mainBox"> <div class="logoBox"> <img src="{% static 'img/logo_transparent.png' %}" class="mainLogo"> </div> <form class="d-flex" method="POST" action="{% url 'all' %}"> {% csrf_token %} <div class="searchBox" style="display: flex"> <input class="form-control me-sm-2" type="text" placeholder="검색어를 입력" name="searchValue" value="{{ searchValue }}"> <button class="btn btn-info my-2 my-sm-0" type="submit">Search</button> </div> </form> </div> </div> </body> # all.html (페이지 이동 테스트 성공 후 작업예정) - 이 페이지는 무시하셔도 됩니다 {% extends 'common/base.html' %} {% block content %} <div class="contentFlexBox"> <div class="infoBox"> <div class="infoDetail"> {% for info in info_items %} <a href="{{ info.link }}" class="list-group-item list-group-item-action flex-column align-items-start"> <div class="d-flex w-100 justify-content-between"> <h5 class="mb-1">{{ info.title }}</h5> <small class="text-muted">{{ info.bloggername }}</small> </div> <p class="mb-1">{{ info.description }}</p> <small class="text-muted">{{ info.postdate | date:"Y-m-d"}}</small> </a> {% endfor %} </div> <div class="pageNavi"> <ul class="pagination"> <li class="page-item disabled"> <a class="page-link" href="#">«</a> </li> <li class="page-item active"> <a class="page-link" href="#">1</a> </li> <li class="page-item"> <a class="page-link" href="#">2</a> </li> <li class="page-item"> <a class="page-link" href="#">3</a> </li> <li class="page-item"> <a class="page-link" href="#">4</a> </li> <li class="page-item"> <a class="page-link" href="#">5</a> </li> <li class="page-item"> <a class="page-link" href="#">»</a> </li> </ul> </div> </div> <div class="videoBox"> <a href="#" style="text-decoration: none;"> <div class="card mb-3"> <div class="card-body videoText"> <h5 class="card-title">영상제목</h5> <h6 class="card-subtitle text-muted">채널주인</h6> </div> <svg xmlns="http://www.w3.org/2000/svg" class="d-block user-select-none" width="100%" height="200" aria-label="Placeholder: video cap" focusable="false" role="img" preserveAspectRatio="xMidYMid slice" viewBox="0 0 318 180" style="font-size:1.125rem;text-anchor:middle"> <rect width="100%" height="100%" fill="#868e96"></rect> <text x="50%" y="50%" fill="#dee2e6" dy=".3em">video cap</text> </svg> <div class="card-body videoText"> <p class="card-text">동영상 소개글</p> </div> <div class="card-footer text-muted"> 게시일 </div> </div> </a> <div class="pageNavi"> <ul class="pagination"> <li class="page-item disabled"> <a class="page-link" href="#">«</a> </li> <li class="page-item active"> <a class="page-link" href="#">1</a> </li> <li class="page-item"> <a class="page-link" href="#">2</a> </li> <li class="page-item"> <a class="page-link" href="#">3</a> </li> <li class="page-item"> <a class="page-link" href="#">4</a> </li> <li class="page-item"> <a class="page-link" href="#">5</a> </li> <li class="page-item"> <a class="page-link" href="#">»</a> </li> </ul> </div> </div> </div> {% endblock %} 책도 보고 인터넷을 검색해도 도통 해결방법을 모르겠습니다.. 혹시 어디부분이 문제인지 말씀해주시면 확인 후 수정하겠습니다..!
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
로그인 오류
강사님 잘 보고 있습니다 :) 제가 로그인을 구현하고나서 로그인 확인 버튼을 누르니 하단상태의 오류가 나타났습니다. request url 을 보니 accounts/profile 로 되어있던데, profile 파일이 저에겐 없습니다... 이때문에 생기는 오류일까요?
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
docker구문에서 migrate할 때 에러가 뜹니다
dockerfile을 만든후 실행을 시켰을 때 migrate 부분에서 ker error : DATABASE_URL 이 나오는데 경로도 제대로 지정했고 오타도 없는데 왜 안되는지 모르겠습니다 ㅠㅠ
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
Dockerfile 오류 문의드립니다.
RUN python manage.py collectstatic --noinput 위 명령어를 입력하고 설정을 했으나 아래와 같은 메시지가 뜨는데요 ㅠㅠ 선생님께서 설정해주신 부분과 상당히 유사하게 진행하고 있는데 왜 그런지 궁금합니다. 혹시 추측이 가능한 부분이 있으실까요? # 오류 # 디렉토리 구조 # settings.py
-
미해결
summernote 구현시 파일 저장 장소 수정
안녕하세요? djaono 프레임워크에 썸머노트를 이용하여 글쓰기(이미지 포함)를 구현중에 있습니다. 보통 summernote에 글과 이미지를 삽입하여 저장하면 다음과 같이 media폴더 하위에 이미지가 저장이 됩니다. 예) media/django-summernote/2022-02-15/test.jpg 위의 기본 저장장소를 다음과 같이 변경하고 싶은데 방법을 모르겠습니다. media/사용자아이디/django-summernote/2022-02-15/test.jpg 또는 media/사용자아이디/2022-02-15/test.jpg 물론 settings.py 에 미디어 경로를 MEDIA_ROOT = os.path.join(BASE_DIR, '_media/사용자아이디') 와 같이 수정하면 가능은 합니다. 사용자아이디를 하드코딩하지 않고 로그인한 사용자의 아이디(세션아이디)를 이용하여 동적으로 생성하고 싶습니다. 구현방법에 경험이 있으시거나 알고 계시분 있으시면 답변 부탁드립니다. 감사합니다.
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
db접근 및 출력문제
안녕하세요! DB에 정보를 접근하고 for문으로 출력하는 부분에서 출력이 되지않는 문제가 생겼습니다. 이 강의 전에 hello_world_output으로 접근해서 출력할 때는 입력할 때마다 input값이 출력되었습니다. (새로 입력할 때마다 기존의 입력값은 없어짐) 근데 이번 강의에서 hello_world_list와 HttpResponseRedirect로 변경하고, 실행했을 때 input에 값을 입력하면 새로고침만 되고 출력이 되지않습니다.. html과 views.py파일 모두 강의 내용과 같고, 개발자도구를 켜서 보면 아래와 같이 h4태그가 있기는 한데 아무것도 보이지 않습니다. 혹시 몰라 말씀드리자면, 강의 내용과는 다른 곳은 환경 변수를 분리할 때 입니다. 라이브러리가 달라져서 settings.py에 아래와 같이 입력했습니다. from pathlib import Path import environ import os env = environ.Env( # set casting, default value DEBUG=(bool, False) ) # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # SECURITY WARNING: keep the secret key used in production secret! environ.Env.read_env( env_file=os.path.join(BASE_DIR,'.env') ) # pymysql.install_as_MySQLdb() SECRET_KEY = env('SECRET_KEY') # SECURITY WARNING: don't run with debug turned on in production! DEBUG = env('DEBUG')
-
미해결Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
Django markdownx 대체 모듈
안녕하십니까. 강의는 너무 잘 듣고 있습니다. 혹시 markdownx 를 대체할만한 모듈은 없을까요? 뭐든 최신버전으로 쓰는게 찝찝하긴 해도 기분좋은데, django 4.0.1 버전이 업데이트 되고 시간이 많이 지났음에도 불구하고 아직 지원을 하지 않네요.(사실 모듈이꼬여 가상환경을 다시 구축 하였습니다ㅜ) 혹시 대체할만한 모듈이 있다면 한번 사용해보고 싶습니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
static File 불러오기 에러
강사님 안녕하세요~~ 강의를 따라하며 실습을 진행하고 있는데.. 말씀 주신대로 static 폴더 안에 bootstrap 압축 파일과 jquery 파일을 집어 넣은 후 페이지를 새로 고침했는데, 에러가 발생합니다. common.py에서 STATIC 경로가 조금 이상한 것인가 싶어서 다시 살펴보았는데.. 제 눈에는 아무리 보아도 원인을 잘 모르겠어서 문의를 드립니다 ㅠㅠ !! 에러 화면들을 캡처 사진으로 올려드립니다. 파일 경로입니다. common.py 입니다. BASE_DIR이고, STATIC FILE 부분입니다. layout.html 입니다. ----- 혹시나 common.py 부분에서 가운데 'adminWeb'을 제거하고 STATICFILES_DIRS를 이렇게 바꾸면 해결이 될까 싶었는데, 이렇게 실행을 하면 다음과 같이 아예 작동이 되지 않습니다..! 이 곳에서 강사님께서 보시기에 에러가 날 만한 부분이 있을지,, 여쭈어봅니다. 꼼꼼한 강의를 제공해주시고, 친절한 답변해주셔서 감사합니다.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Django 로 이용한 머신러닝/딥러닝 서비스
안녕하세요 강사님 퀄리티 높은 강의와 디테일좋은 강의 감사드립니다. 머신러닝에도 관심이 있어 공부를 하던와중에 내가직접 서비스를 하려면 백엔드의 지식도 필요할듯하여 감사하게 강의를 듣고있습니다. 머신러닝/딥러닝 서비스를 사용하기위한 백엔드 서비스가 Django 가 좋은것같은데 현업에서도 많은 사용을 하고있나요? (아마 강사님께서도 많은 컨설팅을 해주셔서 아실거라 생각이 들어 질문을 드립니다.) 딥러닝 모델을 웹에서 돌리기위해서는 병렬처리?가 필요할듯한데 Django 에서는 이러한 부분에대한 솔루션이 있는지 또한 궁금합니다. 감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
composite field에 대해서 auto increment 적용하기
아래와 같은 클래스가 있습니다. class Foo(models.Model): name = models.CharField(max_length=20) value = models.PositiveIntegerField(default=1, auto_increment=True) class Meta: constraints = [ models.UniqueConstraints(fields=["name", "value"], name="unique name value") ] 위에서 value의 auto increment가 name 속성과 연관돼서 동작하도록 구성하고 싶습니다. 예를 들어 Foo(name="김길동")을 생성하면 name="김길동", value=1 레코드가 생성되고, 다시 Foo(name="김길동")를 생성하면 auto_increment로 name="김길동", value=2 레코드가 생성됩니다.여기서 추가적으로 Foo(name="박길동")을 생성하면 value가 3이 아니라 다시 박길동에 대해서 처음부터 auto_increment가 동작되어 name="박길동", value=1로 생성되도록 하고 싶습니다. 이를 위해서 models.Model의 save 메서드를 오버라이딩하거나 validation을 사용하지않고 구현하는 방법이 있을까요?
-
미해결Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
도커로 서비스 시작하기 강의에서
docker-compose up -d --build 후마이그레이션 하는 과정에서 makemigrations 적용이 되지 않아서 질문 올려드립니다. 문제가 뭔지 열심히 찾아봐도 도통 뭑가 문제인지 모르겠습니다github 주소는 여기있습니다
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
db에서 모든 데이터가 가져와진 이유
def post_list(request): qs = Post.objects.all() q=request.GET.get('q','') # 'q' 없으면 ''반환 if q: qs = qs.filter(messages__icontains=q) return render(request, 'instagram/post_list.html', { 'post_list':qs, }) 필터를 통해서 messages에 'q'라는 단어가 들어간 애들만 들어가있는 쿼리셋을 가져오는데 messages에는 '첫번째 내용', '두번째 나용'이잖아요, 근데 어떻게 모든 데이터를 가져올 수 있는건가요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
argument 질문
아래 argument에 post는 무엇인가요? def photo_tag(self,post): if post.photo: return mark_safe(f'<img src="{post.photo.url}" style="width:75px;"/>') return None def message_length(self, post): return f"{len(post.message)}글자" 모델명은 Post인데 어디서 나온 값인지 잘 모르겠네요 파이썬 문법공부가 부족해서 잘 모르는것 같네요
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
django 3.2.10에서 media root 경로
현재 settings.py의 BASE_DIR은 다음과 같습니다 from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent 이때 MEDIA_ROOT의 경로는 어떻게 지정해줘야 하나요? 아니면 그냥 # from pathlib import Path import os # Build paths inside the project like this: BASE_DIR / 'subdir'. # BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 이렇게 하고 진행하는게 나을까요? Path 가 다른부분에서 쓰이진 않는것같아서 괜찮을 것 같긴 한데 Path를 사용해선 어떻게 지정해주면 되는지 궁금하네요