월 44,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
component_js_dependencies 시 defer, async load
안녕하세요 강의 잘 수강하고 있습니다. django_components를 사용할 때template 에서 {% component_js_dependencies %}로 js 로드시 해당 script를 async, defer로 로드할 수 있는 방법이 있을까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
sql 환경 변수 경고 & postgresql 연동
강의를 보면서 따라하고 있는데, 2가지 문제점이 있습니다.우선 첫번째는 아래처럼, 환경 변수 관련 경고가 뜬다는 것입니다.두번째로는 강의에서는 파이참으로 진행하셨는데, 저는 vs 코드로 진행하여서 sqltools를 다운받아, 드라이브 설치후 진행하였는데 mysql은 잘 연동되었는 postgresql은 연동이 안되더라고요. 앞선 환경변수 문제와 관련이 있는것인지 아니라면 어떻게 해결해야하는것인지 궁금합니다.오류 코드docker-compose up -dWARN[0000] The "g" variable is not set. Defaulting to a blank string.WARN[0000] The "z" variable is not set. Defaulting to a blank string.WARN[0000] The "gl8f5tn_" variable is not set. Defaulting to a blank string.WARN[0000] The "g" variable is not set. Defaulting to a blank string.WARN[0000] The "z" variable is not set. Defaulting to a blank string.WARN[0000] The "gl8f5tn_" variable is not set. Defaulting to a blank string.WARN[0000] The "g" variable is not set. Defaulting to a blank string.WARN[0000] The "z" variable is not set. Defaulting to a blank string.WARN[0000] The "gl8f5tn_" variable is not set. Defaulting to a blank string.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
엑셀 파일 생성 중에 cannot be used in worksheets 에러 발생
안녕하세요.강의와는 무관한 질문이지만 본 강의 수강 완료 후 혼자서 프로젝트를 하고 있습니다.현재 구글 리뷰 크롤링 & 스크랩중인데요. 해당 에러가 발생하는 이유를 도무지 찾을 수 가 없어서 질문 드립니다...여러 사이트를 크롤링 해보고 엑셀을 생성 해 보았지만 왜 이런 에러가 발생하는지 로그를 봐도 제대로 표시가 안되니깐 찾기가 힘드네요.구글 리뷰 사이트만 20여개 스크랩 했었고 엑셀도 제대로 생성 되었으니 스크랩 코드 자체에는 문제가 없는거 같습니다. 다만 이 부분에서만 문제가 생깁니다.### 에러 발생 로그[2024-06-12 09:42:59,954] [ERROR utils.py:179] >>Traceback (most recent call last): File "scraper\scrap_crawlers.py", line 1365, in get_review_details File "scraper\utils.py", line 202, in create_xlsx_file File "scraper\utils.py", line 181, in create_xlsx_file File "pandas\util\_decorators.py", line 333, in wrapper File "pandas\core\generic.py", line 2417, in to_excel File "pandas\io\formats\excel.py", line 952, in write File "pandas\io\excel\_openpyxl.py", line 490, in writecells File "openpyxl\cell\cell.py", line 218, in value File "openpyxl\cell\cell.py", line 197, in bindvalue File "openpyxl\cell\cell.py", line 165, in check_stringopenpyxl.utils.exceptions.IllegalCharacterError: 동생한테추천받았는데이렇게편한어플이있다니너무좋아요.현금비율은좋지않지만 신경많이안써도되서괜찮네요~ cannot be used in worksheets.During handling of the above exception, another exception occurred:###cannot be used in worksheets. 이놈이 말썽이네요...아래와 같이 테스트 케이스 만들어서 적용했을 때는 제대로 작동했었습니다.import asyncio from scraper.utils import create_xlsx_file, save_to_xlsx DEFAULT_NAME = "test" async def main(): data = { "message": "동생한테추천받았는데이렇게편한어플이있다니너무좋아요.현금비율은좋지않지만 신경많이안써도되서괜찮네요~" } xlsx_file = await create_xlsx_file( data, file_name=DEFAULT_NAME, sheet_name=DEFAULT_NAME ) await save_to_xlsx(xlsx_file, DEFAULT_NAME) asyncio.run(main()) # utils.py # 엑셀 가로 폭 조정하는 함수 async def calculate_dimension(worksheet: Worksheet) -> None: try: for column_cells in worksheet.iter_cols(): length = max(len(str(cell.value)) for cell in column_cells) adjusted_width = (length + 2) * 1.2 # 조정된 폭 계산 column_letter = get_column_letter(column_cells[0].column) worksheet.column_dimensions[column_letter].width = adjusted_width except Exception as e: message = f"엑셀 폭 조정 중에 예외 발생: '\n{e}" logger = await get_logger() logger.error(message) print(message) raise e # 엑셀에 서식 스타일 지정하는 함수 async def cell_pattern_fill( df: pd.DataFrame, worksheet: Worksheet, head_fill_color: str = "4472C4", head_font_color: str = "FFFFFF", body_fill_color: str = "D9E1F2", body_font_color: str = "000000", head_border_color: str = "2E5C99", body_border_color: str = "B4C6E7", fill_type: fills = "solid", ) -> None: try: # Define border styles thin_border_head = Border( left=Side(border_style="thin", color=head_border_color), right=Side(border_style="thin", color=head_border_color), top=Side(border_style="thin", color=head_border_color), bottom=Side(border_style="thin", color=head_border_color), ) thin_border_body = Border( left=Side(border_style="thin", color=body_border_color), right=Side(border_style="thin", color=body_border_color), top=Side(border_style="thin", color=body_border_color), bottom=Side(border_style="thin", color=body_border_color), ) # Set header row style for row in worksheet.iter_rows( min_row=1, max_row=1, min_col=1, max_col=df.shape[1] ): for cell in row: cell.fill = PatternFill( start_color=head_fill_color, end_color=head_fill_color, fill_type=fill_type, ) cell.font = Font(color=head_font_color, bold=True) cell.border = thin_border_head # Set body row style for i, row in enumerate( worksheet.iter_rows( min_row=2, max_row=worksheet.max_row, min_col=1, max_col=df.shape[1] ) ): for cell in row: if i % 2 == 0: cell.fill = PatternFill( start_color=body_fill_color, end_color=body_fill_color, fill_type=fill_type, ) cell.font = Font(color=body_font_color) cell.border = thin_border_body except Exception as e: message = f"엑셀 서식 지정 중에 예외 발생: '\n{e}" logger = await get_logger() logger.error(message) print(message) raise e # 본 강의 drf 엑셀 생성 파트를 참고해서 만든 엑셀 생성 함수 async def create_xlsx_file( data: Union[Dict, List], file_name: str = DEFAULT_DIR_NAME, sheet_name: str = DEFAULT_DIR_NAME, ) -> BytesIO: df = pd.json_normalize(data) io = BytesIO() io.name = file_name try: writer = pd.ExcelWriter(io, engine="openpyxl") # noqa df.to_excel( writer, index=False, engine="openpyxl", sheet_name=sheet_name, ) workbook = writer.book worksheet = workbook.active tasks = [ calculate_dimension(worksheet), cell_pattern_fill(df, worksheet), ] await tqdm.gather(*tasks, desc=f" 엑셀 파일 생성중") writer._save() # noqa except Exception as e: message = f"엑셀 생성 중에 예외 발생: '\n{e}" logger = await get_logger() logger.error(message) print(message) raise e io.seek(0) return io # 엑셀 저장 함수 async def save_to_xlsx( xlsx_file: BytesIO, dirname: str = DEFAULT_DIR_NAME, ): output_path = BASE_DIR / "스크랩_결과" / "엑셀" / dirname output_path.mkdir(parents=True, exist_ok=True) now = datetime.datetime.now() timestamp = now.strftime("%Y-%m-%d_%H_%M") filename = f"{xlsx_file.name}_{timestamp}" extension = ".xlsx" file_path = output_path / (filename + extension) try: async with aiofiles.open(file_path, "wb") as f: await f.write(xlsx_file.getvalue()) except Exception as e: message = f"엑셀 파일 저장 중에 예외 발생: '{filename}'\n{e}" logger = await get_logger() logger.error(message) print(message) raise e전체적인 함수는 위와 같으며 엑셀 생성 중에 에러가 발생하였으니 create_xlsx_file 함수 부분에서 해결을 해보아야 할것 같습니다.아니면 혹시 엑셀의 행을 생성 중에 에러가 발생하였을 때 해당 행은 스킵하고 이어서 진행하게 하는 방법이 있을까요?? "raise e"을 발생 시키지 않아도 엑셀 생성 작업 스킵이 되지않고 작업 자체에 문제가 생기네요
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
기존에 만들어 진 테이블을 ORM으로 사용하고 싶어요
mysql 에 테이블을 기존에 만들어 둔게 있습니다. 다른 서비스가 데이터를 쌓아 놓는 테이블인데 여기를 ORM으로 조회를 한번 해보고 싶습니다. 로그성 테이블이라 pk가 없습니다.python manage.py inspectdb 로 모델 코드를 만들어 내긴 했습니다.python shell로 조회를 하려고 하는데 id 필드를 찾으려는 시도를 계속 합니다. 기존에 만들어진 DB 스키마를 ORM으로 사용려고 만든 것이 inspectdb 일것 같은데 장고 ORM 구조가 PK를 필수로 가져야 하는 구조인지 궁금합니다.(구글링 해보면 PK가 필수라는 이야기도 있고, CHATGPT에게 물어보면 Meta클래스에 managed가 False이면 괜찮다는 답변이 나오네요) inspectdb로 만들어진 코드에는 Meta 클래스가 아래와 같이 있습니다.class MacLog(models.Model): timestamp = models.DateTimeField() sw_ip = models.CharField(max_length=20) mac = models.CharField(max_length=255) port = models.CharField(max_length=20) class Meta: managed = False db_table = 'mac_log' 다음은 에러가 나는 내용 입니다. >>> from django.db.models import QuerySet >>> from maccol.models import MacLog >>> >>> qs = QuerySet(MacLog) >>> for item in qs: ... print(item) ... None Execution time: 0.019902s [Database: default] Traceback (most recent call last): File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute return self.cursor.execute(query, args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute res = self._query(mogrified_query) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query db.query(q) File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query _mysql.connection.query(self, query) MySQLdb.OperationalError: (1054, "Unknown column 'mac_log.id' in 'field list'") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<console>", line 1, in <module> File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/models/query.py", line 398, in __iter__ self._fetch_all() File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/models/query.py", line 1881, in _fetch_all self._result_cache = list(self._iterable_class(self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/models/query.py", line 91, in __iter__ results = compiler.execute_sql( ^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1562, in execute_sql cursor.execute(sql, params) File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django_extensions/management/debug_cursor.py", line 49, in execute return utils.CursorWrapper.execute(self, sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute return self._execute_with_wrappers( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers return executor(sql, params, many, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute with self.db.wrap_database_errors: File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute return self.cursor.execute(query, args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute res = self._query(mogrified_query) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query db.query(q) File "/Users/dcu/workspace/maccol/venv/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query _mysql.connection.query(self, query) django.db.utils.OperationalError: (1054, "Unknown column 'mac_log.id' in 'field list'")
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
3-4질문 계속합니다 ㅠㅠ 죄송합니다
계속 질문드려 죄송합니다 ㅜㅠ 들여쓰기했는데 이번에 Song.from_dict() missing 1 required positional argument: 'data' 이런오류가뜹니다.. 너무 질문이 많아 죄송합니다..
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
3-4 질문입니다
데이터베이스 sqlite연결하고models.py 파일들어가서도 변경했습니다변경하고 모델 Song 클래스 table까지 생성완료했습니다그런데 사진과 같이 예상외 오류가뜹니다 그전까지는 핫트랙 홈페이지가 잘떳습니다오류내용보니 전혀 건들이지 않는 views.py song.from_dic 에서 오류가 먼저 났습니다 이유를 잘 모르겠습니다...
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
3-4 db sqlite3 파일 질문입니다22
새로고침을해도 데이터베이스 테이블 목록에는 저거 밖에 안뜨는데 이유를 알수있을까요??
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
3-4 db sqlite3 파일 질문입니다
db sqlite3 파일을 더블클릭했는데 3-4 2분10분 화면처럼 창이 안뜨는데 혹시 무엇이 잘못된지 알수있나요?>....
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
질문입니다
데스크탑으로만 하다가 노트북으로 다시 진행중에Hottrack쪽에 오류가 계속 생깁니다앱등록도 하고 앱 설치도 다 했는데 무엇이 문제일까요..?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
강의목록 03-05 좋아요 count 멜론 사이트 접근 오류
안녕하세요. 강의 03-05 에서 좋아요 수를 검색하는 Action 에서 오류가 나서 문의 드립니다. 어드민 화면에서 Update Like count 액션을 실행하면 아래 와 같은 에러 페이지가 노출됩니다.강사님 코드를 복사해서 붙여서 해봐도 같은 현상이라서 이것저것 찿아봤지만 도무지 해결이 않되네요. postman에서 도 접근이 않되는데, 브라우저에서 해당 url로 접속하면 데이터가 보이기는 합니다.여기저기 구글링 해보고 이리저리 변경도 해 봤지만.. 해결이 되지않아 질문을 올립니다.제 pc가 회사에 있는 pc라 혹시 로컬 환경이 문제일수 있나 싶기도 하지만, 우선 확인 요청드립니다. 감사합니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
섹션 11 체크리스트 링크 확인 요청
안녕하세요.알차게 준비해주신 강의 잘 듣고 있습니다.강의 수강 중 섹션 11에서 참고하고 있는 체크리스트 링크가 수업노트에 기재되어 있지 않아 문의 드립니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
외래키 참조 관계에서 bulk_create는 어떻게 사용하나요?
from django.db import models class Post(models.Model): title = models.CharField(max_length=200) content = models.TextField() class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) content = models.TextField() import itertools from typing import Iterator, Tuple from django.core.management import BaseCommand from django.db import transaction from blog.models import Post, Comment class Command(BaseCommand): help = "test" def handle(self, *args, **options): generate_post_instances = ( Post(title=title, content=content) for title, content in self.generate_post_row() ) with transaction.atomic(): for chunks in self.get_chunks(generate_post_instances, chunk_size=1000): Post.objects.bulk_create(chunks, ignore_conflicts=True) for post_instance in Post.objects.all(): generate_comment_instance = ( Comment(post=post_instance, content=content) for content in self.generate_comment_row() ) for chunks in self.get_chunks( generate_comment_instance, chunk_size=1000 ): Comment.objects.bulk_create(chunks, ignore_conflicts=True) @classmethod def generate_post_row(cls, size: int = 1000) -> Iterator[Tuple[str, str]]: for i in range(1, size + 1): yield f"Test post {i}", f"Test content {i}" @classmethod def generate_comment_row(cls, size: int = 100) -> Iterator[str]: for i in range(1, size + 1): yield f"Test comment {i}" @classmethod def get_chunks(cls, iterable: Iterator, chunk_size: int = 100) -> Iterator: iterator = iterable if hasattr(iterable, "__next__") else iter(iterable) for first in iterator: yield itertools.chain([first], itertools.islice(iterator, chunk_size - 1)) 안녕하세요.기존 강의에서 다루시던 대용량 데이터 처리 관련 코드를 참조하여 좀 더 이해하고자 커스텀해서 예시코드를 작성하게 되었습니다.제너레이터, bulk_create 메서드에 대해서 질문이 있습니다.1. 제너레이터는 yield 한 다음 반복문을 이용해 호출합니다. 제너레이트를 호출 한다면 호출할 때 반복문이 여러개 겹치게 되는데 이때 시간복잡도는 어떻게 되는건가요?[generate_post_row 호출 > generate_post_instances 호출 > get_chunks > 호출] 이때 반복문을 많이 사용하게 되는데 어떤식으로 처리가 되는지 궁금합니다. 2. transaction.atomic() 에서 먼저 Post을 bulk_create로 생성한 뒤 해당 Post의 데이터들을 Comment 인스턴스에 넘겨주어 bulk_create를 사용하였는데. 혹시 더 나은 방법이 있을까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
serializer에서 query문 작성
serializer는 직렬화를 담당하는 클래스인데 이 안에서 orm으로 query 메서드를 정의하는 게 괜찮은 방법인가요? layered architecture라고 한다면 repository 클래스를 만들텐데, django에서는 이런 방식이 권장되는 방법인지 궁금합니다.repository class에 query 메서드를 작성하고 queryset에 할당해주는 방법은 괜찮은가요?감사합니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
04-13) slugify가 작동하지 않습니다
질문을 온전히 이해할 수 있도록, 모든 맥락을 전달해주세요.질문은 질문자가 번거로워야 보다 좋은 답변을 얻으실 수 있습니다.시행착오를 알려주시면 곧바로 원하는 문제에 집중할 수 있습니다.오류 메시지는 일부만 알려주시기보다 전체 오류 메시지를 캡처해서 주시면, 오류 파악에 도움이 됩니다. 당신의 파이썬/장고 페이스메이커가 되겠습니다. ;-)인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ===================================Song 모델, slug 필드 추가에서 질문이 몇 가지 있습니다.우선, Meta 속성 추가는 makemigration을 위한 것이고, get_absolute_url method는 template에서 호출하기 위해 정의한 것으로 이해했습니다.첫 질문은 makemigration을 두 단계로 나눈 이유가 있나요? class Migration(migrations.Migration): dependencies = [ ("hottrack", "0001_initial"), ] operations = [ migrations.AddField( model_name="song", name="slug", field=models.SlugField(allow_unicode=True, blank=True), ), migrations.AddIndex( model_name="song", index=models.Index(fields=["slug"], name="hottrack_so_slug_7cf104_idx"), ), migrations.RunPython(forward_code, reverse_code=migrations.RunPython.noop) ] 이런식으로 한번에 처리하면안되나요? 또한 영상 8:06 실습 영상에서는 생략되어있지만 5:40 설명하실 때는 class Song(models.Model): melon_uid = models.CharField(max_length=20, unique=True) rank = models.PositiveSmallIntegerField() album_name = models.CharField(max_length=100) name = models.CharField(max_length=100) artist_name = models.CharField(max_length=100) cover_url = models.URLField() lyrics = models.TextField() genre = models.CharField(max_length=100) release_date = models.DateField() like_count = models.PositiveIntegerField() slug = models.SlugField(allow_unicode=True, blank=True) class Meta: # Model의 related field, primary key에 대해서는 자동으로 index가 생성된다. # 이외에 model을 쿼리할 때 자주 사용되는 field인 경우 index 생성을 고려해보는 것이 좋다 indexes = [ models.Index(fields=["slug"]) ] def slugify(self, force=False): if force or not self.slug: self.slug = slugify(self.name, allow_unicode=True) def save(self, *args, **kwargs): self.slugify() super().save(*args, **kwargs) @property def get_absolute_url(self) -> str: # slug = slugify(self.name, allow_unicode=True) ###################################################### print("-----------check-----------") self.save() # 강의 상에서 누락 ####################################################### return reverse( viewname="hottrack:song_date_detail", args= [ self.release_date.year, self.release_date.month, self.release_date.day, self.slug, ] # kwargs={"pk": self.pk} )get_absolute_url 내부에 self.slugify()를 호출하여 detail 버튼을 클릭하였을 때 slug가 없으면 name으로 부터 slugify를 수행하는 것으로 이해하였는데 그 경우 db에 저장되지 않습니다. 그래서 제 경우 임으로 self.save()로 줄을 추가하여 db에 저장되도록 하였습니다.테스트를 위해 0002 migration만 진행하여 빈 slug필드만 생성하였습니다.그러나 버튼을 눌러 페이지를 호출 시url은 정상적으로 생성되었으나 db 업데이트가 이루어지지 않아 404 not found가 발생합니다. 추가적으로print 문도 stream에 나오지 않습니다. 아마 template단에서 method를 콜해서 그런거 같은데 문제가 뭔가요?만약 제가 이해한 바가 틀리다면, save와 slugify method는왜 정의했으며 어디에 사용되는 건가요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
04-04 강의에서 질문 있습니다
질문을 온전히 이해할 수 있도록, 모든 맥락을 전달해주세요.질문은 질문자가 번거로워야 보다 좋은 답변을 얻으실 수 있습니다.시행착오를 알려주시면 곧바로 원하는 문제에 집중할 수 있습니다.오류 메시지는 일부만 알려주시기보다 전체 오류 메시지를 캡처해서 주시면, 오류 파악에 도움이 됩니다. 당신의 파이썬/장고 페이스메이커가 되겠습니다. ;-)인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. JS로 토스트 스타일 메시지 노출에서 JS와 장고 템플릿이 강하게 결합되어 있어 react와 같은 것을 적용하기 어렵다고 하셨는데 그게 무슨 뜻인가요?| 가 템플릿에서 원래 필터라고 배웠는데 json_script를 키로 하여 closure 함수를 매핑하는 것은 어떤 원리인가요?--> 이와 관련하여 단순히 views.py 에서 serialize된 List[dict]를 context에 반환 시키는 것보다 저런 식으로 context processor를 사용하는 것은 toast 메시지를 여러 페이지에서 사용할 수 있을 수도 있기 때문인가요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
django htmx 외에 몇 가지 질문 있습니다.
@login_required_hx def note_delete(request, pk): note = get_object_or_404(Note, pk=pk, author=request.user) if request.htmx: note.delete() messages.success(request, "기록을 삭제했습니다.") return HttpResponseClientRedirect(redirect_to=reverse_lazy("photolog:index")) photolog 삭제 기능은 다루시지 않으셨길래 htmx로 구현해보고 있었습니다. 여기서 get_object_or_404를 설정하면 해당하는 쿼리셋 결과가 없을때 404오류를 반환해야하는데 htmx때문에 404 오류를 발생시키지 않습니다. 이 경우엔 어떻게 에러를 해결해야하나요?HttpResponseClientRedirect을 통한 리다이렉트 요청은 함수기반뷰에서는 작동하지만 클래스 기반뷰에서는 작동하지 않았습니다. 이유가 무엇일까요? (form_valid 메서드에 HttpResponseClientRedirect만 추가해서 재정의 했습니다) 여러 파일을 등록해보았는데 같은 png 파일이지만 특정 파일은 등록할 수 없었습니다.OSError at /new/ cannot write mode P as JPEG 오류가 발생하길래 기존 RGBA를 RGB로 변환하는 부분을 아래와 같이 수정했습니다.if pil_image.mode != "RGB": pil_image = pil_image.convert("RGB") jpeg로 변환시에는 모든 타입에 대해서 RGB로 변환을 하는게 일반적인건가요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
django, next.js 관련 질문 있습니다.
안녕하세요 강의 잘 보고 있습니다.강의가 업데이트 될 때까지 django에 대해서 좀 더 연습해보려고 개인프로젝트 준비중에 앞서 질문드릴게 있습니다.1. django를 개발할때 유용한 라이브러리들을 추천 받고 싶습니다.매번 코드 변경 후 브라우저를 새로고침 해야하는게 너무 불편해서 개선할 방법을 찾다가 django-browser-reload 라는 템플릿 내용이 변경될 때 마다 자동으로 브라우저를 새로고침 해주는 라이브러리를 알게되어서 만족하며 사용하고 있습니다.강의에서 소개해주신 라이브러리들도 굉장히 편하더라고요 물론 사용할 때는 사용법도 익혀야 한다는 점이 있지만 그런 라이브러리와 달리 django-browser-reload 처럼 간단하고 개발자의 편의성을 개선할 수 있는 라이브러리가 또 무엇이 있는지 궁금합니다.crispy-form은 편리합니다. 다만 html과 달리 forms에서는 css_class를 사용하여 레이아웃을 지정할 때 어떠한 css class가 존재하는지 알려주지 않는다는것이 아쉽네요. 개선할 방법이 있을까요?Javascript의 prettier처럼 django templates에서 html 파일을 저장하는 액션이 발생할 때 자동으로 코드 정리 할 수 있는 포멧터도 있을까요?2. 이후에 다룰 섹션 16 SPA 하이브리드 방식으로 장고/리액트 중심의 서비스 만들기에서 입력 form은 django form을 사용하여 작성해서 사용자가 form을 사용 할 때에만 django 페이지로 이동하고 그 이외에 디자인을 세심하게 해야 되는 페이지들은 drf + next.js로 다루게 되는건가요?React 기반 프레임워크에서 form 유효성 검사를 하는것은 생각보다 까다롭더라고요.그런데 django form을 사용하게되면 그 부분을 빠르게 처리 할 수 있고 나머지 페이지들에 대해선 django component를 사용해서 템플릿을 구성하는거 보다는 React 기반에서 컴포넌트를 구성해서 페이지를 렌더링 하는게 더 편할거 같다고 생각했습니다.만약 해당 방법대로 프로젝트를 구성하게 된다면 장점도 있겠지만 단점도 존재하게 될텐데 단점들은 무엇이 있을까요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
11-23 컴포넌트가 제대로 동작하지 않는것 같습니다.
https://github.com/pyhub-kr/course-django-complete-guide-v3/commit/ea385575c83d8a2ff6b0407352ec419034a1be30관련커밋 내용을 그대로 복사하여 적용하였습니다. (image_overlay, index.html)컴포넌트에서 첫 번째 레코드 요소만 반복되어 적용 됩니다. (이미지를 포함하여 제목까지 똑같습니다.)myproj/photolog/templates/photolog/index.html 가 문제 인거 같습니다.myproj/photolog/templates/photolog/index.html 임의 수정{% extends "photolog/base.html" %} {% load component_tags %} {% block photolog-content %} <div class="container"> <div class="row"> {% for note in note_list %} {% with img_url=note.photo_set.all.0.image.url %} {% component "image-overlay" href="/" target="_blank" class="col-xl-3 col-lg-4 col-md-6 mt-4" %} {% fill "img-src" %}{{ img_url }}{% endfill %} {% fill "text" %} {{ note.title }}<br/> <small>by {{ note.author.username }}</small> {% endfill %} {% endcomponent %} {% endwith %} {% endfor %} </div> </div> {% endblock %}기존 코드에서 with, {{ img_url }}을 추가하여 수정 하였습니다.위와 같이 수정하니 컴포넌트가 정상적으로 불러와졌습니다.myproj 버전[[source]] url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] django = "*" black = "*" django-extensions = "*" django-environ = "*" django-template-partials = "*" django-htmx = "*" django-crispy-forms = "*" crispy-bootstrap5 = "*" django-components = "*" pillow = "*" django-lifecycle = "*" [dev-packages] django-debug-toolbar = "*" ipython = "*" [requires] python_version = "3.12"
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
관련 책이 언제 나올까요?
관련 도서 출간은 언제쯤 예상하시나요?건강하시길 바라요~
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
django manage.py 명령어 실행에 오류가 발생합니다.
안녕하세요~잘 되던 python manage.py 명령어에서 오류가 발생합니다. 아마 개인 실습 중에 진행한 어떤 작업이 영향을 미친 것 같습니다. ㅜㅜ 가상환경 생성에 사용되는 pyenv로 설치한 파이썬에서 문제가 발생했나 싶어 해당 파이썬을 지우고, 다른 파이썬 버전에서 실행해보았는데 동일한 오류가 발생합니다. 아래는 python -m venv로 가상환경을 생성하고, 거기에 django를 설치한 후 python manage.py runserver를 실행시켰을 때 나타나는 오류 메시지 입니다. 짚이시는 부분이 있다면 공유 좀 부탁리겠습니다. 오류 메시지Traceback (most recent call last): File "D:\Books\demo\venv\lib\site-packages\django\core\management\base.py", line 413, in run_from_argv self.execute(*args, **cmd_options) File "D:\Books\demo\venv\lib\site-packages\django\core\management\commands\runserver.py", line 74, in execute super().execute(*args, **options) File "D:\Books\demo\venv\lib\site-packages\django\core\management\base.py", line 459, in execute output = self.handle(*args, **options) File "D:\Books\demo\venv\lib\site-packages\django\core\management\commands\runserver.py", line 81, in handle if not settings.DEBUG and not settings.ALLOWED_HOSTS: File "D:\Books\demo\venv\lib\site-packages\django\conf\__init__.py", line 89, in __getattr__ self._setup(name) File "D:\Books\demo\venv\lib\site-packages\django\conf\__init__.py", line 76, in _setup self._wrapped = Settings(settings_module) File "D:\Books\demo\venv\lib\site-packages\django\conf\__init__.py", line 190, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "C:\Users\ktsfr\.pyenv\pyenv-win\versions\3.10.3\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 992, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked ModuleNotFoundError: No module named 'django_aws_lambda' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\Books\demo\myproject\manage.py", line 22, in <module> main() File "D:\Books\demo\myproject\manage.py", line 18, in main execute_from_command_line(sys.argv) File "D:\Books\demo\venv\lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line utility.execute() File "D:\Books\demo\venv\lib\site-packages\django\core\management\__init__.py", line 436, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "D:\Books\demo\venv\lib\site-packages\django\core\management\base.py", line 426, in run_from_argv connections.close_all() File "D:\Books\demo\venv\lib\site-packages\django\utils\connection.py", line 84, in close_all for conn in self.all(initialized_only=True): File "D:\Books\demo\venv\lib\site-packages\django\utils\connection.py", line 76, in all return [ File "D:\Books\demo\venv\lib\site-packages\django\utils\connection.py", line 73, in __iter__ return iter(self.settings) File "D:\Books\demo\venv\lib\site-packages\django\utils\functional.py", line 47, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "D:\Books\demo\venv\lib\site-packages\django\utils\connection.py", line 45, in settings self._settings = self.configure_settings(self._settings) File "D:\Books\demo\venv\lib\site-packages\django\db\utils.py", line 148, in configure_settings databases = super().configure_settings(databases) File "D:\Books\demo\venv\lib\site-packages\django\utils\connection.py", line 50, in configure_settings settings = getattr(django_settings, self.settings_name) File "D:\Books\demo\venv\lib\site-packages\django\conf\__init__.py", line 89, in __getattr__ self._setup(name) File "D:\Books\demo\venv\lib\site-packages\django\conf\__init__.py", line 76, in _setup self._wrapped = Settings(settings_module) File "D:\Books\demo\venv\lib\site-packages\django\conf\__init__.py", line 190, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "C:\Users\ktsfr\.pyenv\pyenv-win\versions\3.10.3\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 992, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked ModuleNotFoundError: No module named 'django_aws_lambda'