수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
model 설계, 데이터 저장
안녕하세요. 장고를 활용하여 웹사이트를 만들고 있는 중입니다.제가 지금 구현 중인 부분은 식단표 페이지로, 모델 단과 데이터 입력 단에서 막혀서 질문을 드립니다.우선, "menu_list.html" 화면을 아래와 같이 띄우려고 합니다. 이를 위해 모델 구현부터 질문드리겠습니다.첫번째 질문은 모델 구현에 대한 부분입니다. 최초 모델보다 수정 모델이 더 바람직한 방향인지 궁금합니다.#최초 model class Menu(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='author_menu') date = models.DateField(unique=True) breakfast = models.TextField() lunch = models.TextField() dinner = models.TextField() voter = models.ManyToManyField(User, related_name='voter_menu') def __str__(self): return self.breakfast#수정 model TYPE_CHOICES = ( ("아침", "아침"), ("브런치", "브런치"), ("점심", "점심"), ("저녁", "저녁"), ) class Dish(models.Model): dish = models.CharField(max_length=10) voter = models.ManyToManyField(User) def __str__(self): return self.dish class Menu(models.Model): type = models.CharField(choices=TYPE_CHOICES, max_length=3) date = models.DateField() dish = models.ManyToManyField(Dish) 최초 모델은 아무런 고민 없이 TextField로 식사 정보를 모두 받아왔으나 성능 측면에서 비효율적일 수 있다는 생각이 들어 고민을 하고 수정하였습니다. 수정된 설계가 더 바람직한 것인지 의문이 들어 질문드립니다. 더 바람직한 방향이 있다면 가르쳐주세요!!두번째 질문은, 수정된 model을 통해 값을 받아오는 것에 대해 질문드리고 싶습니다.#forms.py TYPE_CHOICES = ( ("아침", "아침"), ("브런치", "브런치"), ("점심", "점심"), ("저녁", "저녁"), ) class DishMenuForm(forms.Form): date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}, format="%Y-%M-%d"),label='date') type = forms.ChoiceField(choices=TYPE_CHOICES, label='type') dish = forms.CharField(label='dish', max_length=10) def save(self, commit=True): menu = Menu(**self.cleaned_data) if commit: menu.save() return menu#menu_form.html {% extends 'layout.html' %} {% load static %} {% block content %} <script src ="{% static 'js/menu.js' %}"></script> <div class="container"> <h5 class="my-3 border-bottom pb-2">메뉴 입력하기</h5> <form method="post"> {% csrf_token %} <div id ="dishMenuForm"> <div class="mb-3"> <label for="date" class="form-label">날짜</label> <input type="date" class="form-control" name="date" id="date" width='50px'> </div> <div class="mb-3"> <label for="breakfast" class="form-label">아침</label> <select name='type' id ='type' class='form-control'> <option value="">시간대를 정해주세요.</option> <option value='아침'>아침</option> <option value='점심'>점심</option> <option value='저녁'>저녁</option> <option value='브런치'>브런치</option> </select> </div> <div class="mb-3"> <label for="dish" class="form-label">요리</label> <textarea class="form-control" name="dish[]" id="dish" rows="1"></textarea> </div> <div class="mb-3"> <label for="dish" class="form-label">요리</label> <textarea class="form-control" name="dish[]" id="dish" rows="1"></textarea> </div> <div class="mb-3"> <label for="dish" class="form-label">요리</label> <textarea class="form-control" name="dish[]" id="dish" rows="1"></textarea> </div> </div> <input type='submit' value='입력' /> </form> </div> {% endblock %}사진처럼 form.html 화면에서 dish의 form들을 동적으로 추가하여 저장하고 싶습니다.템플릿 파일에서 dish의 name을 배열로 받아와 view 단에서 반복문을 사용하여 데이터를 저장할 수 있는지 궁금합니다. 성능을 위해 매번 데이터를 저장할때마다 dish 테이블에 이미 값이 있는지를 확인하고 저장해야하는 것인지, 데이터를 저장할때마다 분기를 돈다면 성능에 더 악영향을 미칠 것 같은데 어떤 방향으로 개발해야 하는지 궁금합니다. 이런 식의 방향이 맞는지 아니면 더 잘 쓰이는 방법이 있는지 알려주세요..질문이 길고 장황하지만 답변 부탁드립니다.
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
slug 추가시 attribute error
선생님, 안녕하세요.장고 입문해서, 강의를 잘 듣고 있습니다.강의 들으면서 아래와 같은 문제가 생겨서 문의 드립니다.조언 부탁드립니다. 1. 현재코드다음과 같이 작성하면 문제가 없습니다from django.db import models from django.conf import settings # Create your models here. class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) message = models.TextField() created_at = models.DateTimeField(auto_now_add=True, null=True) updated_at = models.DateTimeField(auto_now=True, null=True) title = models.CharField(max_length=100, db_index=True) # slug = models.SlugField(allow_unicode=True, db_column=True, null=True) #제목과 숫자로 이루어진 url 생성시 사용 desc = models.TextField(blank=True) # 빈문자열도 허용 image = models.ImageField(blank=True) comment_count = models.PositiveIntegerField(default=0) # 양수만 처리 tag_set = models.ManyToManyField('Tag') # 하나의 포스트는 다수의 태그 is_publish = models.BooleanField(default=False) 2. 문제 상황 재현slug 주석해제하고 DB 마이그레이션 문제가 생깁니다.from django.db import models from django.conf import settings # Create your models here. class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) message = models.TextField() created_at = models.DateTimeField(auto_now_add=True, null=True) updated_at = models.DateTimeField(auto_now=True, null=True) title = models.CharField(max_length=100, db_index=True) slug = models.SlugField(allow_unicode=True, db_column=True, null=True) #제목과 숫자로 이루어진 url 생성시 사용 desc = models.TextField(blank=True) # 빈문자열도 허용 image = models.ImageField(blank=True) comment_count = models.PositiveIntegerField(default=0) # 양수만 처리 tag_set = models.ManyToManyField('Tag') # 하나의 포스트는 다수의 태그 is_publish = models.BooleanField(default=False) 3. 에러코드그런데 slug 필드 주석 해제하고 마이그레이션 하면 다음과 같은 에러가 생깁니다.(venv) C:\Users\kwanw\Desktop\askcompany>python manage.py migrate instagram Operations to perform: Apply all migrations: instagram Running migrations: Applying instagram.0006_post_slug...Traceback (most recent call last): File "manage.py", line 21, in <module> main() File "manage.py", line 17, in main execute_from_command_line(sys.argv) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line utility.execute() File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\core\management\__init__.py", line 395, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\core\management\base.py", line 328, in run_from_argv self.execute(*args, **cmd_options) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\core\management\base.py", line 369, in execute output = self.handle(*args, **options) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\core\management\base.py", line 83, in wrapped res = handle_func(*args, **kwargs) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\core\management\commands\migrate.py", line 233, in handle fake_initial=fake_initial, File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\migrations\executor.py", line 245, in apply_migration state = migration.apply(state, schema_editor) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\migrations\migration.py", line 124, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\migrations\operations\fields.py", line 112, in database_forwards field, File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\backends\sqlite3\schema.py", line 328, in add_field self._remake_table(model, create_field=field) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\backends\sqlite3\schema.py", line 280, in _remake_table self.create_model(new_model) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\backends\base\schema.py", line 322, in create_model sql, params = self.table_sql(model) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\backends\base\schema.py", line 184, in table_sql self.quote_name(field.column), File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\backends\base\schema.py", line 145, in quote_name return self.connection.ops.quote_name(name) File "C:\Users\kwanw\Desktop\askcompany\venv\lib\site-packages\django\db\backends\sqlite3\operations.py", line 164, in quote_name if name.startswith('"') and name.endswith('"'): AttributeError: 'bool' object has no attribute 'startswith' 4. 관련 마이그레이션 파일 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('instagram', '0005_profile'), ] operations = [ migrations.AddField( model_name='post', name='slug', field=models.SlugField(allow_unicode=True, db_column=True, null=True), ), ]
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Route관련질의
안녕하세요 react router-dom 실습 중 문의드립니다수업중 src의 index에서 pages의 index는 라우트가되는데pages의 index에서 accounts의 index는 라우트가안되네요..http://localhost:3000/accounts/signup 의 주소로 들어가고싶은데틀린부분을 못찾겠고 기존 질의를 봐도 해결이 잘안되서 질문드립니다pages의 index.js 코드는 아래와같습니다import React from "react"; import AppLayout from "components/AppLayout"; import { //BrowserRouter as Router, //Switch, Route, Routes } from "react-router-dom"; import About from "./About"; import Home from "./Home"; import AccountsRoutes from "./accounts"; function Root() { return ( <AppLayout> <Routes> <Route exact path ="/" element={<Home/>} /> <Route exact path ="/about" element={<About/>} /> <Route path="/accounts" element={<AccountsRoutes/>} /> </Routes> </AppLayout> ); } export default Root;pages/accounts 의 index.js 코드는 아래와같습니다import React from "react"; import { Route, Routes} from "react-router-dom"; import Profile from "./Profile"; import Login from "./Login"; import Signup from "./Signup"; function AccountsRoutes({match}){ return ( <> <Routes> <Route exact path={match.url+ "/profile"} element={<Profile/>} /> <Route exact path={match.url+ "/login"} element={<Login/>} /> <Route exact path={match.url+ "/signup"} element={<Signup/>} /> </Routes> </> ); } export default AccountsRoutes;
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
애저 배포 에러 질문드립니다.
CSRF verification failed. Request aborted.More information is available with DEBUG=True.도커컨테이너로 업로드 후 장고 admin Login 하면 csrf가 뜨는데 배포전 로컬 서버에서는 잘돼었는데왜 에러가 뜨는지 궁굼합니다그리고 애저 버전이 달라서 그런지 컨테이너 셋팅창을 찾을수 없어서 app server 삭제하고 다시 도커 업로드를 했습니다. 이 기능이 어느 페이지로 변경됐는지 알고싶습니다
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
혹시 특정 라이브러리의 특정 버전을 다운받을 수 있는 방법이 뭐가있을까요?
장고라던가 다른 부분들은 끝에 @3.0.0 이런식으로 특정 버전을 받을 수 있었는데antd는 이렇게 하니까 안되더라구요...버전이 바껴서 메뉴창이 다르게 나옵니다 ㅠ혹시 antd를 특정버전을 다운받으려면 어떻게 해야하는지 알 수 있을까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요 선생님 서버 scale out 에 대해 질문드리려합니다.
안녕하세요 장고 클라우드 서버로 AWS를 쓰면서 지속적으로 하고 싶었던 기술이 CI CD + AutoScaling을 동시에 도입을 하고 싶었습니다. 기존에 github action과 aws ec2로 자동 배포는 어찌어찌해서 찾아서 해봤는데 결국에는 하나의 서버 인스턴스로만 돌아가기 때문에 나중에 부하 걱정이 되더라고요 그래서 제가 사용하고 싶은 조합은 AWS Autoscaling + AWS Codedeploy + AWS EC2 + AWS Loadbalance + GithubAction을 통해 github에 코드가 push되면 loadbalance 타겟 그룹된 전 인스턴스가 전부 코드 업데이트 되어 배포가 되는것을 생각을 해봤는데, 위 조합으로 제가 생각한 내용이 가능할까요? 제가 codedeploy는 한번도 써보지 않아서 사실 감이 잘안오는데, codedeploy는 github에 코드가 push되지 않더라도 자동으로 autoscaling에서 인스턴스를 생성하면 깃허브 코드가 적용된 서버를 생성하기 위해서 필요할것 같더라고요. 위는 결국 서버를 유연하게 관리하기 위한 제가 생각한 조합이구 제 생각한 위 아키텍처에 문제가 있을까요?(사실 일단 위 아키텍처 직접 구현이 어려울것 같아서 먼저 전문가이신 선생님께 확인을 받고 찾아보려합니다.)보통 기업에서는 어떻게 서버 로드를 유연하게 관리하나요?? 클라우드 관점에서용!(다양한 자료나 서비스 다 좋습니다 !!)쿠버네티스나, ECR, ECS 클러스터를 활용하나요? 궁금적으로 제가 현재 원하는 방식은 비교적 접근성 좋고(쉽고 ㅠㅠ) 혼자서 어느 정도 컨트롤 할만한 서버 아키텍처 구성을 원해서 질문드립니다!! (쿠버네티스는 어렵다고 들어서 선생님강의에서도 ㅠㅠ어렵다고 말씀하시고 ㅎㅎ; 위 방법이 가능성이 있는지 파악하고 나중에 차근차근공부하려합니다)
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
하나의 모델은 단 하나의 어드민에만 등록될 수 있나요?
안녕하세요 선생님, 수업을 들으며 개인 프로젝트를 수행하는 동안 어려움이 있어 질문드립니다. 구글링을 해도 별로 나오는게 없네요ㅜㅜ 이미 어드민에 한번 등록이 된 모델은, 다른 어드민에 또 등록이 불가능한지, 가능하다면 그 방법이 무엇인지 궁금합니다. 감사합니다!
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
context에 있는 데이터가 html로 넘어가지 않습니다.
지금 context라는 변수를 첫 번째 if문에 한번 두 번째 if문에 한번 총 두 번 선언합니다.각 if문 안에 있는 동작이 끝나는 순간 함수가 끝나기 때문에 서로 영향을 주지 않습니다.그런데, 첫 번째 context에 있는 변수들은 html 페이지에 잘 뜨는데 두 번째 context에 있는 변수들이 html로 넘어가지 않습니다.예를 들어, 두 번째 context에 있는 mape_val이 html에서 출력 되지 않습니다.데코레이터 코드는 참고용으로 넣어두었습니다. views.py 부터 봐주시면 감사하겠습니다. <views.py> @navsDecorator @viewDecorator def csv_forecast(req, context): username = req.user if req.method == 'POST' and req.FILES.get('csvfile'): uploaded_file = req.FILES.get('csvfile') p_data = pd.read_csv(uploaded_file) p_data.reset_index(drop=True, inplace=True) columns_list = list(p_data.columns) columns_list = [column.lower() for column in columns_list] p_data.columns = columns_list # 디렉토리 없는 경우 생성해주는 python 내장 모듈 os.makedirs('media/csv', exist_ok=True) p_data.to_csv(f'media/csv/{username}.csv', index=False) start_date = p_data.loc[0, 'date'] len_date = int(len(p_data)*0.8) end_date = p_data.loc[len_date, 'date'] datas = [] for i in range(1, len(columns_list)): datas.append(columns_list[i]) MODEL_LIST = ['ARIMA', 'EMA5', 'LSTM'] context = {'datas' : datas, 'd' : p_data, 'columns_list' : columns_list, 'MODEL_LIST' : MODEL_LIST, 'start_date' : start_date, 'end_date' : end_date} # req.POST.get('')과 req.POST['']의 차이는 get을 적었을때는 키값이 존재하지 않는 경우 None값을 반환함 if req.POST.get('sendModel') and req.POST.get('sendPdata') and req.POST.get('sendRdata'): # js에서 ajax로 보낸 dict의 value값 send_pdata = req.POST.get('sendPdata') send_rdata = req.POST.get('sendRdata') send_model = req.POST.get('sendModel') cleaned_pdata = re.split(r'[\[\],"]', send_pdata) cleaned_rdata = re.split(r'[\[\],"]', send_rdata) cleaned_model = re.split(r'[\[\],"]', send_model) selected_pdata = [i for i in cleaned_pdata if len(i) >= 1] selected_rdata = [i for i in cleaned_rdata if len(i) >= 1] selected_model = [i for i in cleaned_model if len(i) >= 1] csv_data = pd.read_csv(f'media/csv/{username}.csv') mape_val, y_pred, y_test, test_date = model_main(csv_data, selected_pdata,selected_rdata, selected_model) print(mape_val) # print(type(y_pred)) # print(type(y_test)) # print(type(test_date)) fs = FileSystemStorage(location=f'media/csv/') fs.delete(f'{username}.csv') context = {'mape_val': mape_val,'y_pred' : y_pred, 'y_test' : y_test, 'test_date' : test_date } return req, context<csv_forecast.html> <body> {% include "nav.html" %} <div class="container"> <!-- css 깨지고 검색안되는거 forecast_scripts 문제였음 / 그 외 materialAutoComplete 추가 / views.py name get으로 가져오는 것 수정 --> <div class="card"> <div class="card-body"> {% if datas %} <h3>데이터와 모델 선택 후 하단에 저장버튼을 클릭해주세요.</h3> {% endif %} <br> <div class="sub-section" style="overflow: hidden;"> <form method="post" enctype="multipart/form-data"> <!-- form에서 받는 모든 정보를 모두 인코딩하지는 않는다는 뜻으로 이 부분을 설정하지 않으면 form에서 filename 정도만 받아오게 된다. 이 방식은 파일이나 이미지를 서버로 전송할 때 주로 사용한다. --> {% csrf_token %} <input type="file" name="csvfile" accept=".csv"> {% if datas %} <button type="submit" class="btn btn-primary">CSV 파일 업로드 완료</button> {% else %} <button type="submit" class="btn btn-secondary">CSV 파일 업로드 </button> {% endif %} </form> <br> <h3>학습구간 : {{start_date}} ~ {{end_date}}</h3> </div> </div> </div> <div class="col"> <h3>데이터 선택</h3> </div> <div class="card" > <div style="height: 400px; overflow: overlay"> <div class="card-body"> <!-- <button type="button" class="btn btn-primary" id="select_data">선택 데이터 저장</button> --> <div class="sub-section" style="overflow: hidden;"> <div class="sub-section01"> <table class="table table-hover table-centered table-nowrap" id="table_data"> <thead class="thead-dark"> <tr> <th></th> <th>예측 데이터</th> <th>근거 데이터</th> <th>딜레이</th> </tr> </thead> <tbody> {% for data in datas %} <tr> <td>{{data}}</td> <td><input type="radio" name ="pdata_checkbox"></td> <td><input type="checkbox" name ="rdata_checkbox"></td> <td>1</td> </tr> {% endfor %} </tbody> </table> </div> <div id="checked_data"></div> </div> </div> </div> </div> <div class="col"> <h3>모델 선택</h3> </div> <div class="card" > <div class="card-body"> <div class="sub-section" style="overflow: hidden;"> <div class="sub-section01"> <table class="table table-hover table-centered table-nowrap" id="table_model"> <thead class="thead-dark"> <tr> <th>선택</th> <th>예측 모델</th> </tr> </thead> <tbody> {% for model in MODEL_LIST %} <tr> <td><input type="radio" name ="model_checkbox"></td> <td>{{model}}</td> </tr> {% endfor %} </tbody> </table> </div> {% if datas %} <button type="button" class="btn btn-primary" id="select_model">선택 데이터와 모델 저장</button> {% endif %} <div id="checked_model"></div> </div> </div> </div> <div class="col"> <h3>예측 결과</h3> </div> <div class="card"> <div class="card-body"> <div class="sub-section" style="overflow: hidden;"> <h3>{{mape_val}}</h3> </div> </div> </div> </div> <decorator.py> def viewDecorator(func): def wrapper(*args, **kwargs): req = args[0] context = {key: val for key, val in req.GET.dict().items()} kwargs['context'] = context req, context = func(*args, **kwargs) return TemplateResponse(req, f'{func.__name__}.html', context=context) return wrapper def navsDecorator(function): @functools.wraps(function) def wrapper(*args, **kwargs): template = function(*args, **kwargs) try: navs = [ # getNav('main', '퀀트평가'), # getNav('getGraphByCode', '시즈널리티'), getNav('csv_forecast', '원자재 예측'), # getNav('house', '부동산 예측'), # getNav('similarData', '유사차트'), ] template.context_data['navs'] = navs return template.render() except Exception as e: print(e) return template return wrapper
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
21:27 JSONRender 설명부분 질문입니다!
21:27 에서 설명하시는 JSONRender가 github 코드 원문에서는 JSONEncoder에 해당하는 것 같은데.. 무엇이 맞는걸까요?https://github.com/encode/django-rest-framework/blob/354ae73ffb37494016f377527a52ea51ed4c29f7/rest_framework/utils/encoders.py#L17
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
axios를 사용하는데 async-await 쓴 부분이 이해가 안갑니다
Axios가 promise api 를 활용하는 비동기 라이브러리라고 알고있는데, 14분쯤에서 async - await로 비동기를 한번 더 써주신부분이 잘 이해가 안갑니다. 둘 다 비동기인데 저렇게하면 비동기 선언이 중복되는 것 같은데 이 경우 문제는 없을까요?리액트를 이렇게 깊이 배운적은 없어서 좀 헤매고 있습니다 ㅠㅠ
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
http 명령어가 듣질 않는데 왜이런건가요ㅠ
파워셸에서도 해보고 cmd창에서도 해봤는데 계속 이렇게 뜨네요...yarn이나 npm은 먹히는데 이것만 이런건 구글링해봐도 나오질 않아서 질문드려봅니다
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
리액트 axios 데이터 받아와서 랜더링 질문드립니다
useState로 postList라는 이름의 state를 선언한 후 axios를 통해 얻은 결과를 setPostList를 통해 postList에 업데이트 시키고 . 그러면 state가 변경되었으므로 새롭게 렌더링이 되고 -> return이 다시 불리며 -> 변경된 값을 화면에 업데이트 시켜줄 주는걸로 알고있는데 function PostList() { const [postList, setPostList] = useState([]); //const headers = { Authorization: `JWT ${jwtToken}` }; const [{ data: originPostList, loading, error }, refetch] = useAxios({ url: "/api/posts/", //headers }); useEffect(() => { setPostList(originPostList); console.log("mouted"); }, [originPostList]); console.log("loaded respaonse2 :", postList); return ( <div> {postList && postList['results'].length === 0 && ( <Alert type="warning" message="포스팅이 없습니다. :-(" /> )} {postList && postList['results'].map(post => ( <Post post={post} key={post.id} /> ))} </div> ); } export default PostList;loaded respaonse2 : []loaded respaonse2 : []loaded respaonse2 : []loaded respaonse2 : []콘솔창에 이렇게 4번이 뜹니다어쩔때는 postList에 데이터가 들어가서 나오는데useEffect에서 셋 시켜서 데이터가 들어갔는데도 빈 데이터가 나오는지 궁굼합니다.return 문에 postList 가져오는 구문을 없애면 제대로 들어가는데 예외처리를 했는데도 map 찾을수 없다는 에러가 뜹니다그리고 Simple jwt 토큰 인증을 쓰지 않으면 데이터는 잘가져옵니다
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
불변성의 개념이 잘 이해가 가지 않습니다.
강의 2분 30초 쯤을 듣는데 #1과 #2가 본질적으로 무슨 차이인지 잘 이해가 가지 않습니다결국엔 둘다 상태값을 오렌지,딸기,바나나로 바꿔버리는 것 같은데..#1은 불변성을 지키지 못하고 #2는 불변성을 지킨다는건 어떻게 이해해야하나요 ㅠㅠ구글링해보니 어떤 값을 직접적으로 변경하지 않고 새로운 값을 만들어 낸다고 하는데..#1은 배열을 완전히 지웠다가 새로 만드는거고 #2는 지우지않고 딸기 부분만 끼워넣는 차이라고 보면 될까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
djnago admin 기능 질문...
안녕하세요. 선생님django의 경우 permission이 엄청나다고 생각되는데요. 이 permission을 어떤 유저에게 언제 무엇을 주었는지기록을 남기고싶은데 어떻게 해야될까요?현재 패키지 simple_history 등을 사용해봤는데퍼미션만 기록을 안하더라고요 하아. ㅠ 이런경우 github django에서 어떤 부분을 찾아봐야 힌트를 얻을 수 있을까요 ㅠㅠㅠ일주일해보다가 도저히 안되서 문의남겨봅니다. ㅠㅠㅠ
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
질문있습니다!
_postcard.html을 만들고 그대로 따라하고 나서부터갑자기 index.html 화면이 이상해져 질문남겼습니다! 코드들을 확인했을때 아무런 문제가 없는데 time_line_sidebar_user_follow.html 이 옆이 아닌 밑으로 가게됩니다 .. 혹시 이유가 있을까요? 아 추가로 저는 margin을 주어도 username이 프로필 사진과 떨어지지가 않는데 혹시 부트스트랩 version 5.x를 사용해서 그런건가요??
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요 manytomany field 에 대하여 질문드립니다!
안녕하세요 제목처럼 다대다 관계를 설정할 때 manytomany 필드를 사용하자나요?근데 JPA 같은 경우는 새로운 필드 매핑 추가가 안된다고 실무에서는 절대 manytomany 매핑을 사용하면 안된다고 하자나요 ㅎㅎ; 근데 장고는 manytomany 필드에 through를 통해서 중간테이블을 생성하고 컬럼을 추가할 수 있다곤 하지만, 결국 JPA 처럼 중간 테이블을 생성해야하는 거자나요 결국 그냥 실무적으로보면 처음 DB생성할때 manytomany 필드 사용할때 JPA처럼 처음부터 중간 테이블을 생성하는게 정석일까요?? 아니면 필요할 때만 through로 중간 테이블을 추가하나요?
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요 질문있어서 글 남기게 되었습니다..
강의 영상을 보며 똑같이 하였는데 이러한 오류가 발생하여 몇시간째 해결을 못하다 결국 글 남기게 되었습니다..혹시 무슨 오류인지 알 수 있을까요??저 부분에 무슨 문제가 있는건가요..??
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요 DRF 쿼리셋에 대하여 질문드립니다!!
안녕하세요 DRF 인스타그램을 만들다가 조금더 업그레이드를 하고 싶어서이런저런 기능을 추가하였는데요 추가를 하다보니 너무 많이 한 Viewset 에많은 조인을 걸려있어서 이부분이 차후 DB성능에 문제가 될 수 있을것 같아서 질문을드립니다! 위와 같이 한 포스트리스트에 댓글, 좋아요 유저셋, 이미지셋, 태그셋 등등 너무 많이 조인이 걸려있는데또 저기에 스크랩여부 추가하려고 해서,, 걱정이되네요....(지금이야 데이터양이 적고 유저가 테스트 1~2명 유저이기 때문에 빠르게 동작하지만, 만일 저게 배포가 되어서 많은 데이터가 쌓이고 여러 유저가 사용된다면 문제가 될 것처럼 보여서 질문드립니다 ㅠ) 즉 저렇게 많이 걸려있어도 문제가 없는지? (문제가 없다는 기준은 scale up이 된다면 데이터양에 상관없이 충분히 성능이 나오는지)아니면 저런 queryset 코드 자체가 잘못된건지 판단이 잘 서지 않네요 (실무 경험이 없다보니 )그래서 차라리 api호출을 두번 이상 하는게 나은지? (한페이지에 여러 정보를 표시하다보니 저렇게 됬네요 )아니면 다른 방법이 있는지,,,,?? 어떻게 하면 위의 viewset호출을 좀 더 실무적으로 효과적으로 api를 호출 할 수있을까요??
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
인스타그램 모델 추가하는데 이런오류가 뜹니다
어떻게하면될까요
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
질문있습니다 !
안녕하세요 선생님 강의 너무 잘보고있습니다!코드를 작성하던중 오류가 발생하여 질문드립니다!if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.MEDIA_ROOT)저는 settings.MEDIA_URL로 하니 오류가 발생하여STATIC_URL로 바꾸었더니 runserver가 잘 동작하였습니다 혹시 무슨 문제인지 알 수 있을까요?!