묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
강의 자료 문의
안녕하세요! 우선 좋은 강의를 제공해주셔서 정말 감사합니다!하지만 불편한 점이 있습니다.강의 자료를 일일이 다운받으니 번거롭고 파일 병합하기도 힘드네요..타 강의와 비교하는 것은 죄송하지만, 다른 강의들은 모두 zip파일로 강의자료를 병합하여 업로드해주십니다.본 강의도 강의자료를 병합하여 한번에 올려주시면 감사하겠습니다!
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
선생님 학습 방법 질문이 있습니다.
파이썬 기초 문법 학습 후 현재 강의를 듣는 중인데 2번 세션 맛보기 반복 숙달 어느정도까지 해야 다음 챕터로 넘어가는 것이 맞나요? 강의 이름은 맛보기인데 중요한 것 들 같아서 반복 숙달을 어느정도 까지 하는게 좋을 지 궁금합니다.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
bulk_update에서 updated_at 필드
안녕하세요! 해당 수업에서 django shell에서 update 부분 실습하다가 결과 값에 의문이 생겨 질문드립니다.이 부분에서 auto_now=True 필드도 같이 bulk_update 함수의 인자인 fields에 지정해야만 해당 필드도 같이 업데이트 된다고 하셨는데 제 코드에서는 updated_at 필드의 값이 업데이트 되지 않았습니다.제가 나름대로 이해한 바로는 bulk_update는 따로 save를 호출하지 않기 때문에 updated_at을 fields 인자에 추가해주더라도 변한 값이 없어서 업데이트가 되지 않는 걸까요? 그렇다면 제대로 updated_at도 업데이트 되게끔 하기 위해서는 따로 post.updated_at = timezone.now()를 title 수정할 때 해주어야 하는 걸까요?
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
정규표현식
안녕하세요! 강의 들으며 많은 부분 배우고 있습니다.DateCoverter 정규표현식 부분을 보면서 드는 의문이 있어 질문드립니다. 제가 이해한 바가 맞다면, 정규표현식에서 {1,2}부분은 앞부분의 패턴을 1번 또는 2번 반복한다고 이해했습니다.그렇다면 r"20\d{2}/([1-9]|0[1-9]|1[0-2]){1,2}/([1-9]|0[1-9]|[12][0-9]|3[01]){1,2}"라는 정규표현식에서 월과 일의 숫자를 체크하는 부분이 1번 또는 2번 반복될 수도 있으니 "2023/0303/1212"와 같은 문자열도 통과 가능한 것일까요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
선생님 질문 있습니다.
1) request.META["HTTP_USER_AGENT"] 실습 5번 내내 NameError로 표기 되지 않습니다. 구글링해도 정확히 어떤 이유인지 잘모르겠습니다.2) 아래 pwsh 느낌표가 왜 나오는지 궁금합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
공유자님 이 강의 공부 방법에 대한 질문입니다.
이 강의는 어떤 식으로 접근해야 되나요?이런 것이 있구나~ 라고 생각하고 넘어가야 하나요? 아니면 하나하나 다 알아가면서 넘어가는 것이 좋나요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
mydjango.py 질문 있습니다.
vscode (windows)사용기존) mydjango02 폴더--> django 설치 --> startproject --> manage.py 생성 질문 1)mydjango 03 폴더 --> django 설치 --> django runserver가 돌아가지 않습니다.질문 2)이전에 따라하기에선 django runserver가 돌아갔었는데 디버그시 mydjango.py가 나타나지 않았습니다. 그래서 실습을 기존에 설치된 manage.py로 했는데 제가 어느 부분에서 실수 할 가능성이 있을까요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
Django-Components의 0.128 세팅
최신 버전에선 강의의 설정을 적용할 수 없습니다. 아래의 것을 참고하세요. (강사님 이렇게 해도 되긋죠? 구조 제대로 이해 못한채 chatgpt에게 물으면서 했네요 ㅎㅎ; 강의 유지보수 하시기 힘드시겠어요. )django_components 0.128 설정1. 폴더명 및 트리구조 변경.myproj/├── core/│ ├── init.py│ ├── apps.py│ ├── src_django_components/ * 폴더명 변경. 하이픈 인식 못함.│ │ ├── init.py│ │ ├── modal_form.py * 상위로 이동│ │ ├── modal_form/│ │ │ ├── modal_form.html│ │ │ ├── modal_form.css│ │ │ ├── modal_form.js├── mysite/│ ├── settings.py│ ├── urls.py├── manage.py 2. settings.py INSTALLED_APPS = [ ..., 'django_components',]MIDDLEWARE = [ ..., "django_components.middleware.ComponentDependencyMiddleware", ]STATICFILES_FINDERS = [ "django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder", "django_components.finders.ComponentsFileSystemFinder", ]TEMPLATES = [ ..., "DIRS": [BASE_DIR / "core" / "src_django_components"], ], "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], "builtins": [ "django_components.templatetags.component_tags", # 추가된 부분 ], ...,STATICFILES_DIRS = [BASE_DIR / "core" /"src_django_components"]COMPONENTS = ComponentsSettings( dirs=[ Path(BASE_DIR) / "core" / "src_django_components", ]) 3. core/apps.py-modal_form 등록from django.apps import AppConfigfrom django_components import componentclass CoreConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "core" def ready(self): from .src_django_components.modal_form import ModalForm component.registry.register("modal_form", ModalForm) # 설명: ModalForm 클래스를 modal_form 이름으로 등록합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
질문 아님.
리눅스로 하느라 힘들다..공식 문서 언제 다 읽고어떻게 선별적으로 잘 읽는지 GPT 없던 시절 .. .대단하다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
mydjango.py 실습 질문있습니다.
return HttpResponse(""" <!doctype html> <html lang="ko"> <head> <meta charset="UTF-8" /> <title>Melon List</title> <style> body { width: 400px; margin: 0 auto; } table { width: 100%%; border-collapse: collapse; } table, th, td { border: 1px solid black; } </style> </head> <body> <h1>Melon List</h1> <table> <thead> <tr><th>팀명</th><th>순위</th></tr> </thead> <tbody> %s </tbody> </table> </body> </html> """ % (partial_html,))여기에서 굳이 % (partial_html)) 또 잘 실행 되는데 % (partial_html,)) 쉼표를 사용하는 이유는 정확하게 뭔지 알 수 있을까요? gpt는 튜플로 만든다고 설명 해주었는데 td안에 튜플로 넣는 이유를 알고 싶습니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
강의 듣다가 유료pycharm에 비해 vscode지원기능이 아쉬워서 확장프로그램 만들었는데 여기 공유해도 될까요?
04-10 장고 기본 CBV API (Generic display views) - ListView 강의를 듣던 중 index.html 에서 {% load django_bootstrap5 %}나 {% bootstrap_pagination %} 를 타고 들어가서 소스를 보는 기능이 전체검색 말고는 vscode에서 다른 방법이 없는 것 같아서 유료버전pycharm 처럼 흉내내서 확장프로그램을 만들어봤습니다. 저만 쓰게 될거같아서.. 필요하신 분들께 알리고 피드백을 받고 싶은 마음에 여기에 링크를 남기고 공유해도 혹시 괜찮을까요?https://github.com/southglory/python-package-definition-navigatorhttps://marketplace.visualstudio.com/items?itemName=QG-devramyun.python-package-definition-navigator감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
중단점에 대한 질문 있습니다.
실습과장에서 중단점을 클릭 했고 디버그 했는데 중단점에서 멈추지 않고 텍스트 찍어준다면 어떤 문제가 있는 것 일까요. 구글링 해도 정확한 해답을 찾지 못해 이렇게 질문을 남기게 되었습니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
todo / react 붙이는 깃주소를 받고 싶습니다.
안녕하세요.수강생입니다.이부분을 5번은 넘게 들은거 같은데 어려워요.깃주소주신것도 가서 봤는데구조도 잘 이해가 안되고todo 와 react만 연동되는 코드를 따로 깃에 주시면 안될까요?todo따로 react따로 폴더를 만들어주신거 같은데myreact01-cra 온전히 todo를 리엑트에 붙이는 깃주소를 따로 만들어주셨으면해서요.전부 한군데에 있어서 분석해보면서 하고는 있는데 저위의 3개의 카테고리중에2개만이라도 되고 싶은데다 합해서 20분수업도 안되는데 전 2분도 못쫓아가고 있어요.리엑트도 어느정도안다고 생각하고장고도 어느정도 안다고 생각하는데도어렵습니다. 흑....소스코드를 받고 싶습니다.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
NoReverseMatch at /hottrack/archives/2023/
NoReverseMatch 자체가 되돌아갈 곳이 없다는 오류인 것은 알겠으나,왜 song_archive_year를 못찾는지 모르겠습니다. Viewclass SongYearArchiveView(YearArchiveView): model=Song date_field="release_date" # make_object_list = Trueurls.pyurlpatterns = [ ... path(route="archives/<int:year>/", view=views.SongYearArchiveView.as_view(), name="song_archive_year"), ] --- 혹시나 해서 View를 다음과 같이 했는데class SongYearArchiveView(YearArchiveView): model = Song date_field = "release_date" # 조회할 날짜 필드 make_object_list = True def get_queryset(self): year = self.kwargs['year'] # URL에서 'year' 값을 가져옴 return Song.objects.filter(release_date__year=year) 인지는 하는 것 같아요. 그런데 버튼은 없군요.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
django-crispy-form에서 {% include 와 with %}
django-crispy-form에서 {% include 와 with %} 다음과 같이 에러가 나타나고, {% include "_crispy_form.html" %}with 절을 제외하니 정상 동작합니다.정확한 이유는 모르겠으나, 문법이 그 사이에 바뀐 것일 수도 있고 해서 일단 공유하는 마음으로 질문드립니다. 감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
React와 Django-템플릿, HTMX 간의 관계 및 역할에 대한 질문
안녕하세요, 먼저 자세하게 django에 대해 강의해주셔서 감사합니다.강의가 제게 다소 어렵고 양이 방대하여 핵심을 놓치는 부분이 있어 저의 필요와 목적에 의한 질문을 드리게 됐습니다. 핵심적으로 드리고 싶은 질문은 다음과 같습니다.리액트와 django의 관계(리액트 컴포넌트가 적합한 부분, 리액트 컴포넌트에서 장고 템플릿+폼, 뷰와 모델, DB까지의 흐름)리액트 없이 django 기능만 이용하여 datagrid(view), datatable 형식을 사용하는 것이 좋은 방법인지에 대한 강의자님의 의견 django의 템플릿 문법으로 작성된 기본적인 디자인 구성이 된 웹 템플릿을 구하거나 접근하는 방법 웹 개발 숙련도가 매우 미숙하고 질문이 모호해 우선 양해 말씀 구합니다. 상기 질문에 대해서 배경을 부연 설명드립니다. [1번 관련 질의 배경]리액트가 통합된 프로젝트 실습이 todolist 정도인 것 같아서 블로그나 포토로그 등의 앞선 장고 프로젝트에 이를 응용하는게 어렵다고 느껴졌습니다. 혹시 리액트와 django 관계에 대해 조금 더 자세하게 참고할 만한 강의를 짚어주시거나 소스를 알려주실 수 있으실까요? [2번 관련 질의 배경]data-grid / data-table / spreadsheet (표 형태의 데이터를 읽고 수정하는 방식) 형태를 사용하고자 여러 파이썬/장고 라이브러리를 찾아봤으나 pool이 매우 좁고 예시도 매우 부족해 보였습니다. 그러나 react, js 중심으로 프론트 사이드를 구축할 경우 선택지가 매우 다양하고 상태 관리가 안정적일 수 있다는 생각이 들었습니다. (hansongrid, ag grid, MUI datagrid, react datagrid, react spreadsheet grid ...)그리드 어플리케이션 구축은 어떻게 진행하면 좋을까요? [3번 관련 질의 배경]디자인에 소요되는 리소스 측면에서도 장고의 템플릿 문법 보다는 리액트 프레임워크에 적합한 웹사이트 디자인도 더 풍부하고 다양한 것 같습니다. CSS에 상당히 부담을 느껴서 여기에 들이는 노를 줄이고 싶은데 혹시 참고할 만한 사이트나 추천해주시는 방법이 있으실까요? ********답변에 앞서 미리 감사드립니다!********
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
세션 4까지 들었는데, 여기서 DRF로 넘어가도 될까요?
제가 API Server 구축에 더 관심이 가서... 세션 4까지 복습했는데, 바로 DRF로 넘어가도 될까요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
13-17 ModelViewSet pytest 오류
안녕하세요 어제에 이어 강의 내용을 따라 가고 있는데요. 강의 내용대로 PostModelViewSet을 선언하고 (영상기준 8분30초까지 진행) pytest를 실행앴더니test_unauthenticated_user_cannot_create_post에서 assert 403 == 400test_non_author_cannot_update_post에서 assert 403 == 200test_nonauthor_cannot_delete_post에서 assert 403 == 204 오류가 각기 발생합니다. 강의를 따라가고 있는데 이런식으로만 오류가 발생하니 원인이 어디인지 찾기가 너무 힘든거 같습니다. 원인이 뭐고 이런 오류를 잡으려면 어떻게 해야할까요?
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
13-16) UpdateAPI test 에러
강의 수강 내용에 따라test_author_can_update_post 와 test_non_author_cannot_update_post를 수행하면 하기의 에러가 발생합니다.list, retrieve, create, destroy 전부 정상 작동하는데 update만 해당 오류가 발생합니다/blog/api.py, line 75, in has_permission if request.method in SAFE_METHODS: NameError: name 'SAFE_METHODS' is not defined 수업 내용대로 따라가고 있는데 ㅠㅠ 오류가 발생한 곳이 어디인지 알 수 가 없습니다.수업 내용을 따라서 구현한 코드는 다음과 같습니다.# blog/tests/test_api.py import base64 import pytest from django.core.exceptions import ObjectDoesNotExist from django.urls import reverse from rest_framework import status from rest_framework.response import Response from rest_framework.test import APIClient from accounts.models import User from accounts.tests.factories import UserFactory from blog.models import Post from blog.tests.factories import PostFactory def create_user(raw_password: str = None) -> User: """새로운 User 레코드를 생성 및 반환""" return UserFactory(raw_password=raw_password) def get_api_client_with_basic_auth(user: User, raw_password: str) -> APIClient: """인자의 User 인스턴스와 암호 기반에서 Basic 인증을 적용한 APIClient 인스턴스 반환""" # *.http 파일에서는 자동으로 base64 인코딩을 수행해줬었습니다. base64_data: bytes = f"{user.username}:{raw_password}".encode() authorization_header: str = base64.b64encode(base64_data).decode() client = APIClient() client.credentials(HTTP_AUTHORIZATION=f"Basic {authorization_header}") return client @pytest.fixture def unauthenticated_api_client() -> APIClient: """Authorization 인증 헤더가 없는 기본 APIClient 인스턴스 반환""" return APIClient() @pytest.fixture def api_client_with_new_user_basic_auth(faker) -> APIClient: """새로운 User 레코드를 생성하고, 그 User의 인증 정보가 Authorization 헤더로 지정된 APIClient 인스턴스 반환""" raw_password: str = faker.password() user: User = create_user(raw_password) api_client: APIClient = get_api_client_with_basic_auth(user, raw_password) return api_client @pytest.fixture def new_user() -> User: """새로운 User 레코드를 생성 및 반환""" return create_user() @pytest.fixture def new_post() -> Post: """새로운 Post 레코드를 반환""" return PostFactory() @pytest.mark.it("작성자가 아닌 유저가 수정 요청하면 거부") @pytest.mark.django_db def test_non_author_cannot_update_post(new_post, api_client_with_new_user_basic_auth): url = reverse("api-v1:post_edit", args=[new_post.pk]) response: Response = api_client_with_new_user_basic_auth.patch(url, data={}) assert status.HTTP_403_FORBIDDEN == response.status_code @pytest.mark.it("작성자가 수정 요청하면 성공") @pytest.mark.django_db def test_author_can_update_post(faker): raw_password = faker.password() author = create_user(raw_password=raw_password) created_post = PostFactory(author=author) url = reverse("api-v1:post_edit", args=[created_post.pk]) api_client = get_api_client_with_basic_auth(author, raw_password) data = {"title": faker.sentence()} response: Response = api_client.patch(url, data=data) assert status.HTTP_200_OK == response.status_code assert data["title"] == response.data["title"] ## core/mixins.py from typing import List, Optional, Type from colorama import Fore from django.conf import settings from django.db.models import Model, QuerySet from rest_framework import permissions from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer from rest_framework.request import Request from rest_framework.response import Response from rest_framework.serializers import Serializer from rest_framework.utils.serializer_helpers import ReturnDict from rest_framework.views import APIView from core.permissions import make_drf_permission_class class JSONResponseWrapperMixin: def finalize_response( self, request: Request, response: Response, *args, **kwargs ) -> Response: is_ok = 200 <= response.status_code < 400 accepted_renderer = getattr(request, "accepted_renderer", None) if accepted_renderer is None or response.exception is True: response.data = { "ok": is_ok, "result": response.data, } elif isinstance( request.accepted_renderer, (JSONRenderer, BrowsableAPIRenderer) ): response.data = ReturnDict( { "ok": is_ok, "result": response.data, # ReturnList }, serializer=response.data.serializer, ) return super().finalize_response(request, response, *args, **kwargs) class PermissionDebugMixin: if settings.DEBUG: def get_label_text(self, is_permit: bool) -> str: return ( f"{Fore.GREEN}Permit{Fore.RESET}" # colorama 라이브러리 활용 if is_permit else f"{Fore.RED}Deny{Fore.RESET}" ) def check_permissions(self, request: Request) -> None: print(f"{request.method} {request.path} has_permission") for permission in self.get_permissions(): is_permit: bool = permission.has_permission(request, self) print( f"\t{permission.__class__.__name__} = {self.get_label_text(is_permit)}" ) if not is_permit: self.permission_denied( request, message=getattr(permission, "message", None), code=getattr(permission, "code", None), ) def check_object_permissions(self, request: Request, obj: Model) -> None: print(f"{request.method} {request.path} has_object_permission") for permission in self.get_permissions(): is_permit: bool = permission.has_object_permission(request, self, obj) print( f"\t{permission.__class__.__name__} = {self.get_label_text(is_permit)}" ) if not is_permit: self.permission_denied( request, message=getattr(permission, "message", None), code=getattr(permission, "code", None), ) class TestFuncPermissionMixin: TEST_FUNC_PERMISSION_CLASS_NAME = "TestFuncPermissionMixin" @classmethod def get_test_func_permission_instance(cls) -> permissions.BasePermission: permission_class = make_drf_permission_class( class_name=cls.TEST_FUNC_PERMISSION_CLASS_NAME, # *_test_func_name 속성이 지정되면, 이 권한 클래스가 사용된 APIView 클래스에서 # 지정 이름의 메서드를 찾습니다. has_permission_test_func_name="has_permission", has_object_permission_test_func_name="has_object_permission", ) return permission_class() def get_permissions(self) -> List[permissions.BasePermission]: # 기존 permission_classes 설정에 권한 정책을 추가하는 방식으로 동작 return super().get_permissions() + [self.get_test_func_permission_instance()] def has_permission(self, request: Request, view: APIView) -> bool: return True def has_object_permission( self, request: Request, view: APIView, obj: Model ) -> bool: return True
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
13-14 pytest 코드 실행 오류
질문을 온전히 이해할 수 있도록, 모든 맥락을 전달해주세요.질문은 질문자가 번거로워야 보다 좋은 답변을 얻으실 수 있습니다.시행착오를 알려주시면 곧바로 원하는 문제에 집중할 수 있습니다.오류 메시지는 일부만 알려주시기보다 전체 오류 메시지를 캡처해서 주시면, 오류 파악에 도움이 됩니다. 당신의 파이썬/장고 페이스메이커가 되겠습니다. ;-)인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. postgresql 을 다른 서버에 연결하여 사용중인데요.runserver 시에는 정상 작동하나 강사님이 올려주신 pytest를 똑같이 설정하고 실행하면, schema가 없어서 table을 생성할 수 없다는 오류가 발생합니다.MigrationSchemaMissing("Unable to create the django_migrations table 일단은 settings.py를 sqlite3로 변경하여 정상 작동은 시켰는데요 어떻게 수정할 수 있을까요? 또한 올려주신 소스코드에서import factory from accounts.models import User class UserFactory(factory.django.DjangoModelFactory): class Meta: model = User django_get_or_create = ("username",) username = factory.Sequence(lambda n: f"user{n}") email = factory.LazyAttribute(lambda user: f"{user.username}@example.com") # UserFactory 인스턴스 생성 시에, 암호 입력을 지원하기 위함 # raw_password 필드가 아니라 password 필드로 지정하면, 암호화없이 입력값 그대로 저장됩니다. raw_password = factory.Faker("password") @classmethod def _create(cls, model_class, *args, **kwargs): # raw_password 필드값을 암호화하여 password 필드에 저장합니다. # User 모델에는 raw_password 이름의 필드가 없으므로 kwargs 사전에서 제거해줘야만 합니다. raw_password = kwargs.pop("raw_password", None) if raw_password: kwargs["password"] = make_password(raw_password) return super()._create(model_class, *args, **kwargs)make_password 부분이 import 되어 있지 않습니다. git에서는 수정되어 있는 모양인데 참고 부탁드립니다.
주간 인기글
순위 정보를
불러오고 있어요