수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?
안녕하세요 진석님! 좋은 강의 잘 보고 있는 한 학생입니다!오늘 강의를 보다가 궁금한 점이 생겨서 질문을 남겨봅니다. jupyter로 코드 실습 하시다가 언급하시는 부분(9분 57초) 에서get_uer_model() 메서드를 활용하기를 권장하셨습니다. 혹시 이 부분에 대한 이유를 알 수 있을까요?이전까지 Model 을 작성하실 때에는 settings.AUTH_USER_MODEL을 사용하라고 하셨는데 어째서 해당 부분을 import 하지 않고 get_user_model()을 써야 하는지 이해가 되지 않아서 질문 드렸습니다!이미 settings.AUTH_USER_MODEL 을 settings.py에서 변수에 할당한 상태라고 가정한다면, settings.AUTH_USER_MODEL 을 바로 import 하는게 메모리를 더 효율적으로 사용할 수 있는 방법이 아닌건가 하는 의문점이 있는 상태에서 질문 드린 점 참고 부탁드리겠습니다. (__ __ ) 요약하자면 이렇습니다.Q1. 9:57에서 언급하신 권장방법은 어째서 settings.AUTH_USER_MODEL을 import 하지 않고 get_user_model() 을 사용해야 하는가?Q2. settings.AUTH_USER_MODEL은 Model 이 아닌것인가?Q3. settings.AUTH_USER_MODEL을 import 해서 user.profile한 경우와 get_user_model() 을 import 하여 user.profile을 한 경우의 차이점은 무엇인가? 장고 강의에 항상 애정을 쏟아주셔서 감사합니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
useEffect 훅에서 else 유무에 따른 결과
안녕하세요.다음 코드에서 useEffect(() => { if (!origUserList) setUserList([]); else setUserList(origUserList.map(user => ({ ...user, is_follow: false }))); }, [origUserList]);else가 있어야 하는 이유가 return 하지 않을 것이기 때문이라고 05:55 에서 말씀하셨는데, 이 부분에 대해 이해가 가지 않습니다.그냥 보기에는 else가 없어도 동일하게 작동할 것 같아서 else를 빼봤는데 아니나 다를까 다음과 같은 에러가 납니다.SuggestionList.js:24 Uncaught TypeError: Cannot read properties of undefined (reading 'map')chatGPT에게 물어보니 else가 없어도 동일한 로직이라고 하는데 이유를 모르겠습니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
useAxios 훅의 dependency array 설정
안녕하세요.useEffect 훅을 사용했을 때는 dependency array를 빈배열 [] 로 설정하였는데,마찬가지로 useAxios에서도 다음과 같이 이렇게 설정되어야 되지 않나 궁금합니다.const [{ data: userList, loading, error }, refetch] = useAxios( { url: "http://localhost:8000/accounts/suggestions/", headers }, [] );```
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
useEffect에서 변수 업데이트 관련 질문
안녕하세요.본 강의에서 보여주신 회원가입 버튼 비활성화 로직은 다음과 같습니다. useEffect(() => { const isEnabled = Object.values(inputs).every((s) => s.length > 0); setFormDisabled(!isEnabled); }, [inputs]);위의 코드로 실행하면 username과 password를 모두 입력하면 회원가입 버튼이 활성화되고 하나라도 지우면 다시 비활성화 됩니다. useEffect(() => { if (inputs.username && inputs.password) { setFormDisabled(false); } }, [inputs]);그러나 조금 수정하여(이외의 부분은 모두 동일) 위와 같이 실행해보면, 본래의 코드와 마찬가지로 모두 입력되었을 때 버튼이 활성화 되지만 다시 지워도 비활성화가 되지 않습니다. 두 곳 모두 지워봐도 마찬가지입니다. console.log로 찍어보아도 false 값으로 고정된 채 바뀌지 않습니다.useEffect가 비동기 방식이므로 formDisabled가 업데이트 되는 타이밍 문제도 고려해 보았지만, 그렇다면 본래의 코드에서도 이런 문제가 발생하여야 할 것이라고 판단했습니다.여러모로 분석해 보았지만 이유를 알기가 어렵습니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
rest_framework.generics.CreateAPIView의 model 속성 유무
안녕하세요. rest_framework의 소스코드(https://github.com/encode/django-rest-framework/blob/0f39e0124d358b0098261f070175fa8e0359b739/rest_framework/generics.py#L188)를 보면 CreateAPIView 에는 model 속성이 없는 것으로 보입니다. 상위 클래스인 CreateModelMixin과 GenericAPIView를 살펴봐도 이러한 속성은 없는 것으로 보이는데요...그래서 SignupView에 model 속성을 생략하고 signup을 실행해보았더니 문제가 없었습니다.class SignupView(CreateAPIView): # model = get_user_model() serializer_class = SignupSerializer permission_class = [ AllowAny ]모델 속성을 포함한 이유가 있으실까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
bootstrap4
혹시 django boorstrap4는 django4.x.x를 지원 안하나요.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요
안녕하세요 어제 부터 구매해서 강의를 보며 따라서 공부하고 있습니다. 리뉴얼 강의가 오픈이 되면 현재 강의를 계속 볼수 있는 걸까요 .. 감사합니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법
진석님 안녕하세요! 현재 forms.py에서 admin form 커스터마이징 해서 사용하고있습니다. A라는 모델에 group / code 필드가 있고, group : code = 1 : N 관계입니다.(FK처리는 안해놓은 상태입니다.) group과 code 모두 select widget으로 구성해놨는데, code 필드의 구성을 group 선택할 때 마다 다르게 지정하고싶습니다. 혹 구글에 검색할 수 있는 키워드라도 알 수 있을까요? 좋은 강의 제공해주셔서 프로젝트 순항중에 있습니다. 언제나 감사합니다 :)
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
useState는 필수일까요?
안녕하세요. useState()를 사용하지 않고,단지 data로 받아서data.map(suggestion) => ( ... )이렇게 처리해도 되는지 궁금합니다.컴포넌트의 return 내부에서는 상태가 변경될 일이 없을 것 같아서 말입니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.
comment 클래스를 정의하고나서python manage.py makemigrations instagram 명령어를 실행하고 나니 default 값을 지정해주라는 메시지가 나왔습니다.구글링을 통해 default 값을 지정해 주었더니 옵션값은 하나만 지정해 주어야 한다는 error 메시지가 출력 되었습니다.(참고한 블로그글 은 https://terrorjang.tistory.com/entry/Django-It-is-impossible-to-add-the-field-createdat-with-autonowaddTrue#google_vignette이곳 입니다.) 어떻게 해결해야 할지 몰라서 도움을 요청합니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Django allauth를 사용한 소셜 로그인 시 에러
안녕하세요. 강의 잘 듣고 있습니다 :)강의 내용과는 상관없지만, 개인 프로젝트에서 소셜로그인을 사용할 일이 있어 테스트해보고 있습니다.https://egg-money.tistory.com/117이 글을 참고하여 구현했는데 구글 로그인 선택 후 계정 선택 화면을 넘어간 후에 아래와 같은 상황이 발생합니다.admin 페이지를 확인해보니 user에 정보가 저장되지 않았습니다. 이에 대한 해결 방법이 있을까요?pip freeze를 통해 출력한 버전은 다음과 같습니다. asgiref==3.7.2 asttokens==2.4.1 cachetools==5.3.2 certifi==2023.11.17 cffi==1.16.0 charset-normalizer==3.3.2 colorama==0.4.6 contourpy==1.2.0 cryptography==41.0.7 cycler==0.12.1 decorator==5.1.1 defusedxml==0.7.1 dj-rest-auth==5.0.2 Django==5.0 django-allauth==0.58.2 django-cors-headers==4.3.1 django-debug-toolbar==4.2.0 django-dotenv==1.4.2 django-pydenticon==0.2 djangorestframework==3.14.0 djangorestframework-simplejwt==5.3.1 et-xmlfile==1.1.0 executing==2.0.1 fonttools==4.46.0 google-auth==2.25.1 google-auth-oauthlib==1.1.0 gspread==5.12.2 httplib2==0.22.0 idna==3.6 ipython==8.18.1 jedi==0.19.1 joblib==1.3.2 kiwisolver==1.4.5 matplotlib==3.8.2 matplotlib-inline==0.1.6 numpy==1.26.2 oauth2client==4.1.3 oauthlib==3.2.2 openpyxl==3.1.2 packaging==23.2 pandas==2.1.3 parso==0.8.3 Pillow==10.1.0 prompt-toolkit==3.0.43 pure-eval==0.2.2 pyasn1==0.5.1 pyasn1-modules==0.3.0 pycparser==2.21 pydenticon==0.3.1 Pygments==2.17.2 PyJWT==2.8.0 pyparsing==3.1.1 PyQt5==5.15.10 PyQt5-Qt5==5.15.2 PyQt5-sip==12.13.0 python-dateutil==2.8.2 python3-openid==3.2.0 pytz==2023.3.post1 requests==2.31.0 requests-oauthlib==1.3.1 rsa==4.9 scikit-learn==1.3.2 scipy==1.11.4 six==1.16.0 sqlparse==0.4.4 stack-data==0.6.3 threadpoolctl==3.2.0 traitlets==5.14.0 tzdata==2023.3 urllib3==2.1.0 wcwidth==0.2.12
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러
안녕하세요 선생님강의와는 별개인데 해결되지않는 문제가 생겨 여쭤봅니다기존 pycharm에서 장고 프로젝트를 시작하고 깃헙에 올리며 개발을 진행중이었습니다. 개발 과정 중 프로젝트 명을 바꿔야하는 경우가 생겼는데 프로젝트명 변경 뒤 인터프리터 에러가 발생해 기존 사용중이던 venv 를 삭제하고 새롭게 인터프리터 설정을 해주었고 기존 사용하던 라이브러리도 requirements 문서를 통해 그대로 내려받았습니다. settings.py파일 경로를 config/settings/local.py로 바꿨어서 DJANGO_SETTINGS_MODULE 환경변수도 지정해주었습니다. 그런데 이 변경이 문제인지, pycharm 업데이트가 문제인지 모르겠으나, 그 뒤로 django debug toolbar를 사용하며 디버그 모드를 실행했을때, 초기 페이지가 아주 느리게 뜸과 동시에 django debug toolbar 관련 파일에 대한 304코드와 함께 디버깅이 강제 종료 되는 경우, 기본 html에 대한 301, js파일 로딩 중 강제종료 되는 경우 등 디버깅 과정에서 속도가 아주 느리고 모두 exitcode -1을 띄우며 강제 종료되었습니다. [11/Dec/2023 15:47:07] "GET /static/debug_toolbar/js/utils.js HTTP/1.1" 200 4527Not Found: /favicon.ico[11/Dec/2023 15:47:10] "GET /favicon.ico HTTP/1.1" 404 11577[11/Dec/2023 15:47:22] "GET /index HTTP/1.1" 301 0[11/Dec/2023 15:47:23] "GET /index/ HTTP/1.1" 200 11697Process finished with exit code -1 파이참을 새로 설치도 해보고, git clone하여 완전히 새로 프로젝트를 만들어봐도 동일한 문제가 발생했습니다.그런데 django debug toolbar 관련코드를 주석처리하여 디버깅모드로 실행하거나, django debug toolbar를 사용하며 runserver로 코드를 실행하면 아무 문제없이 잘 작동을 합니다.무엇이 문제일까요…ㅠㅠ 답변을 기다리겠습니다.Django 4.2.3, python 3.12, pycharm 2023.3.3, windows11, virtualenv 사용하고 있습니다 ㅠㅠ 파이참 버전은 이전버전이었는지 모르겠는데, 같은 환경에서 잘되다가 프로젝트 루트 폴더명 변경 뒤 문제가 있습니다. 감사합니다
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
useLocalStorage() 함수 사용여부
useLocalStorage()는 사용되지 않는데 수정까지 해서 남겨둔 이유가 있는 건가요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
django에 LOGIN_URL = '/accounts/login/'의 의미?
"로그인 처리" 동영상에서 (1분 14초) LOGIN_URL = '/accounts/login/' 때문에 app 이름을 accounts으로 하신다고 하셨는데 결국 urls.py에서 새롭게 정의를 하고 있어서 결국에는 global_settings.py 안에 있는 LOGIN_URL을 안쓰고 있는게 아닌가요? template_name이 registration/login.html로 설정되어 있어서 accounts/registration/login.html로 만드는게 더 좋을까요?from django.contrib.auth.views import LoginView class LoginView(RedirectURLMixin, FormView): """ Display the login form and handle the login action. """ form_class = AuthenticationForm authentication_form = None template_name = "registration/login.html" redirect_authenticated_user = False extra_context = None
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
리듀서의 의미 재확인
reducer는 '줄이는 것' 이라는 사전적 의미가 있습니다. 그래서 리액트에서의 리듀서도 dispatch에 구체적인 행위(action)를 위임함으로서 setter를 단순화(줄임) 시킨다는 의미가 있는 것으로 알고 있습니다. 강의에서도 setter로직이 다수 혼재하여 리듀서가 필요한 것으로 설명하셨구요.말씀하신 누적된다는 의미와는 거리가 좀 있는 것 같습니다.강사님 의견은 어떠실까요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
simple-jwt Refresh Token 사용 노하우
안녕하세요. 진석님!강의에서 알려주신 drf-jwt 말고, 다른 수강생분이 문의한 글에서 보니 simple-jwt도 있다고 하셔서 doc 읽어보면서 토큰 적용해보고 있는데요. 로그인 성공하면 access / refresh 토큰 발행되고, access 토큰이 만료되면 refresh 토큰으로 access 토큰을 재발행해야 한다고 이해했습니다. (refresh 토큰 만료기한도 장고 설정값 있는 것 확인했구요!) 궁금한점은.. access 토큰을 갱신하는 방향이 크게 두 가지 일 것 같은데, 어떤식으로 가야하는 걸까요?1) useEffect 훅 안에서 setInterval로 주기적 갱신2) 강의에서 만들어주신 useAppContext 안에서 토큰 만료여부 확인 후 명시적 갱신 3) 다른방법
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
docker compose 를 통한 배포 관련 오류 문의
안녕하세요. 강사님django의 기능들이 너무 많아 전체 흐름이 기억 나지 않을 때 계속해서 보고 있습니다.항상 좋은 강의 감사드립니다.drf로 만든 부분을 이번에는 pytest로 테스트 코드를 작성해보려고 하는데요.docker-compose-test.yml로 작성한 test용 mysql container를 띄웠습니다.하지만 테스트 코드를 실행하면 접근할 수 없다는 에러가 발생됩니다."Access denied for user 'project'@'localhost' (using password: YES)")구글링을 해봤고, 그래서 다음 순서로 확인을 해봤습니다.host namedb namepasswordportprint 로 출력했지만 동일한 내용으로 확인되었습니다. .env 내용.env 를 사용하여 compose에게 환경 정보를 읽어오도록 설정했습니다. DJANGO_SECRET_KEY=... # COMMON DB_ENGINE='django.db.backends.mysql' # DEVELOP DB DEV_DB_HOST='db.mysql' DEV_DB_USER='project' DEV_DB_PASSWORD='a1s2d3f4' DEV_DB_NAME='account_book' DEV_DB_PORT='3306' # TEST DB TEST_DB_HOST='test.mysql' TEST_DB_USER='test' TEST_DB_PASSWORD='a1s2d3f4' TEST_DB_NAME='test' TEST_DB_PORT='3310'docker-compose-test.yml 내용과 실행 명령어실행 명령어: docker-compose -f docker-compose-test.yml up위 명령어를 실행한 후 docker container ls 로 확인하면 다음 상태가 뜹니다.docker-compose-test.yml 내용은 다음과 같습니다. version: "3" services: test.mysql: container_name: test.mysql image: mysql:8.0.32 command: --authentication_policy=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: ${TEST_DB_PASSWORD} MYSQL_USER: ${TEST_DB_USER} MYSQL_PASSWORD: ${TEST_DB_PASSWORD} MYSQL_DATABASE: ${TEST_DB_NAME} TZ: Asia/Seoul volumes: - test_mysql_db:/var/lib/mysql ports: - ${TEST_DB_PORT}:3306 expose: - ${TEST_DB_PORT} volumes: test_mysql_db: django의 설정 부분은 backend/config/settings 밑에 base.py , develop.py, test.py 로 나눴습니다.위 docker compose는 아래 test.py 에 있는 db 정보와 일치하도록 했습니다.from config.settings.base import * INSTALLED_APPS += [ "debug_toolbar", ] MIDDLEWARE = [ "debug_toolbar.middleware.DebugToolbarMiddleware", ] + MIDDLEWARE # Database # https://docs.djangoproject.com/en/4.2/ref/settings/#databases DATABASES = { "default": { "ENGINE": env.str("DB_ENGINE"), # "HOST": env.str("TEST_DB_HOST"), "HOST": "localhost", "USER": env.str("TEST_DB_USER"), "PASSWORD": env.str("TEST_DB_PASSWORD"), "NAME": env.str("TEST_DB_NAME"), "PORT": env.int("TEST_DB_PORT"), "TEST": {"NAME" : "test"} }, } print(DATABASES) # 아래 내용이 출력됩니다. """ {'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'USER': 'test', 'PASSWORD': 'a1s2d3f4', 'NAME': 'test', 'PORT': 3310, 'TEST' : {'NAME' : 'test'}, } } """host를 env.str("TEST_DB_HOST")로 하면 test.mysql 을 찾을 수 없다고 뜹니다. 하지만 localhost로 하면 "Access denied for user 'test'@'localhost' (using password: YES)") 에러가 발생됩니다.mysql만 docker compose 로 띄우고, pytest로 코드를 실행했습니다. db 접속은 @pytest.mark.django_db 데코레이터를 사용했습니다. pytest.ini 설정[pytest] DJANGO_SETTINGS_MODULE = backend.config.settings.test django_debug_mode = true addopts = --create-db --no-migrations python_files = "test_*.py" markers = signup--no-migrations 옵션을 제거해도 동일한 에러가 발생됩니다. 디렉토리 구조 . ├── Dockerfile ├── Dockerfile.dev ├── README.md ├── backend │ ├── __init__.py │ ├── common │ │ ├── conftest.py │ │ └── models.py │ ├── config │ │ ├── __init__.py │ │ ├── asgi.py │ │ ├── settings │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── develop.py │ │ │ ├── production.py │ │ │ └── test.py │ │ ├── urls.py │ │ └── wsgi.py │ ├── manage.py │ ├── static │ ├── templates │ └── users │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── models.py │ ├── serializers.py │ ├── test │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── test_api.py │ │ └── utils.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── docker-compose-dev.yml ├── docker-compose-test.yml ├── docker-compose.yml ├── poetry.lock ├── pyproject.toml └── pytest.ini 지난 번 mysql docker 관련하여 질문드렸을 때 port 부분을 알려주셔서 port 부분 정보는 일치하도록 했으나, 제 눈에는 정보가 다른 걸 찾기 어려워 혼자 해보다가 결국 올립니다 ㅠㅠ 읽어주셔서 감사합니다 ㅠㅠ
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
파이썬 속도 장고 관련 궁금한게 있습니다.
파이썬이 지금 마이크로소프트에서 속도 5배정도 올리는 프로젝트 하고 있는데.(https://www.youtube.com/watch?v=hgmz0NJugEc&t=120s)파이썬 속도가 올라가면 장고도 당연히 속도가 올라가는 거겠죠? 2. 파이썬이나 장고가 SI 혹은 스타트업에서 쓰이는 비중이 늘어나고 있나요? AWS Lambda에서는 파이썬 꾀나 쓰는걸로 보이더라구요. (저도 직전 플젝이 lambda파이썬 썼네요)리뉴얼 기대됩니다........ㅎㅎ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
is_like_user
안녕하세요 선생님 !좋아요 기능을 구현하던 중에, is_like_user 메서드를 왜 model 에서 정의하는지 궁금해서 질문 드립니다.is_follow 와 같이 view 에서 정의한 후에 바로 템플릿에서 {%if is_like_user %} 로 넣으면 안되는 걸까요? 그리고 view 가 아니라 model 에서 정의하고 {%if is_like_user %} 이렇게 넣으면 안되는 걸까요..? ㅜㅜ 감사합니다 !!
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
related_name 오류
안녕하세요 강사님,, 또 오류가 나서 질문 드립니다 ㅜㅜclass User(AbstractUser): class GenderChoices(models.TextChoices): MALE = "M", "남성" #전자는 DB에 저장되는 값, 후자는 실제 보여지는 값 FEMALE = "F", "여성" follower_set = models.ManyToManyField( "self", blank=True, symmetrical=False, related_name="following_set", ) following_set = models.ManyToManyField( "self", blank=True, symmetrical=False, related_name="follower_set", )이렇게 단방향으로 맞춰주었는데,저장을 하면 django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues: ERRORS: accounts.User.follower_set: (fields.E302) Reverse accessor for 'accounts.User.follower_set' clashes with field name 'accounts.User.following_set'. HINT: Rename field 'accounts.User.following_set', or add/change a related_name argument to the definition for field 'accounts.User.follower_set'. accounts.User.follower_set: (fields.E303) Reverse query name for 'accounts.User.follower_set' clashes with field name 'accounts.User.following_set'. HINT: Rename field 'accounts.User.following_set', or add/change a related_name argument to the definition for field 'accounts.User.follower_set'. accounts.User.following_set: (fields.E302) Reverse accessor for 'accounts.User.following_set' clashes with field name 'accounts.User.follower_set'. HINT: Rename field 'accounts.User.follower_set', or add/change a related_name argument to the definition for field 'accounts.User.following_set'. accounts.User.following_set: (fields.E303) Reverse query name for 'accounts.User.following_set' clashes with field name 'accounts.User.follower_set'. HINT: Rename field 'accounts.User.follower_set', or add/change a related_name argument to the definition for field 'accounts.User.following_set'.계속 이렇게 오류가 뜹니다 ㅜㅜ 왜이럴까요..허허 ㅜㅜ