수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
로그인시 수퍼유저만 로그인이 됩니다.
아래와 같이 아이디와 비번을 만들었습니다만, 로그인을 하면 실패합니다.. 다만 슈퍼유저인 gimseung-gyu는 로그인이 됩니다... 대략 어느 부분이 문제인지 알면 그 부분 코드를 확인할텐데 감이 안옵니다... signup.js common.py accouts/urls.py 항상 감사드립니다!
- 해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Error at /Incorrect padding 오류가 나는데 어디가 잘못되었는지 혼자서 못찾겠어요 ㅠ
안녕하세요~~ 오류 내용 첨부하겠습니다. 어디에 오타가 있는걸까요?? ㅠㅠ 검색을 해도 안나와서 질문 올립니다. Environment: Request Method: GET Request URL: http://127.0.0.1:8000/ Django Version: 3.0.14 Python Version: 3.9.7 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'debug_toolbar', 'bootstrap4', 'accounts'] Installed Middleware: ['debug_toolbar.middleware.DebugToolbarMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 199, in _get_session return self._session_cache During handling of the above exception ('SessionStore' object has no attribute '_session_cache'), another exception occurred: File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\ProgramData\Anaconda3\lib\site-packages\debug_toolbar\middleware.py", line 67, in __call__ panel.generate_stats(request, response) File "C:\ProgramData\Anaconda3\lib\site-packages\debug_toolbar\panels\request.py", line 66, in generate_stats for k in sorted(request.session.keys()) File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 135, in keys return self._session.keys() File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 204, in _get_session self._session_cache = self.load() File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\db.py", line 44, in load return self.decode(s.session_data) if s else {} File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 110, in decode encoded_data = base64.b64decode(session_data.encode('ascii')) File "C:\ProgramData\Anaconda3\lib\base64.py", line 87, in b64decode return binascii.a2b_base64(s) Exception Type: Error at / Exception Value: Incorrect padding
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
아나콘다 개발환경 invaildArchiveError 오류
강사님 강의를 들으며 아나콘다 개발환경 구축을 하려고 시도를 해봤더니 invaildArchiveError 에러코드가 발생했습니다. conda create --name + 개발환경명 + python=3.7을 입력하셨는데 똑같이 따라 치니 반복적인 invaildArchiveError만 내뱉네요ㅠㅠ 구글링을 해서 따라해봐도 오류가 해결되지 않아 이렇게 문의를 드립니다 ㅠㅠ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
로그인 오류
강사님 잘 보고 있습니다 :) 제가 로그인을 구현하고나서 로그인 확인 버튼을 누르니 하단상태의 오류가 나타났습니다. request url 을 보니 accounts/profile 로 되어있던데, profile 파일이 저에겐 없습니다... 이때문에 생기는 오류일까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
장고를 배운후에
안녕하세요!! 제가 궁금한것이 있어서 질문합니다. 조금 강의내용과는 동떨어진 내용이지만.. 학교에서 웹을제작하고 데이터 저장 및 모니터링을 위한 클라우드 서버 구축을 해야한다고 하더라고요 이게 장고를 배운후에 장고와 관련해서 할수있는건가요? 아니면 저런 클라우드 서버구축은 장고와 일절 관련이 없나요? 제가 관련한 배경지식이 별로없어서.. 답변 부탁드립니다. 감사합니다!!!
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
회원가입시 에러메세지 관리 하는 부분에서 에러가 납니다... 도움 부탁드립니다..
리액트 기본 기능으로 회원가입 폼 만들기 17분 46초 에러메세지 js 코드 파이썬 시리얼라이저
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
sendgrid 환경변수
안녕하세요 강사님 혹시 sendgrid 환경변수는 어떻게 만드는 걸까요? 제가 강의 내용을 쭉 따라가다 send_mail("Hello Title","Hello Content","junwon1131@naver.com",["junho1131@naver.com"],fail_silently=False) 위와같이 장고쉘에서 이메일 보내기를 시도하였는데, 결과는 1이 나오지 않고 에러가 나왔습니다... common.py 도 이런식으로 잘해주었으나, 제가 환경변수 설정하는 법을 몰라서 결과가 안나오는듯합니다...
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
새 유저 회원가입 오류
강사님 안녕하세요! 제가 회원가입 폼을 작성하다 오류가 생겼습니다... 현재 이 상태까진 도달했습니다만, 정보입력후 제출버튼을 눌러도 화면이 바뀌지도 않고, admin 화면에도 \ 이처럼 초기 creatsuperuser 정보만 있을뿐 업데이트가 안됩니다... 이처럼 signup form 도 작성했고 다른 코드들도 작성했습니다.... 감사합니다
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
python manage.py makemigrations accounts 질문입니다..
안녕하세요 강사님 혹시 위와 같은 명령을 입력하면 아래와 같은 에러가 뜹니다.. empty module 이라고 하는데, 어디가 구글링을 해봐도 잘 나오지 않아 어쩔수 없이 질문하게 되었습니다... common.py 에도 accounts 를 추가를 하였고, urls.py 에도 이렇게 추가해 주었습니다...
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
vscode 이어서 질문입니다...
강사님 혹시 부트스트랩 버전을 동일하게 했음에도 이런식으로 출력이되는 이유는 무엇일까요 ? ㅠ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
vscode 질문입니다
혹시 bootstrap 버전이 다르면 다른방식으로 출력되나요? 제가 위와같이 코딩을 했는데 강사님과 결과가 다릅니다.. 제 결과는 이런식으로 나옵니다..
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
장고 질문입니다..
감사하게 듣고 있습니다 ㅎㅎ 혹시 강사님께서 터미널에 코딩하실때 자동완성 기능이 되는데 제가 하면 안되네요.. 맥이 아니라서 그런걸까요 ㅠ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
장고 vscode 질문입니다
제가 git intit git status 를 하고난뒤 결과가 Untracked files: (use "git add <file>..." to include in what will be committed) askcompany/templates/ requirments/common.txt 이런식으로 나오게 되었습니다.. templates 엔 강의 내용대로 layout.html 있는데, 왜 이런식으로 나오는 걸까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
drf의 업로드 업데이트 관련 여러가지 질문입니다
안녕하세요 강사님. 강사님 강의를 토대로 학습하며 개인적으로 진행하고있던 프로젝트에서 문제점이 발생하여 이렇게 질문드립니다. 현재 상황은 다음과 같은 모델이 존재하고, 리액트에서 formdata객체에 모든 데이터를 append해서 post요청을 통해 중첩된 시리얼라이저를 활용한 modelviewset에 create함수를 호출하는 형태로 코드를 작성했습니다. 1)최초에 portfolio 모델을 구성하고 관계를 설정할때, portfolioupload 모델은 유저가 동적으로 필드를 채워나가기 때문에 하나의 컬럼에 총 5가지 필드가 만들어지게 제작하게 되었습니다.(이미지, 텍스트, 비디오, 임베드, 그리드 등의 5가지 선택지가 있고 유저는 그중 한가지를 초이스 하여 필드를 채워나가는 형식/behance의 포트폴리오 업로드 형식을 벤치마킹하려고 노력했습니다) 그렇기 때문에 현재와 같은 portfolio 모델을 구성하게 되었는데, 보다 더 나은 방법이 있었을지 궁금합니다. 2)portfolio 모델과 같이 여러 가지 관계를 형성하고 있는 데이터를 불러와서 리액트에서 사용하려다 보니, 중첩된 시리얼라이저가 필수인것 같아 다음과 같은 시리얼라이저를 작성했습니다. 그러다 보니 query 수가 많아져서 요청이 길어지는 성능 이슈가 발생했습니다. 현재는 django auto prefetch라는 라이브러리를 통해 개선했지만, 저런 데이터구조를 불러올 때 더 좋은 방법이 있을지 궁금합니다. 3)create 함수를 구현할 때 중첩된 객체를 받아서 현재의 코드보다 조금 더 간결하게 구현해 보려고 했었습니다. 따라서 리액트에서 아래와 같은 함수를 통해 중첩된 object를 보내봤지만 drf에서 멀티미디어 콘텐츠를 읽어내지 못했습니다. 아마도 콘텐츠 타입이 aplication/json 때문일 거라 생각했기 때문에 parser를 바꿔보는 등 여러 가지 방법을 시도했고, 모든 게 다 실패해서 현재와 같이 formdata 객체에 모든 데이터를 append 해서 보내는 형태가 되었습니다. 이 과정에서 portfolio 모델에 post 요청을 보내는 데이터의 구조와 drf에서의 데이터 처리가 어떤 방향으로 가는 게 지금보다 더 좋은 생각이었는지, 혹은 중첩된 object를 drf에서 받아서 처리할 방법이 있는지 궁금합니다. function formData(formData, filesIgnore = []) { let data = new FormData(); let files = filesIgnore; Object.entries(formData).forEach(([key, value]) => { if (typeof value === 'object' && !files.includes(key)) { data.append(key, JSON.stringify(value) || null); } else if (files.includes(key)) { data.append(key, value[0] || null); } else { data.append(key, value || null); } }) return data; } 4) portfolio 모델에서의 update를 구현하려고 보니, react에서 기존 데이터를 보여주기 위해 portfolioserializer를 통해 데이터를 불러오고 유저가 진입한 upload url에 pk가 포함되었는지를 검사해서 미리 input 필드에 데이터를 채워주는 형태의 방법을 사용했습니다. 이런 상황에서 불려와진 image는 storage의 url 형태였고, 유저가 이미지의 순서 변경이나 삭제를 할 경우 추적할 방법이 없어서 데이터의 변경이 안되는 이슈가 발생했습니다. 위 상황에서 저는 get 요청을 할 때 멀티미디어 콘텐츠가 불려와져야 할까? / put 요청으로 보내는 serializer에 해당 정보가 담겨있어야 할까? 라는 고민을 했고 첫 번째 방법은 방법 자체를 찾을 수 없었고, 두번 째 경우는 해당 정보를 어떻게 담아서 어떻게 처리할지 감이 잡히질 않아서 질문을 드리게 되었습니다. 사실 접근 방법이 이게 맞는지조차 의문이 들기에 보통 이런 혼합 데이터의 게시물 수정을 어떻게 구현하시는지 궁금합니다. 5) 업로드 시에 가로 1920px 이상의 이미지들의 resize가 필요해서 찾아보니 백엔드에서 업로드 시에 실행하는 게 보편적이라는 답변을 받았는데, 업로드의 속도를 줄이려면 업로드할 이미지들의 미리 보기 기능에 사용된 image onload 함수에 포함하는 게 더 좋은 방법이 아닌가에대해 고민하게 되었습니다. 어떤 접근 방법이 더 나은 방향인지 궁금합니다. 6)해당 프로젝트는 강의에서 설명 해주신 azure를 통해 배포 / 테스트 중입니다. 포트폴리오 같은 데이터를 업로드할 때 아무래도 이미지, 비디오 등의 데이터량이 많기 때문에 간혹 업로드 용량이 상당해지는 경우가 생기게 되었습니다. 이와 같은 경우에 용량의 총합이 100mb가 넘어가게 되면 데이터 업로드가 안되는 현상이 발생했고, 로컬에서는 정상작동하기에 아마도 서버의 문제일 것 이라고 예상하게 되었는데, 서버가 작아서 발생하는 문제인 건지 아니면 어떤 다른 문제점 혹은 제한을 풀 수 있는 명령어가 존재하는지 궁금합니다. 강사님 강의를 토대로 약 9개월 정도 혼자서 진행한 프로젝트입니다. 상당히 많은 시행착오가 있었고 그때마다 구글링과 강의 다시 보기를 통해 해결해왔었는데, 혼자서 적지 않은 기간을 하다 보니 어떠한 코드 작성에 있어서 구현이 되고안되고 보다는 접근 방법이나 이게 정말 맞는지? 라는 문제가 여러가지 발생했습니다. 그런 부분들이 혼자서는 해결되지 않아 이렇게 질문드립니다. 만약 설명이 부족하거나 질문들에 이해가 안 되시는 점 있으시면 바로바로 추가하겠습니다.
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
URL 정규표현식 질문입니다!
from django.urls import path, re_path, register_converter from . import views # 커스텀 Converter class YearConverter: regex = r"20\d{2}" # 정규표현식 패턴을 작성 def to_python(self, value): return int(value) def to_url(self, value): return "%04d" % value # 커스텀 Converter를 등록하고 이름을 설정 register_converter(YearConverter, 'year') app_name = 'instagram' urlpatterns = [ path('', views.post_list, name='post_list'), # path('<int:pk>/', views.post_detail), re_path(r'(?P<pk>\d{3})/', views.post_detail), # path('archives/<int:year>/', views.archives_year), # re_path(r'archives/(?P<year>20\d{2})/', views.archives_year), path('archives/<year:year>/', views.archives_year), # re_path(r'(?P<pk>\d+)/$', views.post_detail), ] 안녕하세요, 강사님! 위와 같이 instagram 앱 내부의 urls.py에서 re_path(r'(?P<pk>\d{3})/', views.post_detail), 이렇게 re_path함수를 사용하여 localhost:8000/instagram/이후에 3자리만 요청이 가능하도록 해보고 싶은데요. 이렇게 1자리 또는 2자리를 입력하면 정상적으로 오류가 나오는데, 다음과 같이 3자리만 매칭되는 게 아니라, 3자리 이상은 전부 매칭이 되고 있어서 질문을 드려봅니다. 어떤 부분이 문제가 있는걸까요..?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
윈도우에서 토큰값 입력하기
(django-with-react-rev3) C:\Dev\dev2\askcompany>TOKEN = c84a625c9345fbed62c9771afaca3cbf1ed65b4a 'TOKEN'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 이런 오류는 어떻게 해결해야 하나요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
IsAuthorOrReadOnly 퍼미션이 작동이 안되네요
views.py class PostViewSet(ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer permission_classess = [IsAuthenticated,IsAuthorOrReadOnly] # login_required permissions.py class IsAuthorOrReadOnly(permissions.BasePermission): #인증이 되어야만 목록조회/포스팅 등록 허용 def has_permission(self, request, view): return request.user and request.user_authenticated # 작성자 아니면 조회만 가능, 작성자는 다른 작업도 가능 def has_object_permission(self, request, view, obj): if request.method in permissions.SAFE_METHODS: # SAFE_METHOD는 GET, HEAD 등 조회용 안전한 메소드 return True if request.method == 'DELETE': return request.user.is_superuser return obj.author == request.user 다른 유저가 쓴 글도 PATCH 메소드로 수정이 가능한데.. 코드상으론 잘못된부분이 없어보이네요 ㅠ
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
커스텀 PATCH 오류
http PATCH http://localhost:8000/post/3/set_public 를 터미널에 쳤을때 강사님처럼 객체가 나오지 않고 아래처럼 엄청난 html파일이 터미널에 찍히네요; http PATCH http://localhost:8000/post/2/set_public 로 했을때는 데이터가 수정되었는데 3으로 하니까 데이터가 수정이 안된모습입니다.. 무엇이 문제일까요 ㅠㅜ <td>TEMP</td> <td class="code"><pre>'C:\\Users\\Garam\\AppData\\Local\\Temp'</pre></td> </tr> <tr> <td>TERM_PROGRAM</td> <td class="code"><pre>'vscode'</pre></td> </tr> <tr> <td>TERM_PROGRAM_VERSION</td> <td class="code"><pre>'1.64.1'</pre></td> </tr> <tr> <td>TMP</td> <td class="code"><pre>'C:\\Users\\Garam\\AppData\\Local\\Temp'</pre></td> </tr> <tr> <td>USERDOMAIN</td> <td class="code"><pre>'DESKTOP-DJ9Q9OG'</pre></td> </tr> <tr> <td>USERDOMAIN_ROAMINGPROFILE</td> <td class="code"><pre>'DESKTOP-DJ9Q9OG'</pre></td> </tr> <tr> <td>USERNAME</td> <td class="code"><pre>'Garam'</pre></td> </tr> <tr> <td>USERPROFILE</td> <td class="code"><pre>'C:\\Users\\Garam'</pre></td> </tr> <tr> <td>VSCODE_GIT_ASKPASS_EXTRA_ARGS</td> <td class="code"><pre>'--ms-enable-electron-run-as-node'</pre></td> </tr> <tr> <td>VSCODE_GIT_ASKPASS_MAIN</td> <td class="code"><pre>('c:\\Users\\Garam\\AppData\\Local\\Programs\\Microsoft VS ' 'Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js')</pre></td> </tr> <tr> <td>VSCODE_GIT_ASKPASS_NODE</td> <td class="code"><pre>'C:\\Users\\Garam\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe'</pre></td> </tr> <tr> <td>VSCODE_GIT_IPC_HANDLE</td> <td class="code"><pre>'\\\\.\\pipe\\vscode-git-cf22388980-sock'</pre></td> </tr> <tr> <td>WINDIR</td> <td class="code"><pre>'C:\\WINDOWS'</pre></td> </tr> <tr> <td>wsgi.errors</td> <td class="code"><pre><_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'></pre></td> </tr> <tr> <td>wsgi.file_wrapper</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>wsgi.input</td> <td class="code"><pre><django.core.handlers.wsgi.LimitedStream object at 0x0000016394592AC0></pre></td> </tr> <tr> <td>wsgi.multiprocess</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>wsgi.multithread</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>wsgi.run_once</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>wsgi.url_scheme</td> <td class="code"><pre>'http'</pre></td> </tr> <tr> <td>wsgi.version</td> <td class="code"><pre>(1, 0)</pre></td> </tr> </tbody> </table> <h3 id="settings-info">Settings</h3> <h4>Using settings module <code>askcompany.settings</code></h4> <table class="req"> <thead> <tr> <th>Setting</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>ABSOLUTE_URL_OVERRIDES</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>ADMINS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>ALLOWED_HOSTS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>APPEND_SLASH</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>AUTHENTICATION_BACKENDS</td> <td class="code"><pre>['django.contrib.auth.backends.ModelBackend']</pre></td> </tr> <tr> <td>AUTH_PASSWORD_VALIDATORS</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>AUTH_USER_MODEL</td> <td class="code"><pre>'auth.User'</pre></td> </tr> <tr> <td>BASE_DIR</td> <td class="code"><pre>'C:\\Dev\\dev2\\askcompany'</pre></td> </tr> <tr> <td>CACHES</td> <td class="code"><pre>{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}</pre></td> </tr> <tr> <td>CACHE_MIDDLEWARE_ALIAS</td> <td class="code"><pre>'default'</pre></td> </tr> <tr> <td>CACHE_MIDDLEWARE_KEY_PREFIX</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>CACHE_MIDDLEWARE_SECONDS</td> <td class="code"><pre>600</pre></td> </tr> <tr> <td>CSRF_COOKIE_AGE</td> <td class="code"><pre>31449600</pre></td> </tr> <tr> <td>CSRF_COOKIE_DOMAIN</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>CSRF_COOKIE_HTTPONLY</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>CSRF_COOKIE_NAME</td> <td class="code"><pre>'csrftoken'</pre></td> </tr> <tr> <td>CSRF_COOKIE_PATH</td> <td class="code"><pre>'/'</pre></td> </tr> <tr> <td>CSRF_COOKIE_SAMESITE</td> <td class="code"><pre>'Lax'</pre></td> </tr> <tr> <td>CSRF_COOKIE_SECURE</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>CSRF_FAILURE_VIEW</td> <td class="code"><pre>'django.views.csrf.csrf_failure'</pre></td> </tr> <tr> <td>CSRF_HEADER_NAME</td> <td class="code"><pre>'HTTP_X_CSRFTOKEN'</pre></td> </tr> <tr> <td>CSRF_TRUSTED_ORIGINS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>CSRF_USE_SESSIONS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>DATABASES</td> <td class="code"><pre>{'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.sqlite3', 'HOST': '', 'NAME': 'C:\\Dev\\dev2\\askcompany\\db.sqlite3', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}}</pre></td> </tr> <tr> <td>DATABASE_ROUTERS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td> <td class="code"><pre>2621440</pre></td> </tr> <tr> <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td> <td class="code"><pre>1000</pre></td> </tr> <tr> <td>DATETIME_FORMAT</td> <td class="code"><pre>'N j, Y, P'</pre></td> </tr> <tr> <td>DATETIME_INPUT_FORMATS</td> <td class="code"><pre>['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']</pre></td> </tr> <tr> <td>DATE_FORMAT</td> <td class="code"><pre>'N j, Y'</pre></td> </tr> <tr> <td>DATE_INPUT_FORMATS</td> <td class="code"><pre>['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']</pre></td> </tr> <tr> <td>DEBUG</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>DEBUG_PROPAGATE_EXCEPTIONS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>DECIMAL_SEPARATOR</td> <td class="code"><pre>'.'</pre></td> </tr> <tr> <td>DEFAULT_CHARSET</td> <td class="code"><pre>'utf-8'</pre></td> </tr> <tr> <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td> <td class="code"><pre>'django.views.debug.SafeExceptionReporterFilter'</pre></td> </tr> <tr> <td>DEFAULT_FILE_STORAGE</td> <td class="code"><pre>'django.core.files.storage.FileSystemStorage'</pre></td> </tr> <tr> <td>DEFAULT_FROM_EMAIL</td> <td class="code"><pre>'webmaster@localhost'</pre></td> </tr> <tr> <td>DEFAULT_INDEX_TABLESPACE</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>DEFAULT_TABLESPACE</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>DISALLOWED_USER_AGENTS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>EMAIL_BACKEND</td> <td class="code"><pre>'django.core.mail.backends.smtp.EmailBackend'</pre></td> </tr> <tr> <td>EMAIL_HOST</td> <td class="code"><pre>'localhost'</pre></td> </tr> <tr> <td>EMAIL_HOST_PASSWORD</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>EMAIL_HOST_USER</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>EMAIL_PORT</td> <td class="code"><pre>25</pre></td> </tr> <tr> <td>EMAIL_SSL_CERTFILE</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>EMAIL_SSL_KEYFILE</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>EMAIL_SUBJECT_PREFIX</td> <td class="code"><pre>'[Django] '</pre></td> </tr> <tr> <td>EMAIL_TIMEOUT</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>EMAIL_USE_LOCALTIME</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>EMAIL_USE_SSL</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>EMAIL_USE_TLS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>FILE_CHARSET</td> <td class="code"><pre>'utf-8'</pre></td> </tr> <tr> <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FILE_UPLOAD_HANDLERS</td> <td class="code"><pre>['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']</pre></td> </tr> <tr> <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td> <td class="code"><pre>2621440</pre></td> </tr> <tr> <td>FILE_UPLOAD_PERMISSIONS</td> <td class="code"><pre>420</pre></td> </tr> <tr> <td>FILE_UPLOAD_TEMP_DIR</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FIRST_DAY_OF_WEEK</td> <td class="code"><pre>0</pre></td> </tr> <tr> <td>FIXTURE_DIRS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>FORCE_SCRIPT_NAME</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FORMAT_MODULE_PATH</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FORM_RENDERER</td> <td class="code"><pre>'django.forms.renderers.DjangoTemplates'</pre></td> </tr> <tr> <td>IGNORABLE_404_URLS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>INSTALLED_APPS</td> <td class="code"><pre>['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'instagram']</pre></td> </tr> <tr> <td>INTERNAL_IPS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>LANGUAGES</td> <td class="code"><pre>[('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]</pre></td> </tr> <tr> <td>LANGUAGES_BIDI</td> <td class="code"><pre>['he', 'ar', 'fa', 'ur']</pre></td> </tr> <tr> <td>LANGUAGE_CODE</td> <td class="code"><pre>'en-us'</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_AGE</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_DOMAIN</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_HTTPONLY</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_NAME</td> <td class="code"><pre>'django_language'</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_PATH</td> <td class="code"><pre>'/'</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_SAMESITE</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_SECURE</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>LOCALE_PATHS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>LOGGING</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>LOGGING_CONFIG</td> <td class="code"><pre>'logging.config.dictConfig'</pre></td> </tr> <tr> <td>LOGIN_REDIRECT_URL</td> <td class="code"><pre>'/accounts/profile/'</pre></td> </tr> <tr> <td>LOGIN_URL</td> <td class="code"><pre>'/accounts/login/'</pre></td> </tr> <tr> <td>LOGOUT_REDIRECT_URL</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>MANAGERS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>MEDIA_ROOT</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>MEDIA_URL</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>MESSAGE_STORAGE</td> <td class="code"><pre>'django.contrib.messages.storage.fallback.FallbackStorage'</pre></td> </tr> <tr> <td>MIDDLEWARE</td> <td class="code"><pre>['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']</pre></td> </tr> <tr> <td>MIGRATION_MODULES</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>MONTH_DAY_FORMAT</td> <td class="code"><pre>'F j'</pre></td> </tr> <tr> <td>NUMBER_GROUPING</td> <td class="code"><pre>0</pre></td> </tr> <tr> <td>PASSWORD_HASHERS</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>PASSWORD_RESET_TIMEOUT_DAYS</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>PREPEND_WWW</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>ROOT_URLCONF</td> <td class="code"><pre>'askcompany.urls'</pre></td> </tr> <tr> <td>SECRET_KEY</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>SECURE_BROWSER_XSS_FILTER</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SECURE_CONTENT_TYPE_NOSNIFF</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SECURE_HSTS_PRELOAD</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SECURE_HSTS_SECONDS</td> <td class="code"><pre>0</pre></td> </tr> <tr> <td>SECURE_PROXY_SSL_HEADER</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SECURE_REDIRECT_EXEMPT</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>SECURE_REFERRER_POLICY</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SECURE_SSL_HOST</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SECURE_SSL_REDIRECT</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SERVER_EMAIL</td> <td class="code"><pre>'root@localhost'</pre></td> </tr> <tr> <td>SESSION_CACHE_ALIAS</td> <td class="code"><pre>'default'</pre></td> </tr> <tr> <td>SESSION_COOKIE_AGE</td> <td class="code"><pre>1209600</pre></td> </tr> <tr> <td>SESSION_COOKIE_DOMAIN</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SESSION_COOKIE_HTTPONLY</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>SESSION_COOKIE_NAME</td> <td class="code"><pre>'sessionid'</pre></td> </tr> <tr> <td>SESSION_COOKIE_PATH</td> <td class="code"><pre>'/'</pre></td> </tr> <tr> <td>SESSION_COOKIE_SAMESITE</td> <td class="code"><pre>'Lax'</pre></td> </tr> <tr> <td>SESSION_COOKIE_SECURE</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SESSION_ENGINE</td> <td class="code"><pre>'django.contrib.sessions.backends.db'</pre></td> </tr> <tr> <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SESSION_FILE_PATH</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SESSION_SAVE_EVERY_REQUEST</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SESSION_SERIALIZER</td> <td class="code"><pre>'django.contrib.sessions.serializers.JSONSerializer'</pre></td> </tr> <tr> <td>SETTINGS_MODULE</td> <td class="code"><pre>'askcompany.settings'</pre></td> </tr> <tr> <td>SHORT_DATETIME_FORMAT</td> <td class="code"><pre>'m/d/Y P'</pre></td> </tr> <tr> <td>SHORT_DATE_FORMAT</td> <td class="code"><pre>'m/d/Y'</pre></td> </tr> <tr> <td>SIGNING_BACKEND</td> <td class="code"><pre>'django.core.signing.TimestampSigner'</pre></td> </tr> <tr> <td>SILENCED_SYSTEM_CHECKS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>STATICFILES_DIRS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>STATICFILES_FINDERS</td> <td class="code"><pre>['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']</pre></td> </tr> <tr> <td>STATICFILES_STORAGE</td> <td class="code"><pre>'django.contrib.staticfiles.storage.StaticFilesStorage'</pre></td> </tr> <tr> <td>STATIC_ROOT</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>STATIC_URL</td> <td class="code"><pre>'/static/'</pre></td> </tr> <tr> <td>TEMPLATES</td> <td class="code"><pre>[{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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']}}]</pre></td> </tr> <tr> <td>TEST_NON_SERIALIZED_APPS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>TEST_RUNNER</td> <td class="code"><pre>'django.test.runner.DiscoverRunner'</pre></td> </tr> <tr> <td>THOUSAND_SEPARATOR</td> <td class="code"><pre>','</pre></td> </tr> <tr> <td>TIME_FORMAT</td> <td class="code"><pre>'P'</pre></td> </tr> <tr> <td>TIME_INPUT_FORMATS</td> <td class="code"><pre>['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']</pre></td> </tr> <tr> <td>TIME_ZONE</td> <td class="code"><pre>'UTC'</pre></td> </tr> <tr> <td>USE_I18N</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>USE_L10N</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>USE_THOUSAND_SEPARATOR</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>USE_TZ</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>USE_X_FORWARDED_HOST</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>USE_X_FORWARDED_PORT</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>WSGI_APPLICATION</td> <td class="code"><pre>'askcompany.wsgi.application'</pre></td> </tr> <tr> <td>X_FRAME_OPTIONS</td> <td class="code"><pre>'DENY'</pre></td> </tr> <tr> <td>YEAR_MONTH_FORMAT</td> <td class="code"><pre>'F Y'</pre></td> </tr> </tbody> </table> </div> <div id="explanation"> <p> You're seeing this error because you have <code>DEBUG = True</code> in your Django settings file. Change that to <code>False</code>, and Django will display a standard page generated by the handler for this status code. </p> </div> </body> </html>
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
DJango에서 나오는 에러를 react에 notification으로 나오게 하고 싶습니다.
안녕하세요! 강사님 강의 잘 보고있습니다. 강의보면서 사소하게 개인 포르젝트를 만들어보는 중입니다. 리액트로 회원가입 폼까지 구현한 뒤 이메일(아이디)가 중복된 다든지 비밀번호와 비밀번호가 일치하지 않는 다는 에러 메시지가 장고 cmd창에서는 확인이 가능합니다. 아래는 중복되는 이메일로 가입하려해서 나온 에러입니다. django.db.utils.IntegrityError: (1062, "Duplicate entry 'testuser@gmail.com' for key 'accounts_user.email'") 이런식 으로 에러가 뜹니다. 이런 에러는 서버쪽에서는 확인이 가능하지만 리액트로 가져와서 회원들이 가입할 때 확인할 수 있게 하고 싶은데 어떤식으로 가져와야할지 잘 모르겠어서 질문드립니다. 아래는 시리얼라이저 회원가입 유효성 검사 부분입니다. class SignupSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True,required=True) confirm_password = serializers.CharField(write_only=True,required=True) email = serializers.EmailField(required=True) nickname = serializers.CharField(required=True) def create(self, validated_data): user = User.objects.create(email=validated_data["email"], nickname=validated_data["nickname"]) user.set_password(validated_data["password"]) user.save() return user def validate(self, data): if not data.get('password') or not data.get('confirm_password'): raise serializers.ValidationError("Please enter a password and " "confirm it.") if data.get('password') != data.get('confirm_password'): raise serializers.ValidationError("Those passwords don't match.") return data class Meta: model = User fields = ["pk", "email", "password","confirm_password","nickname"] 리액트에서는 유효성 검사 커스터 마이징이랑 rules를 활용하여 닉네임 공백사용 금지나 비밀번호 입력시 특수문자와 대문자 길이제한 등을 구현해 놓은 상태입니다. 회원가입은 잘 작동하는데 중복이나 password와 confirm_password가 일치하지 않을 때 django에서 뜨는 에러를 어떻게 리액트로 가져올 수 있을까요?
- 미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
(강의 명: 회원가입)회원가입 후 계정은 생기는데 페이지연결이 안되요..
VS CODE로 따라 하고 있습니다~ success_url부분에서 import 해오는 부분이 자동으로 되셔가지고 안보여서 제가 임의로 입력했는데 from django.conf import settings 이거 맞을까요? 실행이 제대로 안되는거 보니까 이게 틀린거 같아서요.. 회원가입 후에 계정이 생기긴 하는데 페이지가 404오류로 넘어갑니다..