묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 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) 인지는 하는 것 같아요. 그런데 버튼은 없군요.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
기능 구현 질문 드립니다.
선생님 안녕하세요, 기능 구현하는데 힌트 좀 받고 싶어서 질문 드립니다. 메세지 차단 기능초대기능접속유저 부분에서 프로필 확인 기능을 넣고 싶습니다.아직 장고가 손에 붙질 않아서.. 어느 부분을 수정해야할지 감이 오지 않습니다. 한번 해볼수있게 힌트 좀 부탁드려도 될까요.감사합니다.
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
실행에러질문
(.venv) PS C:\Users\LG\PycharmProjects\pragmatic> python manage.py runserver Watching for file changes with StatReloaderPerforming system checks...Exception in thread django-main-thread:Traceback (most recent call last): File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\core\checks\urls.py", line 136, in check_custom_error_handlers handler = resolver.resolve_error_handler(status_code) File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\urls\resolvers.py", line 732, in resolve_error_handler callback = getattr(self.urlconf_module, "handler%s" % view_type, None) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\utils\functional.py", line 47, in get res = instance.__dict__[self.name] = self.func(instance) ~~~~~~~~~^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\urls\resolvers.py", line 711, in urlconf_module return import_module(self.urlconf_name) File "C:\Users\LG\AppData\Local\Programs\Python\Python313\Lib\importlib\__init__.py", line 88, in import_module return bootstrap.gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in gcdimport File "<frozen importlib._bootstrap>", line 1360, in findand_load File "<frozen importlib._bootstrap>", line 1331, in findand_load_unlocked File "<frozen importlib._bootstrap>", line 935, in loadunlocked File "<frozen importlib._bootstrap_external>", line 1026, in exec_module File "<frozen importlib._bootstrap>", line 488, in callwith_frames_removed File "C:\Users\LG\PycharmProjects\pragmatic\pragmatic\urls.py", line 25, in <module> path('account/', include('accountapp.urls')), ~~~~~~~^^^^^^^^^^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\urls\conf.py", line 39, in include urlconf_module = import_module(urlconf_module) File "C:\Users\LG\AppData\Local\Programs\Python\Python313\Lib\importlib\__init__.py", line 88, in import_module return bootstrap.gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in gcdimport File "<frozen importlib._bootstrap>", line 1360, in findand_load File "<frozen importlib._bootstrap>", line 1331, in findand_load_unlocked File "<frozen importlib._bootstrap>", line 935, in loadunlocked File "<frozen importlib._bootstrap_external>", line 1026, in exec_module File "<frozen importlib._bootstrap>", line 488, in callwith_frames_removed File "C:\Users\LG\PycharmProjects\pragmatic\accountapp\urls.py", line 4, in <module> from pragmatic.urls import urlpatternsImportError: cannot import name 'urlpatterns' from partially initialized module 'pragmatic.urls' (most likely due to a circular import) (C:\Users\LG\PycharmProjects\pragmatic\pragmatic\urls.py)During handling of the above exception, another exception occurred:Traceback (most recent call last): File "C:\Users\LG\AppData\Local\Programs\Python\Python313\Lib\threading.py", line 1041, in bootstrapinner self.run() ~~~~~~~~^^ File "C:\Users\LG\AppData\Local\Programs\Python\Python313\Lib\threading.py", line 992, in run self._target(*self._args, **self._kwargs) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) ~~^^^^^^^^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\core\management\commands\runserver.py", line 134, in inner_run self.check(display_num_errors=True) ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\core\management\base.py", line 486, in check all_issues = checks.run_checks( app_configs=app_configs, ...<2 lines>... databases=databases, ) File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\core\checks\registry.py", line 88, in run_checks new_errors = check(app_configs=app_configs, databases=databases) File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\core\checks\urls.py", line 138, in check_custom_error_handlers path = getattr(resolver.urlconf_module, "handler%s" % status_code) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\utils\functional.py", line 47, in get res = instance.__dict__[self.name] = self.func(instance) ~~~~~~~~~^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\urls\resolvers.py", line 711, in urlconf_module return import_module(self.urlconf_name) File "C:\Users\LG\AppData\Local\Programs\Python\Python313\Lib\importlib\__init__.py", line 88, in import_module return bootstrap.gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in gcdimport File "<frozen importlib._bootstrap>", line 1360, in findand_load File "<frozen importlib._bootstrap>", line 1331, in findand_load_unlocked File "<frozen importlib._bootstrap>", line 935, in loadunlocked File "<frozen importlib._bootstrap_external>", line 1026, in exec_module File "<frozen importlib._bootstrap>", line 488, in callwith_frames_removed File "C:\Users\LG\PycharmProjects\pragmatic\pragmatic\urls.py", line 25, in <module> path('account/', include('accountapp.urls')), ~~~~~~~^^^^^^^^^^^^^^^^^^^ File "C:\Users\LG\PycharmProjects\pragmatic\.venv\Lib\site-packages\django\urls\conf.py", line 39, in include urlconf_module = import_module(urlconf_module) File "C:\Users\LG\AppData\Local\Programs\Python\Python313\Lib\importlib\__init__.py", line 88, in import_module return bootstrap.gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in gcdimport File "<frozen importlib._bootstrap>", line 1360, in findand_load File "<frozen importlib._bootstrap>", line 1331, in findand_load_unlocked File "<frozen importlib._bootstrap>", line 935, in loadunlocked File "<frozen importlib._bootstrap_external>", line 1026, in exec_module File "<frozen importlib._bootstrap>", line 488, in callwith_frames_removed File "C:\Users\LG\PycharmProjects\pragmatic\accountapp\urls.py", line 4, in <module> from pragmatic.urls import urlpatternsImportError: cannot import name 'urlpatterns' from partially initialized module 'pragmatic.urls' (most likely due to a circular import) (C:\Users\LG\PycharmProjects\pragmatic\pragmatic\urls.py) 강의랑 똑같이 코드를 치고 python manage.py runserver을 입력해서 실행하려 하는데 위 처럼 에러가 뜨는데 코드는 분명 똑같이친거 같은데 뭐가 잘못된건지 모르겠어요ㅠㅠ
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
git에 있는 코드를 다운 받아 실행 해봤는데 에러가 났습니다.
안녕하세요, 제가 어떤식으로 작동하는지 보고 싶어서 먼저 다운 받아서 실행해봤는데, 이런 에러가 발생합니다. 채팅방 생성까진 되지만 채팅방으로 들어가면 1초후에 팅겨 http://127.0.0.1:8000/chat/ 주소로 자동 이동됩니다. AttributeError: 'ChatConsumer' object has no attribute 'channel_name'. Did you mean: 'channel_layer'?WebSocket DISCONNECT /ws/chat/2/chat/ [127.0.0.1:50136]HTTP GET /chat/ 200 [0.01, 127.0.0.1:50118] 질문 받아주셔서 감사합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
ValueError: No route found for path 'ws/liveblog/'.
이런 에러가 발생했습니다. routing.py websocket_urlpatterns = [ path("ws/echo/", EchoConsumer.as_asgi()), ]path로 추가를 해주려고 했는데, 선생님께서는 추가 하지 않고 진행하셨던거같아서요. 지금 에러나는 부분은 admin으로 카드 추가하고 liveblog에 제대로 뜨는지 확인하는 부분이였습니다. WebSocket DISCONNECT /ws/liveblog/ [127.0.0.1:50574]WebSocket HANDSHAKING /ws/liveblog/ [127.0.0.1:50579]Exception inside application: No route found for path 'ws/liveblog/'.Traceback (most recent call last): File "/Volumes/code/mydjangochat/venv/lib/python3.12/site-packages/django/contrib/staticfiles/handlers.py", line 101, in call return await self.application(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/code/mydjangochat/venv/lib/python3.12/site-packages/channels/routing.py", line 62, in call return await application(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/code/mydjangochat/venv/lib/python3.12/site-packages/channels/routing.py", line 134, in call raise ValueError("No route found for path %r." % path)이런식의 에러가 뜨고 자동으로 Page not found라고 뜹니다. 감사합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
지정 경로에 템플릿 파일 만드는 단축키가 뭔가요?
안녕하세요 선생님, 파이참 기능을 통해 템플릿 파일을 지정경로에 만들어준다고 하셨는데, 그게 참 편해보여서요.. 단축키가 무엇일까요. 새해 복 많이 받으시고 항상 건강하세요.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
django-crispy-form에서 {% include 와 with %}
django-crispy-form에서 {% include 와 with %} 다음과 같이 에러가 나타나고, {% include "_crispy_form.html" %}with 절을 제외하니 정상 동작합니다.정확한 이유는 모르겠으나, 문법이 그 사이에 바뀐 것일 수도 있고 해서 일단 공유하는 마음으로 질문드립니다. 감사합니다.
-
해결됨실리콘밸리 엔지니어와 함께하는 샐러리(Celery)
수업노트 github 주소가 404가 많아요
질문은 많을수록 여러분과 커뮤니티에 도움이 될 것입니다.끊임없이 질문하고, 발전하는 지식의 여정에 동참하세요!
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
채팅 내역을 영구적으로 저장하고 싶습니다.
강의를 아직 보지 않고 질문드립니다. models.py에 보면 채팅 내역에 대한 table 정의는 없는 것 같습니다. 혹시 이 부분은 강의에서 다루지 않나요?
-
미해결장고 설계철학으로 시작하는 파이썬 장고 입문
get_object_or_404로 바꾼 후 계속 오류가 나옵니다
저번 실습 마지막에 바꾼 get_object_or_404 이후 계속 페이지에 들어가면 404로 나옵니다
-
미해결포트폴리오 초간단 배포하기
안녕하세요 선생님. django 배포 문의 드립니다.
django 백엔드 관련으로 제작해놓고, 배포 정보를 찾다찾다 못찾겠어서 결제했는데,백엔드 배포는 자바기반이더라구요.....응용이 어려워서 그런데, django 배포는 어떻게 하면 될까요?
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
AsyncIO 멀티 스크랩핑 실습 예제 관련 질문
설명해주신 해당 코드에서는 ThreadPoolExecutor를 닫는 코드가 없던데해당방식이면 메모리 누수가 발생할 가능성은없을까요???with ThreadPoolExecutor(max_workers=max_workers) as executor:이런식으로 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에서는 수정되어 있는 모양인데 참고 부탁드립니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
conda-forge postgresql 과 multithreading
강의에서 설명하지 않으신 내용인데요 가능한지 궁금하여 여쭈어봅니다.Conda-forge 내에 postgresql package가 있습니다. (Postgresql | Anaconda.org)물론 서비스 시에는 database 서버를 따로 두는게 좋다는건 수업 때 설명으로 이해하였습니다. 그러나 실 서비스 시 postgresql를 사용할 것이라면 개발 시에 sqlite 대신 위 package를 사용하는게 만약 더 적합할까요?배포 과정 설명 시에 로드 밸런서가 작업을 서버에 할당해준다고 설명해 주셨는데, 보아하니 각 작업을 싱글 쓰레드로 할당하는 것 처럼 보였습니다. 장고의 경우 View 단에 multithread로 작업할 내용이 있다면, 어떻게 처리해야 하나요?
-
미해결파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편
로그아웃 405 에러
로그아웃뷰가 기본적으로 get 요청을 수용하지 않는다고 하던데 이거 뭔가요. 페이지가 없다는 에러가 나오는게 아니고 아예 405 에러가 나오네.. ㅠ