수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
makemigrations 실행 시 TypeError: 'module' object is not iterable 오
안녕하세요. 강사님.instagram 앱 생성 과 모델 생성 후 Migration 실행이 잘 안되네요.요런 에러를 만나고 있는데요. 실행 환경 문제 같기도 한데, 해결 방법을 잘 모르겠네요. 좀 힌트가 없을까요? ㅜㅜ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
PostCreateView 클래스의 get_success_url
강사님 PostCreateView 클래스에 get_success_url 함수로 경로 따로 설정해주지 않아도 디테일뷰로 넘어가는건 왜일까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
null? blank? 차이
- 여러분의 질문을 고대하고 있습니다. :-)- 질문 전에 검색을 먼저 해보세요. 사람 사는 게 다 비슷하다는 것을 알게 됩니다.- 예의는 거침없이 질문하기 위한 최고의 발명품입니다.- 100개의 설명이 스크린샷 한방 보다 못할 수 있습니다.- 코드를 첨부하면 전세계 누구나 이해할 수 있는 질문이 됩니다.- 하나의 질문에는 하나의 주제를 담아야 답변도 예리해집니다.- 시행착오를 알려주시면 곧 바로 원하는 문제에 집중할 수 있습니다.- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 혹시 model 생성시 null=True와 blank=True의 차이점은 뭔가요? 둘다 값을 부여하지않아도 된다라는 식으로 이해하고 있어서요
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
장고로 웹뷰앱 가능할까요?
안녕하세요 강사님,대전에서 강의를 열심히 듣고 있는 수강생입니다 :)모바일 서비스로 창업을 준비하고 있는데... 과연 장고로 커버가 될까 여쭈어봅니다. 우선은 허접한 웹사이트는 만들어두었습니다. (jasol.co.kr)궁극적으로는 유저들에게 푸시 알림을 보내고 싶기 때문에 웹이 아니라 '앱' 환경으로 나아가야겠지요. [질문1]C, Java언어가 친숙한 저에겐 react문법은 너무나 해괴해서 빠르게 시작을 못 하겠더라고요;javascript와 django로만 구현을 했고, 최종적으로는 flutter를 이용해서 웹뷰로만 구현을 하려고 합니다. 근데 제가 해보질 않아서, 이게 될 지 궁금하더라고요. flutter로 겉 껍데기만 만들고, 결국 웹브라우징을 하되, 앱 푸시 기능은 있게 만드는 거죠(장고의 REST framework를 사용하면 구현은 가능할 거 같은데, 맞죠? 제가 거기까진 못 가봐서 ㅠㅜ) 제가 자주 이용하는 yes24 서점앱도 보면 순수 자바스크립트에다가 웹뷰로 싸놓은 것 같았어요. 하지만 푸쉬 알림도 잘 오고요. 이렇게 구현하는 경우도 흔한가요? 토스앱도 대부분 웹뷰로 알고 있는데, 제가 생각하는 서비스는 성능이 중요하지 않은 서비스라서...(예전엔 PWA를 써서 웹을 앱으로 만들었던 거 같은데 요즘은 또 그렇게 하지 않은 것 같더라고요.)요약하자면, django로 웹사이트 구현하고, flutter나 RN으로 웹뷰 구현, 충분히 가능한 얘긴지? [질문2] 웹앱을 꼭 써야하는 지...요즘은 리액트가 대세라는 걸 정말 잘 알고 있습니다. 웹앱이 주는 편리함이 뭘까 생각해봤을 때, 화면전환할때 '깜빡'하는 게 없고 로딩을 초반에 다 해놓는다는것 말고는 크게 와닿는게 없더라고요. 거꾸로 제가 리액트를 새롭게 배워서 구현하기엔 시간이 지연되는 것 같아 괴롭습니다. 웹앱을 꼭 써야만 하는걸까요? yes24 앱도 화면전환할 때 깜빡~ 하고 페이지 로딩하던데 저는 크게 불편함을 못 느끼거든요. [질문3] 혹시 ask컴퍼니에...가끔 서대전역에 갈 일이 있는데, 강사님께 얼굴 비추러 가도 되나요? 바쁘신분 붙잡고 시간 뺏고 싶지는 않고 가끔 조언같은거 구할 때 10분만이라도 얘기하면 길이 생길 거 같은데 ㅠㅜ... 네이버지도에 있는 ask컴퍼니 전화번호에 미리 전화드리고 방문드려도 괜찮을까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
azure 에서 컨테이너 이미지의 버전을 바꾸다 보면 application error 발생
web app에 컨테이너 이미지를 올리고예를들어, askcompany/project:0.1 이미지에 대해서는 잘 작동하였고코드에 수정할 부분이 있어서askcompany/project:0.2로 새롭게 빌드를 하였고azure web app 의 배포센터에서 컨테이너 이미지를askcompany/project:0.2로 수정하고 다시 시작 후 도메인 주소로 들어가면 application error화면이 나타나며 서버가 돌아가지 않습니다.그래서 새롭게 web app을 만들면서 컨테이너 이미지를 바꿔주었는데... 잘 작동하면 왜 그런걸까요?? 사진을 추가하였습니다!
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
azure web app에서 배포가 계속 안됩니다...
azure web app을 통해 배포를 하던중 계속해서 오류가 발생하였습니다.처음에는/usr/local/bin/gunicorn: exec format error에러가 발생하여 제가 m1 맥북을 사용하다보면, 맥북에서 빌드한 이미지가, 서로 다른 CPU 아키텍처로 인해 서버 에러가 발생할 수 있다는 것을 알게되어 buildx을 이용하여위와 같이 설정을 하였으나 여전히 에러가 발생합니다.local에서는 아무런 문제없이 작동하나 azure에서만 문제가 발생하여 데이터베이스연결과 storage연결까지는 아무런 문제가 없었습니다.로컬에서 실행할 때는 아래와 같이 실행하였습니다.docker run --rm --publish 9999:80 \ -e DJANGO_SETTINGS_MODULE=backend.settings.prod \ -e AZURE_ACCOUNT_NAME=capstonboom \ -e AZURE_ACCOUNT_KEY="필요하시면 따로 알려드리겠습니다..." \ -e ALLOWED_HOSTS=localhost \ -e DB_HOST=capstonproject.postgres.database.azure.com \ -e DB_USER=gunhong@capstonproject \ -e DB_PASSWORD="비밀번호" \ -e DB_NAME=postgres \ keonhong/capstonproject:0.1도커파일은 아래와 같이 설정했습니다.FROM ubuntu:20.04 RUN apt-get update && apt-get install -y python3-pip && apt-get clean WORKDIR /djangoproject ADD . /djangoproject RUN pip3 install -r requirements.txt RUN which gunicorn || echo gunicorn not found EXPOSE 8000 CMD ["gunicorn", "backend.wsgi:application", "--bind", "0.0.0.0:80"]우분투 버전과 guncorn버전이 호완이 안될까 생각해서gunicorn==20.0.4 을 이용하였습니다.위와 같이 한 후 도커 허브의 레지스토리와 azure app web을 모두 삭제하고 새롭게 시작했더니/usr/local/bin/gunicorn: exec format error이 에러는 발생하지 않으나 여전히Logging is not enabled for this container.에러메세지는 출력됩니다... gunicorn 문제로 인해Logging is not enabled for this container. 도 함께 출력되었는지 생각했으나 또 다른 문제였나 봅니다...
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
트랜스파일링
2강 14분쯤const add = (x=10, y=20) => x + y + 10console.log(add(1))이 코드는 x = 1, y = 20 해서 31이 출력되야 하는거 아닌가요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
two form on a page 관련 질문
안녕하세요!한 페이지당 2개의 form을 사용해서 페이지를 만들려고 합니다.2개의 form을 만든 사례가 구글링을 해도 많이 보이지 않아서 직접 View class를 상속받아서만 만들어봤습니다.그래서 view를 다음과 같이 만들었지만 에러가 발생되어 구글링을 하거나 print문으로 찍어봐도 어디서 해결할지를 몰라서 여쭤봅니다.Traceback (most recent call last): File "/Users/jehakim/.pyenv/versions/assignment/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) File "/Users/jehakim/.pyenv/versions/assignment/lib/python3.10/site-packages/django/utils/deprecation.py", line 136, in call response = self.process_response(request, response) File "/Users/jehakim/.pyenv/versions/assignment/lib/python3.10/site-packages/django/middleware/clickjacking.py", line 34, in process_response response.headers["X-Frame-Options"] = self.get_xframe_options_value(AttributeError: 'dict' object has no attribute 'headers'위 에러는 django middleware 단에서 발생했습니다. views.py한 화면에 버튼이 2개가 있고, 이 버튼에 따라 전송되는 form이 다른 상황입니다. 이런 상황일 때 버튼을 구분하는 방법을 구글링해보니 button tag에 name 속성으로 구분하면 된다고 하여"refusal-btn" 과 "approval-btn" 으로 구분했습니다.FBV로 먼저 만든 후 코드가 너무 지저분해 보여서 CBV로 바꿨습니다.views.py from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.views.generic import FormView, ListView, View from django.views.generic.base import ContextMixin from django.contrib.auth import login, logout from django.urls import reverse_lazy from django.utils import timezone from django.db.models import Q from config.settings.base import COUNTS_PER_PAGE from accounts.utils import ( authorization_filter_on_employee_list, authorization_filter_on_signup_list, ) from accounts.forms import ( ResignationForm, EmployeeForm, SignUpForm, LoginForm, UserForm, ) from accounts.models import User, Employee @method_decorator(login_required(login_url=reverse_lazy("login")), name="get") class SignupUserDetailView(View, ContextMixin): user_object = None user_form = None employee_form = None context = dict() def post(self, request, **kwargs): self.user_form = UserForm(request.POST, instance=self.user_object) if self.user_form.is_valid(): state = self.user_form.cleaned_data.get("state") self.user_object.state = state if "refusal-btn" in request.POST: reason_for_refusal = self.user_form.cleaned_data.get( "reason_for_refusal" ) rejected_at = timezone.now() self.user_object.reason_for_refusal = reason_for_refusal self.user_object.rejected_at = rejected_at self.user_object.save() else: # approval-btn 일 때 self.employee_form = EmployeeForm(request.POST) if self.employee_form.is_valid(): cleaned_data = self.employee_form.cleaned_data grade = self.employee_form.data.get("grade") authorizations = { "authorization_grade": grade, "signup_approval_authorization": cleaned_data.get( "signup_approval_authorization" ), "list_read_authorization": cleaned_data.get( "list_read_authorization" ), "update_authorization": cleaned_data.get( "update_authorization" ), "resign_authorization": cleaned_data.get( "resign_authorization" ), } employee = Employee.objects.create( user_id=self.user_object.id, **authorizations ) employee.save() self.user_object.save() return render(request, "detail.html", self.get_context_data()) return render(request, "detail.html", self.get_context_data()) def get(self, request, user_id): self.user_object = get_object_or_404(User, pk=user_id) self.user_form = UserForm(instance=self.user_object) self.employee_form = EmployeeForm() return render(request, "detail.html", self.get_context_data()) def get_context_data(self, **kwargs): self.context["user_form"] = self.user_form self.context["employee_form"] = self.employee_form self.context["signup_list"] = True return self.context제일 하단에 있는 signup_list 는 하나의 템플릿 .html을 사용하는데 두 개의 view에서 이를 공유하기 때문에 이를 구분하고자 만든 flag 변수입니다.제가 알기로는 render 함수는 HttpResponse를 반환하는데 그러면 header가 당연히 있지 않나? 라는 생각이라서 부딪혔습니다.제 생각에는 기존에 다른 View 종류들을 상속받으면 해결해주는 거를 순수히 View만 상속받아서 어느 부분을 놓친 것 같은데, 이러면 어느 클래스를 상속받으면 될지, 아니면 직접 뭔가를 해야할지 모르겠습니다.읽어주셔서 감사합니다.advice 해주시면 감사하겠습니다 ㅠㅠ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
url 할당 질문
안녕하세요 강사님 강의 잘 보고있습니다.강사님의 강의를 보고 따로 프로젝트를 만들어 보고 있는데 로컬주소/dashboard를 하면 dashboard가 안열러서 뭐가 잘못됐는지 궁금해서 질문드립니다!일단 프로젝트 구조입니다. urls.py 입니다 dashboard/urls/dashboard.py 입니다 dashboard/views/dashboard.py 입니다. 실행을 하면 url이 없다고 합니다
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
token을 Cookie에 저장하는 것에 관한 에러 질문
안녕하세요! 강사님의 강의를 듣고 질문 타이틀에 적힌 대로 시도하는 과정에 어려움이 생겨 질문 드립니다.제가 시도한 인증/인가 흐름은 다음과 같이 진행됩니다.클라이언트가 로그인 요청 (성공)서버에서는 이에 대해 access token과 refresh token을 생성하고, access token은 response body에, refresh token은 cookie에 담아 응답을 보냅니다. (성공)클라이언트의 요청에 대해 응답이 성공적으로 들어오면 / 화면으로 redirect되고, response body에 담긴 access token은 변수에 저장되고 (성공), refresh token은 brower cookie에 저장됩니다. (실패)2번까지는 성공했지만 3번에서 cookie에 저장하는 것에 실패했습니다. 코드는 다음과 같습니다.클라이언트단 코드 const onFinish = (values) => { setFieldErrors({}); async function fn() { try { const { data: token } = await Axios.post("http://localhost:8000/accounts/auth", values, { credentials: "include" } ); axios.defaults.headers.common["Authorization"] = `Bearer ${token.access}` navigation("/"); ... 서버단 코드 (accounts/auth)아래 코드를 작성하는데 참고한 django 공식문서는 [여기](https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.HttpResponse.set_cookie) 입니다.Access-Control-Allow-Credentials의 경우, django-cors-header가 있어도 발생하여 해당 헤더를 추가하니 해결되었습니다. 또한 클라이언트단에도 credentials를 추가했습니다.from rest_framework_simplejwt.views import TokenObtainPairView class AuthView(TokenObtainPairView): def post(self, request, *args, **kwargs)): ... response = Response( {"access": serializer.validated_data.get("access", None)}, status=status.HTTP_200_OK, ) refresh_token = serializer.validated_data.get("refresh", None) response.set_cookie( "refresh", refresh_token, httponly=True, samesite=None, max_age=24 * 60 * 60, secure=False, domain="localhost", ) response.headers["Access-Control-Allow-Credentials"] = True return response 위 코드의 응답 결과는 다음 이미지와 같습니다.response headers에 담긴 전체 정보이고, Set-Cookie에 관한 내용은 다음과 같이 나왔습니다.Set-Cookie:refresh=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY4ODcxMzE5OSwiaWF0IjoxNjg4NjI2Nzk5LCJqdGkiOiIwZTNkNGYwN2RiZTI0NGUyYWMyMmVlODIzYjAzMzZkMCIsInVzZXJfaWQiOjd9.xAsVsvuoUcukBZ0t2iVo-yIlplDy2JlwE_R4cX1YwmU; Domain=localhost; expires=Fri, 07 Jul 2023 06:59:59 GMT; HttpOnly; Max-Age=86400; Path=/ 그래서 시도한 것들은 다음과 같습니다.httponly, samesite, secure 각 값들에 대해서 하나씩 값을 바꿔가면서 시도했습니다.domain keyword 인자를 없애기도 했습니다. chrome의 캐쉬 설정이 문제인가 하여 third-party cache 허용으로도 바꿨습니다.middleware가 문제인가 하여 django-cors-header와 debug toolbar를 꺼서 시도해봤습니다.application/Cookies 뭔가 남아있으면 삭제하고 다시 로그인으르 시도했습니다.하지만 위 시도들을 했음에도 불구하고도 해결이 되지 않아 강사님에게 여쭤봅니다 ㅠㅠ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Custom User 정보 views에서 request 값
안녕하세요.커스텀 유저 모델을 만들어 잘 적용하였습니다.템플릿 쪽에서는 로그인된 유저의 {{ user }} 형태로 접근하여 커스텀으로 만든 필드들의 값에 접근이 잘 됩니다.views에서 request.user 를 할 경우, 커스텀 된 필드들의 값을 사용할 수 없고 기본 유저 모델의 필드값만 나오고 있습니다. 어떤 장치를 해주어야 커스텀 된 필드 값들을 모두 사용할 수 있는지 찾아보았지만 정확히 알아내지 못하였습니다... 임시로 request.user를 통해 현재 로그인 된 사용자 정보를 가져오고 커스텀 유저 모델에서 동일한 유저를 찾아서 정보를 사용하는 형태로 해두었는데, 좋은 방향이 아닌듯하여 도움을 얻고자 질문을 남기게 되었습니다. def home(request): login_user = request.user user_site = User.objects.filter(email=login_user).get().site site_id = SiteInfo.objects.filter(site_name=user_site).get().pk boat_info = BoatInfo.objects.filter(site=site_id) return render(request, 'monitoring/home.html', { 'boat_info': boat_info, }) 번외로 템플릿에서 DB 데이터 갯수만큼만 DIV를 행렬로 만들어야 하는데, 짧은 지식으로 아래와 같이 구현해 보았습니다만, 좋은 방향으로 보이진 않아서 계속 고민 중에 있습니다. 한번 살펴봐 주시면 감사하겠습니다(꾸벅){% for boat in boat_info %} {% if forloop.counter0 != 0 and forloop.counter0|divisibleby:3 %} </div> {% endif %} {% if forloop.counter0|divisibleby:3 %} <div class="row"> {% endif %} <div class="col">{{ boat }}}</div> {% if forloop.last %} </div> {% endif %} {% endfor %}
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
admin 에 나타나지 않는 몇몇 필드들
안녕하세요, 강의를 잘 듣고 있습니다. 모델 필드에 있는 몇몇 필드들이 admin에 나타나지 않더군요예를 들면, updated_at, created_at 같은 필드들이요 이를 위해서 admin 페이지에 일일히 모델 필드를 list_display에 등록해줘야 하는게 맞나요? from django.contrib import admin# Register your models here.from .models import *admin.site.empty_value_display = "-empty-"admin.site.register(Product)admin.site.register(CartProduct)class OrderAdmin(admin.ModelAdmin):list_display = ['customer', 'transaction_id', 'total_price']admin.site.register(Category)admin.site.register(UserProfile)admin.site.register(Order)admin.site.register(OrderedProduct)admin.site.register(ShipmentInfo) 그럼 제가 직접만든 모델의 경우에는 그렇다 쳐도..allauth에 있는 site domain 부분이 나오질 않는거에요 ㅠㅠ...제가 뭘 잘못 건드렸는 지 모르겠는데, 맨처음 프로젝트할 때에는 allauth의 소셜 어플리케이션 부분에 사이트 도메인을 입력할 수 있는 커다란 박스가 있었는데, 그것만 또 안난옵니다. 제가 뭘 잘못한건지 ㅠㅠ 원래 잘 나오던건데... 이번에 파이참 커뮤니티 에디션에서 유료버전으로 바꾸고, 프로젝트를 만들고 나니 admin에 몇몇 모델의 필드들이 잘 보이지 않습니다.verbose name을 설정된것들이 특히 그런 거 같은데 무엇이 문제인지 도통 모르겠습니다. 그렇다고 allauth를 제가 admin에 등록해야하는걸까요?2.제가 모르는 무언가가 있는걸까요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Custom User Model 관련 권한 Field 추가
안녕하세요.기본 유저 모델로는 다 포용하지 못하는 부분이 있어 커스텀 유저 모델을 만드려고 하고 있습니다. 기본 유저 모델의 경우 staff, superuser 두 개의 권한이 있는 것으로 알고 있는데, manager 권한을 한 개 더 부여해야 하는 상황입니다.아래와 같이 코드를 구현하여 보았는데, 부족한 부분이나 잘못된 부분이 있는지 봐주시면 감사합니다.from django.db import models from django.contrib.auth.models import PermissionsMixin from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager from django.contrib.auth.validators import UnicodeUsernameValidator from django.core.mail import send_mail from django.utils.translation import gettext_lazy as _ from django.utils import timezone class UserManager(BaseUserManager): use_in_migrations = True def _create_user(self, username, email, password, **extra_fields): if not email: raise ValueError("Email을 입력해주세요.") email = self.normalize_email(email) username = self.model.normalize_username(username) user = self.model(username=username, email=email, **extra_fields) user.set_password(password) user.save(using=self.db) return user def create_user(self, username, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', False) extra_fields.setdefault('is_manager', False) extra_fields.setdefault('is_superuser', False) return self._create_user(username, email, password, **extra_fields) def create_staff(self, username, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_manager', False) extra_fields.setdefault('is_superuser', False) if extra_fields.get('is_staff') is not True: raise ValueError('is_staff=True일 필요가 있습니다.') return self._create_user(username, email, password, **extra_fields) def create_manager(self, username, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_manager', True) extra_fields.setdefault('is_superuser', False) if extra_fields.get('is_staff') is not True: raise ValueError('is_staff=True일 필요가 있습니다.') if extra_fields.get('is_manager') is not True: raise ValueError('is_manager=True일 필요가 있습니다.') return self._create_user(username, email, password, **extra_fields) def create_superuser(self, username, email, password, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_manager', True) extra_fields.setdefault('is_superuser', True) if extra_fields.get('is_staff') is not True: raise ValueError('is_staff=True일 필요가 있습니다.') if extra_fields.get('is_manager') is not True: raise ValueError('is_manager=True일 필요가 있습니다.') if extra_fields.get('is_superuser') is not True: raise ValueError('is_superuser=True일 필요가 있습니다.') return self._create_user(username, email, password, **extra_fields) class User(AbstractBaseUser, PermissionsMixin): username_validator = UnicodeUsernameValidator() username = models.CharField(_("username"), max_length=50, validators=[username_validator]) email = models.EmailField(_("email_address"), unique=True) is_staff = models.BooleanField(_("staff_status"), default=False) is_manager = models.BooleanField(_("manager_status"), default=False) is_active = models.BooleanField(_("active"), default=False) date_joined = models.DateTimeField(_("date_joined"), default=timezone.now) created_at = models.DateTimeField(_("create"), auto_now_add=True) updated_at = models.DateTimeField(_("update"), auto_now=True) objects = UserManager() USERNAME_FIELD = "email" EMAIL_FIELD = "email" REQUIRED_FIELDS = ['username'] class Meta: verbose_name = _("user") verbose_name_plural = _("users") def clean(self): super().clean() self.email = self.__class__.objects.normalize_email(self.email) def email_user(self, subject, message, from_email=None, **kwargs): send_mail(subject, message, from_email, [self.email], **kwargs)
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
django와 mysql container 연결하기
안녕하세요!도커 컨테이너로 mysql을 띄워놓고local terminal에서 django 서버를 실행시킬려고 합니다.하지만, 계속해서 아래와 같은 Unkown Mysql server host 'mysql' 에러 또는 Access denied 에러가 발생되어 여줘봅니다.django.db.utils.OperationalError: (2005, "Unknown MySQL server host 'mysql' (8)")코드는 다음과 같습니다.DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "instagram", "USER": "project", "PASSWORD": "a1s2d3f4", "HOST": "mysql", "PORT": "3306", } } mysql은 docker compose 가 아닌 하나만 실행해서 다음과 같이 했습니다. docker run -e MYSQL_ROOT_PASSWORD=a1s2d3f4 -e MYSQL_USER=project -e MYSQL_PASSWORD=a1s2d3f4 -e MYSQL_DATABASE=instagram -d -p 3310:3306 --name mysql mysql 제가 시도한 것들은 다음과 같습니다.실행 후 컨테이너 생성을 확인했고, docker exec -it mysql bash 명령어로 접속하여 password, username, database name 다 확인되어 정상적으로 로그인 확인 되었습니다. 사용한 명령어는 mysql -u project -p 그리고 root로도 로그인 해서 확인 완료했습니다.혹시 몰라서 django databases의 host를 0.0.0.0 으로 바꿔서 실행하면 django.db.utils.OperationalError: (1045, "Access denied for user 'project'@'localhost' (using password: YES)") 와 같은 에러가 발생됩니다. 이외에도 127.0.0.1 로도 바꿔서 해봤지만 동일한 에러가 뜹니다. 동일하게 localhost를 나타내는 IP 주소라서 그런 것 같습니다.그래서 docker inspect <container name> 을 사용해서 확인되는 IP 주소로 바꿔도 연결이 되지 않습니다.django server 실행 명령어는 다음과 같습니다.python manage.py runserver --settings=config.settings.production 0.0.0.0:8000 settings는 settings directory 안에 base.py, developement.py, deployment.py 로 3개를 나눠서 하고 있습니다. docker compose로 django app도 container로 띄우면 잘 작동됩니다. 도커 안에서라 그런지 잘 되는 것 같은데, localhost와 container로 하면 연결이 안됩니다.이번 강의를 들으면서 IP와 PORT 가 문제인 것 같은데 어떻게 시도를 하면 될지 잘 모르겠습니다.도와주시면 감사하겠습니다
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
django-debug-toolbar를 통한 SQL 디버깅 강의 오류
공식문서를 보고 다 맞게 작성해서 실행하며 No module named 'django_toolbar' 오류가 발생합니댜ㅏ
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
이 강의는 정말 파이썬 기초 지식만 있으면 되는 건가요?
강사님 이 강의를 듣기 위해 필요한 선수지식은 파이썬 기본 문법이라고 명시가 되어 있지만,강의를 들으면 들을수록 이 강의는 파이썬 고급문법에 자바스크립트 기초 지식 뿐만 아니라 경험까지 필요한 거 같습니다.본 섹션의 강의만 하더라도 this에 대해 아무런 기초 설명없이 이미 아는 사람한테 설명하듯이 하시는데 무슨 말을 하는지 도무지 알 수가 없었습니다.이 뿐만이 아니라 다른 강의 내용들도 진정 자바스크립트를 모르는 사람이 들을 수 있는 강의라고 생각하시는지요?node.js가 무언지, 리액트가 어떤 건지에 대해서도 초급자가 이해할 수 있는 수준으로 설명하고 있지 않습니다.참고로 저는 자바스크립트를 아주 모르진 않습니다. 그런데도 이해가 안되는 부분이 많은데 처음 접하는 사람들은 황당할 수도 있겠단 생각이 듭니다.사실 자바스크립트에 대한 강의 뿐만이 아닙니다. 앞선 대다수의 강의에서 기초적인 부분에 대해 모두 안다는 식으로 대충 설명하고 넘어가는 경우가 상당합니다. 시간만 낼 수 있다면 90% 이상의 강의에서 이러한 내용들을 짚어 드릴 수 있습니다그때마다 따로 찾아볼 수 밖에 없었고 강의 하나를 다 이해하는데 많게는 일주일이 걸린 적도 있습니다. 질문은 성의 있게 답해 주셔서 좋지만, 질문이 최소화 될 수 있도록 강의를 만드는 것도 강사님의 몫입니다. 질문 하는 것도 수강자 입장에서는 많은 에너지가 들어갑니다. 그 자리에서 보여주면서 질문할 수 있는 오프라인 강의가 아니기 때문입니다.강사님이 이런 문제점들을 인지 못하셨다고 생각하지 않습니다. 아님 이 가격에 이 정도 퀄리티가 적당하다고 생각해서 이렇게 준비하진 않으셨겠죠?이미지가 거의 없이 텍스트로만 만들어진 강의 자료도 정말 이 강의에서 처음 봅니다. 지금이라도 이 강의를 위해 필요한 수준을 다시 명시해 주시는 게 좋을 것 같습니다. 저야 이미 결제를 하고 수업자료도 받아버려서 돌이킬 수 없지만 새로 듣는 사람들을 위해서 부탁드립니다.강사님의 불명확한 발음, 불안정하면서도 빠른 발성을 모두 견디면서도 국내에 유일한 심도 있는 강의란 말을 믿고 열심히 수강해 왔지만 지금까지 오는 것도 상당히 힘든 시간이었습니다.앞으로 남은 강의에 대해 기대감은 전혀 없고 독학으로 헤쳐나가야 된다는 부담감만 더합니다.강의 소개에 분명 위와 같이 안내가 되어있습니다. 파이썬 기본 문법에 대한 이해가 되어 있는 수강생이 무리 없이 강의를 소화할 수 있도록 하는 건 선택사항이 아니라 의무입니다.독학 대신 돈을 내고 유료강의를 듣는 건 시간 대비 효율성을 위한 결정입니다. 그런데 강의 내용에서 건너뛴 내용에 대해 독학으로 공부해야 한다면 무슨 의미가 있을까요?다시 한번 말씀 드리지만 선수 지식에 대한 내용 수정 꼭 부탁드립니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
SendGird가입
안녕하세요 api 인증키를 발급받기 위해 sendgrid를 가입하려고 하는데 가입이 되지 않아서 질문남깁니다!!
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
구동엔 문제 없으나 파일 참조 시 메세지가 발생합니다.
안녕하세요.강의를 따라하고 있는 중 파일 참조 부분에서"Unresolved template reference" 메세지가 발생합니다. 밑줄이 생긴 것과는 상관없이 작동에는 아무런 영향이 없기는 합니다. 하지만 깔끔하게 만들어 두고자 하는 마음에 검색을 해보았지만 뚜렷한 해결책을 찾지는 못하였습니다. 감사합니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
중첩된 serializer(DB table은 하나)
class TbVaResult(models.Model): report_id = models.ForeignKey(TbVaReport, on_delete=models.PROTECT, db_column="report_id") result_type = models.CharField(max_length=10) asset_cd = models.CharField(max_length=20) measure_cd = models.CharField(max_length=10) result_cd = models.CharField(max_length=10, blank=True, null=True) result_desc = models.CharField(max_length=4000, blank=True, null=True) class Meta: db_table = 'tb_va_result' unique_together = (('report_id', 'result_type', 'asset_cd', 'measure_cd'),) 위와 같은 model이 있고, { "report_id": "IS_LX_2023_0010", "result_type": "C", "asset_cd": "LX001", "result": [ { "measure_code": "LX1-01-R", "result": "Y", "result_code": "LX1-01-SA", "result_desc": "root" }, { "measure_code": "LX1-03-R", "result": "SELF", "result_code": "LX1-03-SA", "result_desc": "인터뷰" } ] }이런 데이터를 보내려고 합니다.serializer를 통해 아래와 같은 데이터를 만들어 테이블(TbVaResult)에 쓰려고 합니다.{ "report_id": "IS_LX_2023_0012", "result_type": "C", "asset_cd": "LX001", "measure_cd": "LX1-01-R", "result_cd": "Y", "result_desc": "root" }, { "report_id": "IS_LX_2023_0012", "result_type": "C", "asset_cd": "LX001", "measure_cd": "LX1-03-R", "result_cd": "SELF", "result_desc": "인터뷰" }views.pyclass ResultCreateViewSet(viewsets.ModelViewSet): queryset = TbVaResult.objects.all() serializer_class = ResultCreateSerializer authentication_classes = [JWTAuthentication] permission_classes = [IsAuthenticated] serializers.pyclass ResultSerializer(serializers.Serializer): measure_cd = serializers.CharField() result_cd = serializers.CharField() result_desc = serializers.CharField() class ResultCreateSerializer(serializers.Serializer): result = ResultSerializer(many=True) report_id = serializers.CharField() result_type = serializers.CharField() asset_cd = serializers.CharField() def create(self, validated_data): print('===============================================') print('validated_data:', validated_data) result_data = validated_data.pop('result') print('result_data:', result_data) report_id = validated_data.pop('report_id') result_type = validated_data.pop('result_type') asset_cd = validated_data.pop('asset_cd') tb_va_report = TbVaReport.objects.get(report_id=report_id) for result_item in result_data: measure_cd = result_item.pop('measure_cd') result_cd = result_item.pop('result_cd') result_desc = result_item.pop('result_desc') tb_va_result = TbVaResult.objects.create( report_id=tb_va_report, result_type=result_type, asset_cd=asset_cd, measure_cd=measure_cd, result_cd=result_cd, result_desc=result_desc ) return tb_va_result"Got AttributeError when attempting to get a value for field result on serializer ResultCreateSerializer." 이런 에러가 발생하네요.DB에 쓸때 result 가 안들어가는데 어디서 발생되는 에러인지 모르겠습니다.도움을 부탁드립니다. ㅠㅠ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
as_view()에서 인자로 http method의 사용 가능 여부
안녕하세요.강의 내용 중에 다음과 같은 코드를 보여 주셨는데요.post_list = PostViewSet.as_view({ 'get': 'list' })그런데 장고의 소스 코드를 보면,class View: """ Intentionally simple parent class for all views. Only implements dispatch-by-method and simple sanity checking. """ http_method_names = [ "get", "post", "put", "patch", "delete", "head", "options", "trace", ] # 중간 코드 생략 @classonlymethod def as_view(cls, **initkwargs): """Main entry point for a request-response process.""" for key in initkwargs: if key in cls.http_method_names: raise TypeError( "The method name %s is not accepted as a keyword argument " "to %s()." % (key, cls.__name__) ) as_view()에 전달한 키워드 인자에 http_method_names 의 항목에 해당하는 키가 있으면 TypeError 를 발생시키는 것으로 되어 있는 것 같습니다.그런데 as_view()에 강의 내용과 같이 get 을 키워드 인자로 사용해도 되는지 궁금합니다.