수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
jupyter notebook 에서 No module named 'django_extensions' 에러가 발생합니다 ㅠ
8강 장고 Shell 에서는 에러 없이 잘 되었는데, 지금은 스샷처럼 에러가 발생하네요 ㅠ 여기저기 찾아봐도 환경설정은 추가되어 있는거 같고 방법을 모르겠어서 질문 남깁니다. 시간되실 때 확인해주시면 감사하겠습니다. ^^
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
혹시 말안듣고 장고 최신버전(4.2)으로 하시는 분들 parse_header() 문제
drf와 django버전이 안맞아서 그렇습니다parse_header()는 django 4.2에서는 없어졋는데drf 최신버전에서는 여전히 사용합니다.django 4.1 로 재설치하면 해결됩니다!
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
DjangoJSONEncoder에서 언급하신 재귀적 로직의 개념
class MyJSONEncoder(DjangoJSONEncoder): def default(self, obj): if isinstance(obj, QuerySet): return tuple(obj) elif isinstance(obj, Post): return {'id': obj.id, 'title': obj.title, 'content': obj.content} elif hasattr(obj, 'as_dict'): return obj.as_dict() return super().default(obj)JSON 직렬화 강의에서 위의 구문의 return tuple(obj) 이 실행될 경우 재귀적으로 default 메서드를 탄다고 말씀하셨는데 어떤 원리인지 이해를 하지 못했습니다.튜플로 변환될 때 어떻게 MyJSONEncoder가 이를 인지하고 작동하는지 여쭤봅니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
도커 컨테이너 내용 수정
안녕하세요 강사님! 파이썬 3.10 이상인 상태로 배포를 하려합니다! 배포를 하는 도중AttributeError: module 'collections' has no attribute 'Callable'가 발생하여 보니 pydenticon 에러였습니다. 이런 경우는 컨테이너 안에서 수정을 해야할 것 같아서docker run -it <이미지 이름> /bin/bash으로 수정 후 docker commit을 진행했습니다.하지만 이 경우, 문제가 생기는데 docker run --rm --publish 9000:8000 -it <이미지이름> sh를 실행하여, python3 manage.py runserver 0.0.0.0:8000 을 직접 실행해줘야만 하는 번거로움이 있었습니다. 혹시 이를 해결하기 위한 방법이 있는지 알고싶습니다.감사합니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Post model에서 manytomany 관련 filter 경고
상단에 문제는 상관없는 문제인가요???
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
(수정)한 포스팅에 사진 여러장을 업로드하려고 수정해봤습니다
하나의 포스팅에 여러 이미지들을 업로드하는 코드를 선생님 강좌를 보면서 나름대로 수정해봤는데 코드가 많이 엉킨 것 같습니다.우선 코드부터 보여드리자면mainfunc/models.pyfrom django.db import models from django.conf import settings from django.contrib.auth.models import User #Label 테이블 -- 유저(외래키), 레이블 class Label(models.Model): id = models.BigAutoField(primary_key=True) author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True) label_name = models.CharField(max_length=50, default='') #Post 테이블 -- 레이블(외래키), 이미지 class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True) label = models.ForeignKey(Label, on_delete=models.CASCADE) image = models.ImageField(upload_to='images/%Y/%m/%d', blank=True, null=True) def __str__(self): return f'{self.label}' mainfunc/serializers.pyfrom rest_framework import serializers from .models import Post, Label from django.contrib.auth import get_user_model class AuthorSerializer(serializers.ModelSerializer): class Meta: model = get_user_model() fields = '__all__' class PostSerializer(serializers.ModelSerializer): # post에서 이미지를 한번에 입력받아서 저장할 것이기 때문. image = serializers.ImageField(use_url=True) class Meta: author = AuthorSerializer(read_only=True) model = Post fields = ['image'] class LabelSerializer(serializers.ModelSerializer): images = PostSerializer(many=True, read_only=True) def get_images(self, obj): image = obj.post_set.all() return PostSerializer(instance=image, many=True).data class Meta: model = Label fields = ['author', 'label', 'images'] # fields = '__all__' def create(self, validated_data): instance = Label.objects.create(**validated_data) image_set = self.context['request'].FILES for image_data in image_set.getlist('image'): Post.objects.create(label=instance, image=image_data) return instancemainfunc/views.pyfrom rest_framework.viewsets import ModelViewSet from .serializers import PostSerializer from .models import Post from rest_framework.permissions import AllowAny from django.db.models import Q # CRUD가 모두 들어간 API를 지원 class PostViewSet(ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer #permission_classes = [AllowAny] #FIXME: 인증 적용 def get_queryset(self): qs = super().get_queryset() qs = qs.filter( # "author" 필드가 현재 요청한 사용자 (self.request.user)와 동일한 값을 가지는 객체만 필터링 Q(author=self.request.user) #본인이 작성한 글만 볼 수 있도록 함. ) return qs def perform_create(self, serializer): serializer.save(author=self.request.user) return super().perform_create(serializer) model 설계가 잘못된걸까요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
React에서 일괄번역을 할 수 있는 API나 라이브러리가 있을까요??
요즘은 홈페이지마다 번역기능이 달려있는데 i18n을 사용하여 일일히 다는 방법외에는 없는건가요?? 페이지 전체를 자동번역을 할 수 있는게 있는지 궁금합니다!
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
db쪽에 자꾸 에러가 납니다
현재 MySQL을 사용해서 선생님 강의를 보며 모델을작성중인데 계속 이런 에러가 뜹니다. django.db.utils.OperationalError: (1054, "Unknown column 'accounts_user.password' in 'field list'")accounts/models.pyfrom django.conf import settings from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): pass./ serializers.pyfrom rest_framework import serializers from django.contrib.auth import get_user_model User = get_user_model() class SignupSerializer(serializers.ModelSerializer): #pw 보안 password = serializers.CharField(write_only=True) def create(self, validated_data): user = User.objects.create(username=validated_data["username"]) user.set_password(validated_data["password"]) #암호화된 비번 저장 user.save() return user class Meta: model = User fields = ["pk", "username", "password"]./views.pyfrom django.contrib.auth import get_user_model from django.shortcuts import render from rest_framework.permissions import AllowAny from rest_framework.generics import CreateAPIView from .serializers import SignupSerializer #회원가입 뷰 #createapiview 이므로 get 메소드 허용X class SignupView(CreateAPIView): model = get_user_model() serializer_class = SignupSerializer permission_classes = [ AllowAny,#실제로 회원가입할 때는 로그인은 되면 안됨 ] 그리고 accounts의 user를 참조하면서 라벨과 이미지를 첨부할 수있는 mainfunc의./models.pyfrom django.db import models from django.conf import settings from django.contrib.auth.models import User class TImestampedModel(models.Model): # 기본 필드값 created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True class Post(TImestampedModel): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) label = models.CharField(max_length=50, default='') images = models.ImageField(upload_to='images/%Y/%m/%d', blank=True) def __str__(self): return f'{self.author}' ./views.py from rest_framework.viewsets import ModelViewSet from .serializers import PostSerializer from .models import Post from rest_framework.permissions import AllowAny from django.db.models import Q # CRUD가 모두 들어간 API를 지원 class PostViewSet(ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer #permission_classes = [AllowAny] #FIXME: 인증 적용 def get_queryset(self): qs = super().get_queryset() qs = qs.filter( Q(author=self.request.user) #본인이 작성한 글만 볼 수 있도록 함. ) return qs 이렇습니다.구글링해봐도 대부분은 그냥 migrations 된 파일을 삭제하고 다시 migrate 하니까 해결이 되던데 저는 계속 같은 에러가 뜨네요..혹시 뭐가 원인인지 알 수 있을까요? AbstractUser 로 수정하고나서부터 이런 현상이 나타나긴 했습니다일단 ERD는 아래와 같이 나옵니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
axios 401에러가 났습니다
401 에러가 나서 제가 구글링을 나름 해보니, 토큰인증의 문제가 원인이라고 하는데 아직 토큰발급을 적용하지 않았는데 이런 에러가 나는 이유는 무엇일까요..Signup.js 부분은 선생님의 코드와 완전히 같습니다. import React, { useState } from "react"; import Axios from "axios"; export default function Signup() { const [inputs, setInputs] = useState({}); const onSubmit = e => { e.preventDefault(); Axios.post("http://localhost:8000/accounts/signup/", inputs) .then(response => { console.log("response: ",response); }) .catch(error => { console.log("error: ",error); }); }; const onChange = e => { const {name, value} = e.target; setInputs(prev => ({ ...prev, [name]: value })); }; return ( <div> <form onSubmit={onSubmit}> <input type="text" name="username"onChange={onChange}/> <input type="password" name="password" onChange={onChange}/> <input type="submit" value="회원가입" /> </form> </div> ); }백엔드 단에서는 구조가 약간 다르긴 하지만 accounts 부분은 크게 다르지 않습니다.accounts/models.py from django.db import models class User(models.Model): user_id = models.CharField(max_length=32, unique=True, verbose_name='id') user_pw = models.CharField(max_length=128, verbose_name='password') user_name = models.CharField(max_length=16, unique=True, verbose_name='name') user_Email = models.EmailField(max_length=128, unique=True, verbose_name='email') def __str__(self): return self.user_name #오브젝트 호출시 user_name으로 표시 class Meta: #DB 테이블 명 지정 db_table = 'user' verbose_name = 'user' accounts/serializers.py from rest_framework import serializers from django.contrib.auth import get_user_model User = get_user_model() class SignupSerializer(serializers.ModelSerializer): #pw 보안 password = serializers.CharField(write_only=True) def create(self, validated_data): user = User.objects.create(username=validated_data["username"]) user.set_password(validated_data["password"]) #암호화된 비번 저장 user.save() return user class Meta: model = User fields = ["pk", "username", "password"]from django.urls import path from . import views urlpatterns = [ path('signup/', views.SignupView.as_view(), name='login'), ] from django.contrib.auth import get_user_model from django.shortcuts import render from rest_framework.permissions import AllowAny from rest_framework.generics import CreateAPIView from .serializers import SignupSerializer #회원가입 뷰 #createapiview 이므로 get 메소드 허용X class SignupView(CreateAPIView): model = get_user_model() serializer_class = SignupSerializer Permission_classes = [ AllowAny,#실제로 회원가입할 때는 로그인은 되면 안됨 ] 혹시 뭐가 원인일지 추측이라도 해주시면 감사하겠습니다..혹시 버전문제일 수도 있을까요? 현재 장고는 3.2 리액트는 18이긴합니다
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
선생님 강의를 보면서 플젝을 진행중입니다
현재 선생님 강의를 보며 플젝을 진행하고 있는 와중에 한가지 질문이 생겼습니다!백엔드(장고)단에서 사진 여러개를 올리면 그걸 기반으로 저희가 만든 딥러닝 모델이 학습해서 학습결과를 보여주는 웹서비스를 기획중입니다. 만약 api응답이 필요없는, 예를 들면 가장 첫 페이지에 그림하나 딱 들어가있고 우측상단에 로그인/회원가입 버튼만 있는 상태인 경우는 백엔드 단에서 제공해야하는 api라던가 이런게 없으니까 해당 페이지는 react에서만 처리하면 되는건가요?그렇다면 해당 페이지에는 urls.py 등에서 설정을 해줄 필요가 없는걸까요?웹페이지 구조에 따라 달라질 수 있지만, 이번에는 프론트와 백엔드를 완전히 분리해서 진행하다보니 이런부분이 헷갈립니다
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
템플릿태그 load static 의미/동작방식
위 코드에서 {% ~ %} 템플릿태그로load static 이라는게단순히 문자그대로 static을 로드 한다 (임포트구문 처럼)라고는 알겠는데static이라는게 어떤 걸(경로?) 뜻하는지 궁금합니다.settings.py 의 STATIC_URL, STATICFILES_DIRS, STATIC_ROOT 전부를 뜻하는건지? 아니면 STATICFILES_DIRS만 뜻하는건지? 궁금합니다.그럼 각 장고앱 하위 static 경로들은 load를 안해줘도 되는건지 궁금하네요..
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Static Files Finders 슬라이드 질문
이 슬라이드에서 형광색 부분(아래)이 문자 그대로 무슨말인지 모르겠습니다.형광색부분 = "디렉토리 목록에서 지정 상대경로를 가지는 static 파일 찾기"Q.무슨말인지 모르겠는 부분 = 지정 상대경로를 가지는 static 파일Appendix.아래 [그림1] 는 제가 이해한 내용을 정리한 내용 입니다.정리한 내용처럼 해당 내용을 전반적으로 이해했지만위 질문의 "지정 상대경로를 가지는 static 파일" 이 정확히 무슨말인지 모르겠습니다. [그림1 Static Files Finders 동작방식 이해한 내용]
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
settings.STATICFILES_DIRS 설정 설명 중 질문이 있습니다
위 이미지(강의슬라이드) 형광펜 칠해져 있는게 어떤 의미인지 궁금해서 질문 드립니다.어쨌든 장고의 File System Loader 라는게 있는데그놈에 의해 참조된다(?) 라는 말이무슨말인지 궁금합니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
강의 3:15 질문
[강의 3:15 에서]TEMPLATES.DIRS 설정에 리스트값이 적혀져있는데강의를 이전까지 다 보았는데,저는 현재 없습니다... (제가 강의내용과 다르게 설정을 누락했나봅니다..)혹시 이와 관련된 강의가 어떤 강의인지 알려주실수 있을까요..?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
[Minor] 부트스트랩 CSS/Jquery/JS/테마적용 후 테이블영역 꽉 안차는 문제
Minor 한 이슈 질문드립니다. (부트스트랩CSS 라서요..ㅎㅎ)우선 해결은 했으나, 왜 해결됬는지 이해가 안되서질문내용: 테이블부분이 꽉차지 않은 이슈댓글내용에 적어놨습니다. layout.html 에 부트스트랩 워치 테마적용(CSS) 부분 수강중 입니다.위 이미지 처럼 꽉찬 화면이 저만 안되는데(???) 이유를 모르겠습니다. (해당화면 스크롤은 질문캡쳐용으로 잠시 zoom out 한 상태입니다.)서버재시작브라우저 강제 새로고침강사님과 동일한 테마(simplex) 도 안되고 있습니다.<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootswatch@4.5.2/dist/sketchy/bootstrap.min.css" integrity="sha384-RxqHG2ilm4r6aFRpGmBbGTjsqwfqHOKy1ArsMhHusnRO47jcGqpIQqlQK/kmGy9R" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script>layout.html 전체코드<!doctype html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>{% block title %}{% endblock title %}</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootswatch@4.5.2/dist/sketchy/bootstrap.min.css" integrity="sha384-RxqHG2ilm4r6aFRpGmBbGTjsqwfqHOKy1ArsMhHusnRO47jcGqpIQqlQK/kmGy9R" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script> <style> body{ padding-top: 5rem; } </style> </head> <body> <!-- begin::header --> <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top"> <a class="navbar-brand" href="#">Navbar</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarsExampleDefault"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="#">Link</a> </li> <li class="nav-item"> <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a> <div class="dropdown-menu" aria-labelledby="dropdown01"> <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> <a class="dropdown-item" href="#">Something else here</a> </div> </li> </ul> <form class="form-inline my-2 my-lg-0"> <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search"> <button class="btn btn-secondary my-2 my-sm-0" type="submit">Search</button> </form> </div> </nav> <!-- end::header --> {% block content %} {% endblock content %} </body> </html> post_list.html 전체코드{% extends "instagram/layout.html" %} {% load bootstrap4 %} {% block title %} Instagram / Post List {% endblock title %} {% block content %} <form action="" method="get"> <label> <input type="text" name="q" value="{{ q }}" placeholder="검색할 게시물의 message를 입력하세요"> </label> <input type="submit" value="검색 "> </form> {% if post_list %} <table class="table table-bordered table-hover table-striped table-responsive"> <tbody> {% for post in post_list %} <tr> <td>{{ post.pk }}</td> <td> {% if post.photo %} <img src="{{ post.photo.url }}" width="100px" height="100px" alt="{{ post.photo }}"> <br> (post.photo값: {{ post.photo }}) {% else %} No photo <br> (post.photo값: {{ post.photo }}) {% endif %} </td> <td> <!-- 장고 스타일(URL Reverse / get_absolute_url 메서드 이용) --> <a href="{{ post.get_absolute_url }}"> {{ post.message }} </a> <!-- 장고 스타일(URL Reverse 이용) --> {# <a href="{% url 'instagram:post_detail' post.pk %}">#} {# {{ post.message }}#} {# </a>#} <!-- 기존 --> {# <a href="/instagram/{{ post.pk }}/">#} {# {{ post.message }}#} {# </a>#} </td> </tr> {% endfor %} </tbody> </table> {% else %} <p>검색 결과가 없습니다.</p> {% endif %} {% if is_paginated %} {% bootstrap_pagination page_obj size="large" justify_content="center" %} <h2>paginator</h2> <div> {{ paginator }} </div> <h2>page_obj</h2> <div> {{ page_obj }} </div> <h2>is_paginated</h2> <div> {{ is_paginated }} </div> <h2>object_list</h2> <div> {{ object_list }} </div> <h2>post_list</h2> <div> {{ post_list }} </div> {% endif %} {% endblock content %}
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
파이썬 코드를 저장했을때 자동으로 서버가 재실행 되지 않습니다..
settings 를 common, dev, prod 3개로 만들고 부터 안되는데 무슨 문제일까요
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
BaseListView 클래스의 get 메서드는 언제/누가 호출하나요?
BaseListView 클래스 get 메서드 로직은 대체로 이해가 가는데 ListView클래스 기반 뷰 내부로직에서 어디에서 이 get메서드를 호출하는지 궁금합니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
페이징 처리 매개변수와 페이징처리과정 의문
Q1, Q2, Q3 이 있는데 Q1은 해결한것 같습니다(?) Q1강의 슬라이드에서필기 해주실때paginate_by=10 넘겨줄때 page=3 이라고 하셨는데paginate_by = ~개씩 보기page = 몇 페이지에서의 (현재 보는 페이지)라는 의미라면page 라는 이름의 매개변수까지 전달해주면 혹시 어디로 전달되나요? page라는 값은 쿼리할때도 응답받으로때도 계속 코드에서 기억하고 있어야 할 것 같은데 안보이고있네요..ㅎㅎ살펴보고있는데 page라는 변수는 클래스변수에도 없고 위 그림의 paginate_queryset 메서드의 인자로도 없고 그래서요 (물론 리턴값으로는 나오지만..)자문자답아 paginate_queryset 메서드 상단에 있었네요.(그전 DetailView에서 pk, slug 식별자가 디폴트였던것처럼) page 매개변수도 page_kwargs 클래스변수로 있고 그 값을 룩업 해서 self.kwargs 라는 딕셔너리 클래스변수에서 먼저 뒤지고없다면 아예 HttpRequest 객체에서 뒤지고그래도 없다면 1(첫페이지) 로 하드코딩해서 초기화 하네요 Q2그리고 pagination_queryset 메서드의 page_size 매개변수는 어떤 의미 인가요? 보니깐 get_paginate_by(self, queryset) 로 그냥 단순 paginate_by (몇개씩 볼껀지) 클래스변수를 그대로 getter 해오고 page_size 라는 get_context_data메서드 내 지역변수로 쓰고 버리던데...? 궁금합니다자문자답-> 조회한 전체 qs 수 군요~ Q3get_paginate_by 메서드에 왜 QuerySet 객체가 있을까요? 분명히 이렇게 설계한 이유가 있을꺼 같은데?왜냐면 get_context_data 메서드 안에서get_paginate_by(queryset: QuerySet) 호출한번하는데사실상 API는 get_paginate_by 메서드는 단순하게 클래스변수인 self.paginate_by 를 리턴해주고 있어서 여쭤봅니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
DetailView 의 템플릿처리(기본 목적)를 확장 하는 방법
View 챕터 수강 중입니다.View 의 CBV 부터는 뭔가 새롭고, 헤비하고 그만큼 공부시간도 늘어나고 있네요.이번 수업에서 중간에 선생님께서 아래 이미지 처럼 말씀하셨는데,질문아래 이미지 처럼 CVB API:DetailView 기본목적인 템플릿 처리가 아니라 아래 이미지 처럼 다양한 응답 포맷으로 확장하려면 어디를 어떻게 어떻게 확장 해야하나요?그리고 템플릿처리가 아닌 다른처리를 위해 Bulit-in API를 확장하는 방식이 자주 쓰이는 방식으로 잘 익혀놔야하는건지? 궁금하고요또 향후 뒤쪽 수업에 더 자세히 배울수 있는내용인건지 궁금합니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
CBV DetailView pk_url_kwarg 클래스변수 재정의
만약 urls.py 에서 URL Cpatured Value에 uid라는 식별자로 받았으면CBV DetailView 클래스의 pk_url_kwarg 클래스변수를 당연히 재정의 해줘야하는데어떤식으로 하는지 궁금합니다.아예 DetailView 클래스를 상속받아서 확장할때클래스변수 model 이든 pk_url_kwargs 든 재정의 한다음확장한 블라블라DetailView클래스 로 .as_view() 메서드 호출하면 될꺼같은건 알겠는데커스텀클래스 만들지 않고 하는 방식이 있다면(?) 궁금합니다!그리고 보통 실무적으로/관례적으로 어떤방식으로 쓰이고 강사님은 어떨때 어떤방법을 선호 하시는지 궁금하고 그 이유도 궁금합니다.(100% 이방법이 옳다 이방법이 많이 쓰인다 라는게 없다는건 알지만 장고가 아직은 낯설어서 best practice를 알고싶어서 그렇습니다) 만약 아래 강의 슬라이드 코드를 기반으로 살펴보면아래코드처럼 as_view 메서드 호출 할 때 인자로 넘겨주면 되는건가요?그러면 as_view 메서드 부터 이후 로직에서 알아서 내부적으로 클래스변수에 setter 해주나요? (그런 로직이 있다면)post_detail1 = DetailView.as_view(mode=Post, pk_url_kwarg='uid')