수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
gitignore안먹히는현상
qna에서도 확인했는데 여전히 venv/까지 다 올라갑니다 그래서 블로그 들어가서 지우고 다시해도 올라가네요... 방법이 없을까요 캐시초기화하고 계속 git add . 하는데 venv의 폴더가 쭈르륵뜨네요
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
cmder 종료시 서버도 같이 종료됩니다.
cmder로 vultr 서버를 실행시키고 정상작동하는건 확인했는데cmder를 종료시키니 서버도 같이 꺼집니다. 어떻게 해야 컴퓨터를 꺼도 서버가 유지될까요?
- 해결됨파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
' python manage.py makemigration blog ' 명령어 에러
이런 오류 발생으로 인해서 찾아보니까예전답변에 버전 차이로 인해서이렇게 바꿔주라는 답변을 보고 했으나 이러면이런 오류만 발생을 합니다.버전이 최근꺼라 그런지..어떻게 해결해야 할까요..
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
python manage.py makemigrations 를 했을 때 오류가 납니다.
ModuleNotFoundError: No module named 'blogdjango' 이렇게 오류가 뜨는데 어떻게 해야할까요?
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
다른 사용자가 수정페이지에 접근하는 걸 막으려면 어떻게 하나요?
다른 사용자가 게시물 수정 페이지에 접근하는걸 막으려면 어떻게 해야 하나요? 로그인을 안한 사용자가 접근하는 건 뷰에 LoginRequiredMixin을 사용해서 막는데, 로그인은 했지만 작성자가 아닌 사용자가 접근하는 건 어떻게 막나 궁금합니다. PostUpdate 뷰를 아래처럼 수정해봤지만 form_valid가 템플릿을 생성한 후에 실행되는 건지 리다이렉트가 안됩니다. # /blog/post.pk/update/ GETclass PostUpdate(LoginRequiredMixin, UpdateView): model = Post # 템플릿: post_form fields = ['title', 'content', 'head_image', 'category', 'tags'] def form_valid(self, form): current_user = self.request.user pk = self.kwargs['pk'] current_post = Post.objects.get(pk=pk) # if current_user is current_post.author: return super(type(self), self).for_valid(form) else: return redirect('/blog/1/') 다른 사용자의 접근을 막는 방법과 form_valid가 언제 실행되는지 알려주시면 감사하겠습니다.
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
request.user가 SimpleLazyObject를 반환합니다.
19:34처럼 comment.author = request.user를 하면 아래와 같은 에러가 발생합니다. ValueError: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000002CE4219A0A0>>": "Comment.author" must be a "User" instance. request.user가 SimpleLazyObject를 반환하는거 같은데,PostCreate에서 request.user를 사용할 때는 문제없이 잘 되는데 여기에선 에러가 나는 이유를 모르겠습니다.
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
생성 및 수정 페이지 사용시 302 에러
새로만든 포스트 생성 페이지나 수정 페이지를 통해 게시물을 생성하거나 수정하려고 하면 아래와 같은 오류가 발생합니다. "POST /blog/6/update/ HTTP/1.1" 302 0"POST /blog/create/ HTTP/1.1" 302 0 게시물이 생성되는 것과 수정되는 것에는 문제가 없는데 302가 떠서 이게 뭔가하고 살펴보니 head_image는 새로 생성할수도, 변경할 수도 없습니다. 제가 어딘가에서 오타를 낸 걸까요?
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
views.py의 클래스명과 템플릿의 관계에 대해 이해가 잘 안됩니다.
views.py에서 PostCreate와 PostUpdate 클래스가 템플릿과 어떻게 연결되는지 이해가 되지 않습니다. PostList나 PostDetail은 post_list, post_detail을 자동으로 찾는다고 이해하고 있었는데,PostCreate와 PostUpdate는 post_create, post_update 없이 템플릿이 자동으로 지정된거 같아 혼란스럽습니다. 클래스가 어떻게 템플릿을 찾는지 설명해주실수 있을까요? 그리고 PostListByCategory는 post_list_by_category템플릿을 찾아야 하지만 by_category부분이 없어 post_list.html을 템플릿으로 삼는다고 이해하고 있는데 이게 맞는건가요?
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
카테고리의 slug를 수정하면 301에러가 발생합니다.
21:04에서처럼 def create_category(name='life', description=''): .... category.slug = category.name.replace(' ', '-').replace('/', '') category.save() .... 를 했더니 테스트에서 301 에러가 발생합니다. Traceback (most recent call last): File "C:\Users\msra9\python_projects\django_my_website\blog\tests.py", line 200, in test_post_list_by_category self.assertEqual(response.status_code, 200) AssertionError: 301 != 200 cmder에서는 에러 설명이 이것뿐이라서 뭐가 문제인건지 모르겠습니다..
- 해결됨파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
강의 제목 중 "FBV -> MBV: 블로그 포스트 리스트"에 대해
강의 내용에 FBV, MBV에 대한 설명이 없어 검색해보니 FBV는 Function Based View의 의미로 사용하신 것 같고, MBV는 Method Based View의 의미로 사용하신 것 같은데 FBV라는 용어는 일반적으로 사용하지 않는 것 같네요. 실제 내용은 Method Based View -> Class Based View로 변환하는 내용이라 MBV -> CBV가 맞지 않나요? 조금 혼란스러워 질문 남깁니다.
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
comment_000 'NoneType' 에러 질문드립니다...
(venv) λ python manage.py test Creating test database for alias 'default'... System check identified no issues (0 silenced). .....E...... ====================================================================== ERROR: test_post_detail (blog.tests.TestView) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Users\user\Desktop\django\github\django_my_website\blog\tests.py", line 254, in test_post_detail self.assertIn(comment_000.author.username, comments_div.text) AttributeError: 'NoneType' object has no attribute 'author' ---------------------------------------------------------------------- Ran 12 tests in 9.590s FAILED (errors=1) Destroying test database for alias 'default'... 깃헙에 있는 이번 test 복사해서 붙여넣기 했는데 이런 에러가 자꾸 나는데 머가 잘못된건가요?? 그 전까진 에러가 안나다가 왜 이러는지 궁금합니다! 감사합니다.. ㅜㅜ
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
배포에 관해 몇가지 질문이 있습니다.
안녕하세여 강사님질문이 몇가지 있습니다1.vultr 에 배포할때 프로젝트를 하나 복사해서 두개 배포하고 싶다면 서버를 추가로 구매해야 되나요? 2.postgre 로 디비를 바꿀 경우 배포를 어떤식으로 해야 될까여?3.배포시 업로드한 이미지를 프로젝트 내에 저장하는게 괜찮은 방식인가여? 지울때 업로드된 이미지도 지워지게 하려면 어떻게 해야 되나여?4.후속 강의 계획은 없으신가여 drf - react 로 쇼핑몰 만들기 같은거 해주시면 안되나요 ㅋㅋ;;감사합니다
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
db를 sqlite3 에서 postgre 로 교체했는데 이걸 배포하려면 어떻게 해야 될까여?
안녕하세요 강사님~! 질문이 있습니다 강사님의 강의를 토대로 만들었던 토이 프로젝트의 db를 postgre 로 교체했는데여 vultr에 어떻게 디비를 설정해야 되나여? sqlite3 은 db를 따로 설정하지는 않잖아여 그래서 다시 배포 하려고 하는데 잘몰겠어서여 ㅋㅋ;; site: www.terecal-hyun.co.kr git: https://github.com/hyunsokstar/skilnote1
- 해결됨파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
강사님 로그인 화면도 꾸밀 수 있나요?
안녕하세요 강사닙! 강의 잘 듣고 있습니다. 강의를 듣던 와 중 하단의 로그인 관련 화면들도 부트스트랩으로 꾸밀 수 있는지궁금해져 질문을 남깁니다!꾸밀 수 있다면 html을 하나 더 새로 만들어 작성하는 편이 좋을까요? 자세한 방법이 궁금합니다!아직 1회차 시청 중이라 감이 잘 안오지만 만드는 중에 욕심이나 여쭤봅니다 :D
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
script function 질문!
<div class="card my-4"> <h5 class="card-header">Search</h5> <div class="card-body"> <div class="input-group"> <input type="text" id="search-input" class="form-control" placeholder="Search for..."> <span class="input-group-append"> <button class="btn btn-secondary" type="button" onclick="search_post();">Go!</button> </span> </div> </div> </div> <script> function search_post(){ var search value= document.getElementById('search-input'); alert(search_value); } </script> 강의를 따라하는중 Script function 이 전혀 작동하지않습니다. ㅠ 회색으로만 나옵니다... 이건 뭐가 잘못된건가요 ㅠㅠ 환경설정의 문제인가요..? 강사님 깃허브 코드를 그대로 긁어와도 똑같이 나옵니다..
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
다른 app에서 blog의 post모델을 가져오려면?
main 이라는 앱을 새로 만들어서 거기서 최근에 올라온 post 몇개를 미리보기 할수있게 만드는 기능을 추가하려합니다. main/views.py에서 blog/models.py에 있는 Post를 가져와서 쓰면 될거라고 생각하는데.. 좀처럼 적절한 코드가 떠오르지 않네요. import는 어떻게 해야할지도 모르겠어요..
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
importError 에러 질문입니다.ㅠㅠ
admin 에서 posr 수정화면 마크다운 적용되는것까지 확인한후 오류가 나기시작했습니다. markdownx 설치후 이미지 강의 처럼 같이 했습니다. importError이 나옵니다. models.py에서 import 한후 makemigrations, migrate 도 다 해줬습니다. pip freeze 로 markdownx 설치도 확인했습니다 혹시 몰라 venv/src폴더 mark Directory as- sources Root 도 해봤습니다만 해결이안됩니다.ㅠ ㅠㅠㅠㅠ 도와주세요 ㅠㅠ
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
test중 오류가 나오는데 해답을 찾지못하겠습니다 ㅠㅠ
이제 막 공부를 시작한터라 몇일째 혼자 해결해볼려고 해도 도저히 모르겠습니다... 전 강의 tag페이지 만들기에선 아무런 문제가없었는데 post detail개선 부분부터 오류가 나옵니다. 이 오류를 무시하고 그대로 진도를 나가도 블로그 나 어드민 페이지에선 아무런 문제가 발생하진않지만 어느부분이 잘못되어서 오류가 나오는지 가르쳐주세요!ㅠㅠ post_detail {% extends 'blog/base.html' %} {% block content %} <h1 id="blog-list-title"> Blog {% if category %}<small class="text-muted">: {{ category }}</small>{% endif %} {% if tag %}<small class="text-muted">: #{{ tag }}</small>{% endif %} </h1> {% if object_list.exists %} {% for p in object_list %} <!-- Blog Post --> <div class="card mb-4" id="post-card-{{ p.pk }}"> {% if p.head_image %} <img class="card-img-top" src="{{ p.head_image.url }}" alt="Card image cap"> {% else %} <img class="card-img-top" src="https://picsum.photos/750/300/?random" alt="Card image cap"> {% endif %} <div class="card-body"> {% if p.category %} <span class="badge badge-primary float-right">{{ p.category }}</span> {% else %} <span class="badge badge-primary float-right">미분류</span> {% endif %} <h2 class="card-title">{{ p.title }}</h2> <p class="card-text">{{ p.content | truncatewords:50 }}</p> {% for tag in p.tags.all %} <a href="{{ tag.get_absolute_url }}">#{{ tag }}</a> {% endfor %} <br/> <br/> <a href="{{ p.get_absolute_url }}" class="btn btn-primary" id="read-more-post-{{ p.pk }}">Read More →</a> </div> <div class="card-footer text-muted"> Posted on {{ p.create }} by <a href="#">{{ p.authro }}</a> </div> </div> {% endfor %} {% else %} <h3>아직 게시물이 없습니다.</h3> {% endif %} {% endblock %} test.py from django.test import TestCase, Client from bs4 import BeautifulSoup from .models import Post, Category, Tag from django.utils import timezone from django.contrib.auth.models import User def create_category(name='life', description=''): category, is_created = Category.objects.get_or_create( name=name, description=description ) category.slug = category.name.replace(' ', '-').replace('/', '') category.save() return category def create_tag(name='some tag'): tag, is_created = Tag.objects.get_or_create( name=name ) tag.slug = tag.name.replace(' ', '-').replace('/', '') tag.save() return tag def create_post(title, content, author, category=None): blog_post = Post.objects.create( title=title, content=content, created=timezone.now(), author=author, category=category, ) return blog_post class TestModel(TestCase): def setUp(self): self.client = Client() self.author_000 = User.objects.create(username='smith', password='nopassword') def test_category(self): category = create_category() def test_post(self): category = create_category() post_000 = create_post( title='The first post', content='Hello World. We are the world', author=self.author_000, category=category, ) self.assertEqual(category.post_set.count(), 1) def test_tag(self): tag_000 = create_tag(name='project') # bad_guy tag_001 = create_tag(name='portfolio') # america post_000 = create_post( title='The first post', content='Hello World. We are the world', author=self.author_000, ) post_000.tags.add(tag_000) post_000.tags.add(tag_001) post_000.save() post_001 = create_post( title='Stay Fool, Stay Hungry', content='Story about Steve jobs', author=self.author_000 ) post_001.tags.add(tag_001) post_001.save() self.assertEqual(post_000.tags.count(), 2) # post 는 여러개의 tag를 가질수잇다 self.assertEqual(tag_001.post_set.count(), 2) # 하나의 Tag는 여러개의 post에 붙을수있다 self.assertEqual(tag_001.post_set.first(), post_000) # 하나의 Tag는 자신을 가진 post들을 불러올수있다 self.assertEqual(tag_001.post_set.last(), post_001) # 하나의 Tag는 자신을 가진 post들을 불러올수있다 def test_post(self): category = create_category() post_000 = create_post( title='The first post', content='Hello World. We are the world', author=self.author_000, category=category, ) class TestView(TestCase): def setUp(self): self.client = Client() self.author_000 = User.objects.create(username='smith', password='nopassword') def check_navbar(self, soup): navbar = soup.find('div', id='navbar') self.assertIn('Blog', navbar.text) self.assertIn('About me', navbar.text) def check_right_side(self, soup): category_card = soup.find('div', id='category-card') self.assertIn('미분류 (1)', category_card.text) self.assertIn('정치/사회 (1)', category_card.text) def test_post_list_no_post(self): response = self.client.get('/blog/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') title = soup.title self.assertIn(title.text, 'Blog') self.check_navbar(soup) self.assertEqual(Post.objects.count(), 0) self.assertIn('아직 게시물이 없습니다', soup.body.text) def test_post_list_with_post(self): tag_portfolio = create_tag(name='portfolio') post_000 = create_post( title='The first post', content='Hello World. We are the world', author=self.author_000, ) post_000.tags.add(tag_portfolio) post_000.save() post_001 = create_post( title='The second post', content='Second Second Second', author=self.author_000, category=create_category(name='정치/사회') ) post_001.tags.add(tag_portfolio) post_001.save() self.assertGreater(Post.objects.count(), 0) response = self.client.get('/blog/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') body = soup.body self.assertNotIn('아직 게시물이 없습니다', body.text) self.assertIn(post_000.title, body.text) post_000_read_more_btn = body.find('a', id='read-more-post-{}'.format(post_000.pk)) self.assertEqual(post_000_read_more_btn['href'], post_000.get_absolute_url()) self.check_right_side(soup) # main_div에는 main_div = soup.find('div', id='main-div') self.assertIn('정치/사회', main_div.text) ### '정치/사회' self.assertIn('미분류', main_div.text) ### '미분류' # Tag post_card_000 = main_div.find('div', id='post-card-{}'.format(post_000.pk)) self.assertIn('#portfolio', post_card_000.text) # Tag 가 해당 post의 card 마다 있다. def test_post_detail(self): category_politics = create_category(name='정치/사회') post_000 = create_post( title='The first post', content='Hello World. We are the world', author=self.author_000, category=category_politics ) tag_portfolio = create_tag(name='portfolio') post_000.tags.add(tag_portfolio) post_000.save() post_001 = create_post( title='The second post', content='Second Second Second', author=self.author_000, category=create_category(name='정치/사회') ) self.assertGreater(Post.objects.count(), 0) post_000_url = post_000.get_absolute_url() self.assertEqual(post_000_url, '/blog/{}/'.format(post_000.pk)) response = self.client.get(post_000_url) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') title = soup.title self.assertEqual(title.text, '{} - Blog'.format(post_000.title)) self.check_navbar(soup) body = soup.body main_div = body.find('div', id='main-div') self.assertIn(post_000.title, main_div.text) self.assertIn(post_000.author.username, main_div.text) self.assertIn(post_000.content, main_div.text) self.check_right_side(soup) # Tag self.assertIn('#portfolio', main_div.text) self.assertIn(category_politics.name, main_div.text)# 카테고리가 main_div 에 있다. self.assertNotIn('EDIT', main_div.text)# 에디트 버튼이 로그인하지 않은유저에겐 보이지않는다 login_success = self.client.login(username='smith', password='nopassword')# 로그인을 한 경우에는 self.assertTrue(login_success) response = self.client.get(post_000_url) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') main_div = soup.find('div', id='main-div') self.assertEqual(post_000.author, self.author_000)# post.author 와 login 한 사용자가 동일하면 self.assertIn('EDIT', main_div)# EDIT 버튼이 있다. # 다른 사람인 경우에는 없다. def test_post_list_by_category(self): category_politics = create_category(name='정치/사회') post_000 = create_post( title='The first post', content='Hello World. We are the world', author=self.author_000, ) post_001 = create_post( title='The second post', content='Second Second Second', author=self.author_000, category=category_politics ) response = self.client.get('/blog/category/_none/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') # self.assertEqual('Blog - {}'.format(category_politics.name), soup.title.text) main_div = soup.find('div', id='main-div') self.assertIn('미분류', main_div.text) self.assertNotIn(category_politics.name, main_div.text) def test_teg_page(self): tag_000 = create_tag(name='project') # bad_guy tag_001 = create_tag(name='portfolio') # america post_000 = create_post( title='The first post', content='Hello World. We are the world', author=self.author_000, ) post_000.tags.add(tag_000) post_000.tags.add(tag_001) post_000.save() post_001 = create_post( title='Stay Fool, Stay Hungry', content='Story about Steve jobs', author=self.author_000 ) post_001.tags.add(tag_001) post_001.save() response = self.client.get(tag_000.get_absolute_url()) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') main_div = soup.find('div', id='main-div') blog_h1 = main_div.find('h1', id='blog-list-title') self.assertIn('#{}'.format(tag_000.name), blog_h1.text) self.assertIn(post_000.title, main_div.text) self.assertNotIn(post_001.title, main_div.text)
- 해결됨파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
vultr domin에서 admin 접속시 로그인 방법 문의
안녕하세요. vultr 도메인에서 admin으로 접속할 때, 로그인 화면은 뜨는데... 기존 로컬에서 만든 아이디, 비번으로 로긴이 안됩니다. 이것은 앞쪽 수업에서 로컬에서 만든 sqllite는 git에 올리지 않았기 때문에 vultr 도메인에서는 새로 superuser를 만들어야 하는 것으로 이해하고 있습니다. 우선 vultr 콘솔창에서 python manage.py createsuperuser를 치면.. 이런 알 수 없는 글자들이 나오는데.. 마치 아이디와 비번을 입력하라는 것 같은데.. 어떻게 입력해도.. 끝나지가 않네요. 확인 부탁드립니다. 감사합니다.
- 미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
오류가 떠서 질문 드립니다.
다른 분들과 같이 오류가 떠서 bootstrap.min.js.map과 popper.min.js.map을 추가했는데 아직도 오류가 발생해서 질문남깁니다.