남박사의 파이썬으로 실전 웹사이트 만들기
남박사의 파이썬으로 실전 웹사이트 만들기
수강정보
(25개의 수강평)
395명의 수강생
55,000원
지식공유자 : 남박사
38회 수업 · 총 12시간 11분 수업
기간 : 평생 무제한 시청
수료증 : 발급 강의
수강 난이도 : 초급
남박사의 다른 강의 연관 로드맵
중사 프로필

jinja2 오류 중사 1일 전
글 리스트 강의 보고 있는 중입니다. list.html 짜고 있는데 이상하게 jinja2가 작동하지 않네요...;; {% if datas|length > 0 %}<table> <thead> <tr> <td>번호</td> <td>제목</td> <td>이름</td> <td>날짜</td> <td>조회수</td> </tr> </thead> <tbody> <!--반복되는 구간--> <% for data in datas %> <tr> <td></td> <td>{{datas.name}}</td> <td>{{datas.pubdate | formatdatetime}}</td> <td>{{datas.view}}</td> </tr> <% endfor %> <!--반복되는 구간 끝--> </tbody></table>{% else %} <h4> NO DATAS!!</h4>{% endif %} 위처럼 datas.count() 가 안되서 datas|length 이렇게 바꿨습니다. 그리고 <% for data in datas %> 이부분도 for문이 실행안되고 그냥 화면에 저 코드가 그대로 노출됩니다. 당연히 for문이 안돌아서 datas.title에 있던 idx=data._id도 안되서 지웠습니다..ㅜㅜ jinja2 버전은 2.11.2 입니다...ㅜㅜ 왜 이러는 걸까요..?ㅜㅜ

0
허승 프로필

GCP 환경에서 코드 수정사항을 반영하려면 어떻게 해야하나요? 허승 1일 전
안녕하세요, 박사님. 강의 시청은 모두 완료하고 크게 발생한 에러는 없었는데, 소스코드 수정사항을 반영하려면 어떻게 해야할지 문의 드립니다. 이전 강의(Docker이미지로 만들어 배포)를 살펴보면, 이미지 경로 수정을 위해서 run.py 등등을 우분투 환경에 옮겨서 docker를 다시 build하고 docker run을 다시 해주셨는데요. gcp 환경에서도 소스코드 수정 사항을 반영하려면 docker를 다시 build하고 docker run을 다시 해주면 되는건가요? 매번 수정할 때마다 이러한 과정을 거치는지 궁금합니다. 소스코드 수정사항을 실제 웹사이트에 반영할 때 좀 더 간편한 방법이 있을까요?

0
meduremi 프로필

게시판만들기-글상세보기 부분에 대한 질문입니다. return value.strftime(...) 에서 에러가 나네요 meduremi 4일 전
안녕하세요.  게시판 글상세보기 17분 50초 정도에서,  return valve.strftime('%Y - %m - %D  %H:%M:%S') 문장에서 syntax error 가 나오네요. 내용을 그대로 따라했는데 errori 나서 질문드립니다. 

1
김태근 프로필

검색창 자동완성 기능 김태근 8일 전
검색어 자동완성 기능은 어떻게 할수 있는지요? 참고할만한 내용이라도 알려주세요

3
wooseong yang 프로필

안녕하십니까 이미지 파일 업로드 부분 관련하여 질문 드립니다! wooseong yang 10일 전
안녕하십니까 이런 부분으로 질문드리게 되어 죄송합니다 ㅠ  다만 이미지 업로드 부분에서 drag&drop 기능 및  파일 선택 후 업로드 기능 전부 제대로 실행되지 않아 어려움을 겪고 있습니다 현재 로컬 폴더에 지정한 경로상으로 image를 드래그앤 드롭 하면 저장은 됩니다만 write.html 게시판 글 작성 상으로는  이미지가 전혀 나타나질 않습니다 .  uploadImage()의 문제인 듯 하여 코드를 첨부했습니다 혹시 틀린 부분이 있다면 알려주시면 정말정말 감사할 듯 합니다! //write.html -> uploadImage() function uploadImage(image){ print("<file upload>") var data = new FormData(); data.append("image", image); $.ajax({ url: "{{url_for('board.upload_image')}}", cache: false, contentType: false, processData: false, data: data, type: "post", success: function(url){ var image = $("<img>").attr("src", url).css('max-width', "900px"); $("summernote").summernote("insertNode", image[0]); }, error: function(data){ console.log(data); alert(data); } }); } console log를 살펴봐도 다른 에러가 발생하지 않았으며 image파일은 게시판에 이미지를 올릴 때마다 차곡차곡 저장은 됩니다만 글 작성 내용에서는 전혀 포함이 되질 않습니다  # board.py -> /upload_image, /images/<filename> @blueprint.route("/upload_image", methods=["POST"]) def upload_image(): if request.method == "POST": file = request.files["image"] if file and allowed_file(file.filename): filename = "{}.jpg".format(rand_generator()) savefilepath=os.path.join(app.config["BOARD_IMAGE_PATH"], filename) file.save(savefilepath) return url_for("board.board_images", filename=filename) @blueprint.route("/images/<filename>") def board_images(filename): return send_from_directory(app.config["BOARD_IMAGE_PATH"], filename) 혹시 몰라 board.py 에 구현된 upload_image 항목 역시 첨부했습니다

2
Daniel Moon 프로필

오류 확인 부탁 드려요.. ㅠㅠ Daniel Moon 11일 전
오류 확인 부탁 드려요.. ㅠㅠ

1
야붕이 프로필

게속 오류떠요 야붕이 17일 전
고쳐도 수용없어요 from flask import Flask from flask import request from flask import render_template from flask_pymongo import PyMongo from bson.objectid import ObjectId from flask import abort from datetime import datetime from flask import redirect from flask import url_for import time import math app = Flask(__name__) app.config["MONGO_URI"] = "mongodb://localhost:27017/myweb" mongo = PyMongo(app) # 메인 @app.route("/")   def Main():      Myyy =  """         <meta http-equiv="refresh" content="0;url=/list">     """     # return """<meta http-equiv="refresh" content="0;url=/write">"""     return Myyy @app.template_filter("formatdatetime") # 시간 def format_datetime(value):     if value is None:         return " "     now_timestamo = time.time()     offset = datetime.fromtimestamp(now_timestamo) - datetime.utcfromtimestamp(now_timestamo)     value = datetime.fromtimestamp((int(value) / 1000)) + offset     return value.strftime('%Y-%m-%d %H:%M:%S') # 년/월/일 시/분/초 @app.route("/list") def lists():     # 중요     # 페이지 값 (값이 없는 경유 기본값은 1)     page = request.args.get("page", 1, type=int)     # 한페이지당 몇개의 게시물을 출력할지      limit = request.args.get("limit", 7, type=int) # 기본값은 10개이다 수정가능      search = request.args.get("search", - 1, type=int)     keyword = request.args.get("keyword", type=str)     # 최종적으로 완성된 쿼리를 만글 변수     query = {}     # 검색어 상태를 추가할 리스트 변수     search_list = []     if search == 0:         search_list.append({"title": {"$regex": keyword}})     elif search == 1:         search_list.append({"contents": {"$regex": keyword}})     elif search == 2:         search_list.append({"title": {"$regex": keyword}})         search_list.append({"contents": {"$regex": keyword}})     elif search == 3:         search_list.append({"name": {"$regex": keyword}})     # 검색 대상이 1개하도 존재할 경우 query 변수 $or 리스트 쿼리 한다     if len(search_list) > 0:         query = {"$or": search_list}     # {"$and":[     #     {"title": {"$regex": "파이썬"}},     #     {"title": {"$regex": "파이썬"}},     #     {"title": {"$regex": "안드로아드"}},     # ]}        print(query)     board = mongo.db.board  # DB가져오기     datas = board.find(query).skip((page - 1) * limit).limit(limit)     # 게시물의 총 갯수     tot_count = board.find(query).count()     # 마지막 페이지의 수를 구합니다     last_page_num = math.ceil(tot_count / limit)     # 페이지 블럭을 5개씩 표기     block_size = 5 # 변경 가능     # 현재 블럭의 위치     block_num = int((page - 1) / block_size)     # 블럭 시작위치     block_start = int((block_size * block_num) + 1)     # 블럭의 끝 위치     block_last = math.ceil(block_start + (block_size - 1))     return render_template("list.html", datas=datas, limit=limit, page=page, block_start=block_start, block_last=block_last, last_page_num=last_page_num,  search=search, keyword=keyword)      @app.route("/view/<idx>") def board_view(idx):     # idx = request.args.get("idx")     if idx is not None:         board = mongo.db.board         data = board.find_one({"_id": ObjectId(idx)})         if data is not None:             result = {                 "id": data.get("_id"),                    "name": data.get("name"),                 "title": data.get("title"),                 "contents": data.get("contents"),                 "pubdate": data.get("pubdate"),                 "view": data.get("view"),             }              return render_template("view.html", result=result)         return abort(404)  @app.route("/write", methods=["GET", "POST"]) def board_write():     if request.method == "POST":         name = request.form.get("name")         title = request.form.get("title")         contents = request.form.get("contents")         print(name, title, contents)         current_utc_time = round(datetime.utcnow().timestamp() * 1000)         board = mongo.db.board         post = {             "name": name,             "title": title,             "contents": contents,             "pubdate": current_utc_time,             "view": 0,         }         x = board.insert_one(post)         print(x.inserted_id)         return redirect(url_for("board_view", idx=x.inserted_id))     else:         return render_template("write.html") if __name__ == "__main__":     app.run(host="0.0.0.0", debug=True, port=8501) html도 고쳐도 여전히 오류떠요 <script>     function search() {         var val_search = document.getElementById("search").value;         var val_keyword = document.getElementById("keyword").value;         if(val_search == "" || val_keyword == "") {             return false;         } else {             self.location.href = "{{url_for('lists')}}?search=" + val_search + "&keyword=" + val_keyword;         }     } </script> {% if datas.count() > 0 %} <title>목록</title> <table>     <thead>         <tr>             <td>번호</td>             <td>제목</td>             <td>이름</td>             <td>날짜</td>             <td>조회수</td>         </tr>     </thead>     <tbody>         <!--반복되는 구간-->         {% for data in datas %}         <tr>             <td>{{loop.index + ((page - 1) * limit)}}</td>  <!--게시물 번호-->             <td><a href="{{url_for('board_view', idx=data._id, page=page, search=search, keyword=keyword)}}">{{data.title}}</a></td>             <td>{{data.name}}</td>             <td>{{data.pubdate | formatdatetime}}</td>             <td>{{data.view}}</td>             <!-- <td>{{data.title}}</td>             <td>{{data.title}}</td> -->         </tr>         {% endfor %}         <!--반복되는 구간 끝-->     </tbody> </table> {% if block_start - 1 > 0 %}     <a href="{{url_for('lists', page=block_start - 1, search=search, keyword=keyword)}}">[이전]</a> {% endif %} {% for i in range(block_start, block_last + 1) %}     {% if i > last_page %}         <!-- {{ i }} -->     {% else %}         {% if i == page %}             <b>{{i}}</b>         {% else %}             <a href="{{url_for('lists', page=i, search=search, keyword=keyword)}}">{{ i }}</a>         {% endif %}     {% endif %} {% endfor %} {% if block_last < last_page %}     <a href="{{url_for('lists', page=block_last + 1, search=search, keyword=keyword)}}">[다음]</a> {% endif %} <select name="search" id="search">     <option value="">검색대상</option>     <option value="0">제목</option>     <option value="1">내용</option>     <option value="2">제목+내용</option>     <option value="3">작성자</option> </select> <input type="text" name="keyword" id="keyword" > <input type="button" value="검색" onclick="search()"> {% else %} <h3>테이터가 없습니다</h3> {% endif %}

1
김태근 프로필

postgresql 연결 관련 김태근 24일 전
플라스크에서 postgresql 에 db생성은 어떻게 하는지 궁금합니다. 또한 기존에 이미 생성된 db에 접숙하는 방법은 어떻게 하는지도 알고 싶네요.

1
meduremi 프로필

몽고DB 강좌에서 잘 실행이 안되는 부분이 있습니다. meduremi 25일 전
안녕하세요. 선생님 강의를 잘 듣고 있습니다. 제 11강 파이썬에서 몽고DB, PyMongo 기본문법이해하기 동영상 강의에서, 22분24초에서 강의하시는 부분에서,   32째줄에 있는 부분인 results = col.find({"나이" : { "$gt" : 50,"$lt":61}},{"_id": False, "이름": True,"거주지":True}).sort(-1).skip(1).limit(3) 에서,  sort(-1)을 추가하기 전까지 잘 실행이 됬는데, sort(-1)을 추가하면서 잘 되지 않고 error 가 나옵니다.  아래 그림에 error 문구가 나오는데, 해결할수 있는 방법이 없을까요?

2
김락영 프로필

자동완성 관련해서 질문드려요 김락영 26일 전
col.이후 자동완성이 안되는데 다른부분은 내장함수를 잘 찾는데 저 부분만 그러는데 왜그러는지 알수 있을까요?안되니까 너무 답답하네요

1
nayeon kim 프로필

파이썬 가상환경 설정 nayeon kim 1달 전
아나콘다를 d드라이브에 설치해서 따로 파이썬을 설치를 안했는데 만약 c드라이브에 강의와 똑같이 python/myweb 아래에 파이썬 가상환경을 만들려면 어떻게 해야하나요?? 아나콘다 prompt창에서 생성해야 하나요..? 그럼 vscode터미널창을 이용할수 없는건가요?

1
형욱박 프로필

google.py 작성 후 board db에 데이터가 안 생깁니다. 형욱박 1달 전
맥북 카탈리나를 사용하고 있고 db admin에 id/pw가 설정되어 있어 아래와 같이 google.py를 작성했습니다.  import requests from bs4 import BeautifulSoup from pymongo import MongoClient from datetime import datetime client = MongoClient("mongodb://joseph:0430@localhost:27017/admin") #flask pymongo가 아니라 pymongo를 직접 사용 host="localhost", port=27017 db = client.myweb col = db.board # 이렇게 db에 접근을 한다. header = {"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Mobile Safari/537.36"} for i in range(5): #5페이지 정도 결과 반복 url = "https://www.google.com/search?q={}&start={}".format("파이썬", i * 10) # 문자열을 포매팅, 검색어와 페이징을 가져옴 r = requests.get(url, headers=header) bs = BeautifulSoup(r.text, "lxml") lists = bs.select("div.g") for l in lists: current_utc_time = round(datetime.utcnow().timestamp() * 1000) try: title = l.select_one("h3.LC20lb").text contents = l.select_one("div.s").text col.insert_one({ "name": "테스트", "title": title, "contents": contents, "view": 0, "pupdate": current_utc_time }) except: pass 이렇게 하니 아래처럼 DB에 데이터가 쌓이지 않아 문의 드립니다.  왜 데이터가 들어가지 않을까요??  client = MongoClient("mongodb://joseph:0430@localhost:27017/admin") 이걸 MongoClient(host="localhost", port=27017) 이렇게 해도 안됩니다...ㅜㅜ 알려주세요~!!

1
위즈윅 프로필

join.html에서 회원 가입하면 not found로 넘어갑니다. 위즈윅 1달 전
회원가입페이지 만들기 부분에서 not found 오류가 납니다. {% with messages = get_flashed_messages() %} {% if messages %} <script> alert('{{messages[-1]}}'); </script> {% endif %} {% endwith %} <div class="join_container"> <form action="form" method="POST" action="/join"> <div class="form_group"> <label for="name">이름</label> <input type="text" name="name" id="name"> </div> <div class="form_group"> <label for="email">이메일</label> <input type="text" name="email" id="email"> </div> <div class="form_group"> <label for="pass">비밀번호</label> <input type="password" name="pass" id="pass"> </div> <div class="form_group"> <label for="pass2">비밀번호 확인</label> <input type="password" name="pass2" id="pass2"> </div> <div class="form_group"> <input type="submit" value="가입하기"> </div> </form> </div> @app.route('/join', methods=['GET', 'POST']) def member_join(): if request.method == 'POST': name = request.form.get('name', type=str) email = request.form.get('email', type=str) pass1 = request.form.get('pass', type=str) pass2 = request.form.get('pass2', type=str) if name == '' or email == '' or pass1 == '' or pass2 == '': flash('입력되지 않은 값이 있습니다.') return render_template('join.html') if pass1 != pass2: flash('비밀번호가 일치하지 않습니다.') return render_template('join.html') members = mongo.db.members cnt = members.find({'email': email}).count() if cnt > 0: flash('중복된 이메일 주소입니다.') return render_template('join.html') current_utc_time = round(datetime.utcnow().timestamp() * 1000) post = { 'name': name, 'email': email, 'pass': pass1, 'joindate': current_utc_time, 'logintime': '', 'logincount': 0, } members.insert_one(post) return '' else: return render_template('join.html')

2
형욱박 프로필

pymongo.errors.operationfailure 에러는 왜 발생할까요?? 형욱박 2달 전
아래 스크립트 실행 하였고  from flask import Flask from flask import request from flask import render_template from flask_pymongo import PyMongo app = Flask(__name__) app.config["MONGO_URI"] = "mongodb://localhost:27017/myweb" mongo = PyMongo(app) @app.route("/write", methods=["GET", "POST"]) def board_write(): if request.method == "POST": name = request.form.get("name") title = request.form.get("title") contents = request.form.get("contents") print(name, contents, title) board = mongo.db.board post = { "name": name, "title": title, "contents": contents, } board.insert_one(post) return "" else: return render_template("write.html") if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000) 웹페이지에서 값 입력 후 제출 버튼 누르면 아래 에러가 발생합니다.  왜 이러는 걸까요?? 혹시 robo3T에서 어드민을 설정해서 이런걸까요??  뭐 하나 할때마다 이런 에러가 나네요...ㅜㅜ

2
형욱박 프로필

9000번 포트를 바꾸고 저장했는데 여전히 5000번 포트에서 왜 열리나요? 형욱박 2달 전
안녕하세요. 연습 중 포트를 변경해서 웹페이지 재실행 했는데 여전히 5000번 포트에서 열리고 있어요.. from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "<h5>헬로 파이썬</h5>" if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000)

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스