묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 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를 사용해선 어떻게 지정해주면 되는지 궁금하네요
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
파이썬, 장고 버전에 대한 질문
안녕하세요 선생님 조금전 수강을 시작한 학생입니다. 제가 groom ide를 사용하여 django 프로젝트를 개발한 후 heroku에 배포를 하려니까 groom이 제공하는 3.7.4 버전을 지원하지 않아 git push heroku master 에서 빌드에러가 났었습니다. https://devcenter.heroku.com/articles/python-support Supported runtimes python-3.10.1 on all supported stacks python-3.9.9 on all supported stacks python-3.8.12 on all supported stacks python-3.7.12 on all supported stacks python-3.6.15 on all supported stacks 강좌가 제작되고 시간이 흘러 지금은 3.7.12까지 나왔는데요 anaconda에선 3.7.11이 최신 버전이더라고요. 강좌를 따라가다가 나중에 heroku에 배포할때 문제되는 부분은 없을까요? 또한 장고도 현재 4.0버전이 나왔고 3.0버전을 더이상 지원하지 않고 3버전 중에선 3.2.10이 최신 릴리즈라 3.2.10을 설치해놨습니다. 앞으로 강좌를 진행하며 이 부분에서 문제되는 부분이 있을까요? 감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요 선생님!!!!!! createview form_valid에 대해서 질문드립니다!!
안녕하세요!!!!!!! 선생님 스승님!!!!!!!!!!!!!!!!!!♥♥♥♥♥ createview에 대하여 질문드릴게 있습니다!!!!!!!!!! 먼저 설계한 모델 간단히 보여드리면! (나머진 길어서 생략) 위에는 driver모델이구요! 위는 driver 모델과 1대1 외래키 관계인 Transfer모델입니다. 제가 원하는 구현은 ※ 위는 for문으로 driver모델을 루프를돌면서 template에 표현했습니다. 위의 나온 표대로 키값이 있고 (키값 = driver모델의 driver_pk 필드입니다) 이직 날짜가 아직없는(tranfer모델이 아직 생성되지 않은) 키값에 대해서는 새롭게 tranfer모델을 생성하고 싶습니다!!! (이미 tranfer모델이 있는 driver모델에 대해서는 저렇게 이직날짜가 나와있도록 표현했습니다) 위 그림 나온대로 정해진 키값에 대해서만 tranfer모델을 create하고 싶은데 위 사진에 보시면 driver모델이 선택할 수 있도록 활성화가 되있습니다. (위는 tranfer modelform을 표현한것입니다!) 즉 위 사진에 나온 키값이 '오로라1351 ' 행에 있는 이직create 버튼(회색버튼)을 누르면 '오로라1351'키값(Driver) 은 이미 고정되서 수정할수 없도록 disable상태가 되어있고 나머지만 이직날짜, 이직횟수등만 create해서 저장하고 싶습니다!! (따로 구현한 updateview는 동작이 잘됩니다!!) 제생각엔 위와 같이 form_valid를 건들면 될것 같은데 (물론 제생각입니다) 어떻게 하면 좋을까요!!?? 존경하고 감사합니다!!!!
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
폼 작성 패턴 질문
안녕하세요 강사님. 폼 작성 패턴에 관해서 질문드리고자 합니다. 한 API에서 여러개의 모델과 인터렉션해서 저장하고자 할 때, 하나의 폼으로 처리하는 경우가 있을수도 있을거같은데요. 폼 하나에서 여러 모델에 대한 필드를 검사하는 경우도 흔히 사용하는 패턴인지 궁금합니다. (ex. Form -> Model1, Model2, Model3 ) 만약 이러한 패턴도 필요에 따라 사용하는것이 괜찮다고 한다면 폼의 유효성 검사 이후에 뷰에서 여러 모델 클래스들을 선언해서 저장한다면 코드가 매우 복잡해질 것 같다고 생각했습니다. 개인적으로 강사님게서 샘플코드로 작성해 주신 폼 내의 save()메서드 내에서 이를 진행하는게 좋아보인다고 생각했습니다. 하지만 프로덕션 레벨에 사용할만한 코드가 아니라고 강조를 해주셔서 무언가 도돌이표처럼 고민이 되네요. 질문을 정리해보자면 1. 애초에 일반 폼 하나에서 여러 모델의 필드를 유효성 검사하는것이 좋지 않은 패턴인지. (폼과 모델은 1:1 대응이 되어야 하는지?) 2. 일반 폼 하나에서 여러 모델의 필드를 유효성 검사 후 save()함수를 구현해서 여러 모델과의 인터렉션을 하는것도 괜찮은 방법인지? 답변 주시면 감사하겠습니다. 좋은 강의 감사합니다.
-
미해결Vue.js - Django 연동 웹 프로그래밍
vue django 연동 질문
안녕하세요, 김석훈 강사님의 강의 두가지를 들었습니다. 첨에는 내용이 너무 어려워서 중간에 포기도 했었는데 시간이 지나니 이해가 안가는 부분은 없더라구요 다만 제가 대시보드를 개발해야 하는 상황인데, vue.js로 만들어진 대시보드 템플릿들은 vue CLI?를 이용해서 만들어져있다보니 App.vue 파일로 되어있는경우가 많았습니다. 이러한 파일들은 django와 어떻게 연동해야하는지 아무리 검색해봐도 자료도 잘 나오지않더라구요... webpack? 이라는 것을 이용하면 가능한것처럼 보이는데 공식자료같은것들이 거의 전무한것을보면 잘 안쓰는 방식인것같기도 한데... 혹시 어떤식으로 연동을 하나요? 그냥 이 강의영상처럼 html파일에 vue 스크립트를 넣어 구현하는것이 보편적인 방법인가요?