25%
41,250원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
docker 에서 static 폴더 찾기
안녕하세요 강사님. 윈도우에서는 아래의 옵션으로 jquery 를 사용했는데, <script src="{{url_for('static', filename='jquery-3.5.1.js')}}"></script> 도커에서는 해당 파일을 찾지 못하고 있습니다. 어떻게 처리해야 하나요? 감사합니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
ajax 댓글 추가 관련 문의 - comment_write() 의 return jsonify() or url_for()
좋은 강의 감사드립니다. 자바스크립트로 댓글추가는 아래와 같이 했습니다. 그 후에 board.py에서 comment_write 리턴을 return jsonify(error="success") 처리하는게 좋은가요? 아니면 redirect 하는게 좋은가요? ==> redirect(url_for("board.board_view", idx=root_idx)) 다른 ajax 리턴은 모두 jsonify 로 처리되어 있는데, comment_write 만 그대로여서 문의 드립니다. 추가적으로 "redirect(url_for("board.board_view", idx=root_idx)) " 를 호출하니, view 카운트도 댓글달때마다 증가합니다. <jsonify > 경우 <redirect(url_for("board.board_view", idx=root_idx)) > 경우, view 다름라인에 comment_list 가 보입니다. <jsonify > 경우 <redirect(url_for("board.board_view", idx=root_idx)) > 경우
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
edit.html - 그림표시문의.
안녕하세요. 강사님. 혹시 edit 화면에서 테그로 보이는데, 이건 어떻게 처리하면 view 화면처럼 그림으로 보이게 할수 있나요? {% autoescape false %}{{data.contents}}{% endautoescape %} 옵션을 넣었는데도 edit 화면에서는 <p><img src="/board/images/j7p2JQmN.jpg" style="max-width: 900px;"><img src="/board/images/nmEgwKkv.jpg" style="max-width: 900px;"><img src="/board/images/z3PkW0xO.jpg" style="max-width: 900px;"><br></p> 처럼 테그로 나옵니다. 답변 부탁드립니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
import 문의 - 폴더위치 및 파일명, 함수명
안녕하세요 강사님. 현재 파일구조는 위와 같습니다. 각 파일별 import 규칙이 다른데, 관련하여 문의 드립니다. run.py - from main import app / 하위폴더인 main 폴더를 찾고, init의 변수명. init.py - from .common import login_required / 현재폴더의 common 파일을 찾고 거기서 함수명. from .filter import format_datetime / 현재폴더의 filter 파일을 찾고 거기서 함수명. from . import board / 여기서는 현재폴더의 파일명. from . import member / 여기서는 현재폴더의 파일명. board.py - from main import * / 현재폴더명의 모든것. 질문은 아래와 같습니다. 1. init.py - from .common import login_required ==> from . import common 으로 표기해도 되나요? 2. init.py - from . import board ==> from .board import * 으로 표기해도 되나요? 3. board.py - from main import * ==> from . import __init__ 으로 표기해도 되나요? 4. run.py - from main import app ==> from .main import app 으로 표기해도 되나요? 어떤 경우는 현재폴더의 파일명/함수명, 현재폴더/파일명, 현재폴더명/*, 하위폴더명/하위폴더의__init__의 변수명, 등등, from/import의 규칙 및 구조가 궁금해서 문의드립니다. 감사합니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
제출 클릭 이후 아무런 반응이 없습니다.
안녕하세요. 강의를 따라서 코드를 작성하다가 걸리는 부분이 하나 있어 질문 남깁니다. 작성자, 제목, 내용까지 localhost:9000/write를 열면 잘 떴습니다. 그런데, 제출 버튼을 누르고 나면 아무런 반응이 없습니다. 컴퓨터의 설정이 잘못되서 그런걸까요? 문법 에러도 특별한 것 없고, 코드도 똑같이 했습니다. 혹시 가상환경 문제인가 해서 로컬로 했는데도 '제출' 이후 단계가 진행되질 않네요. from flask import Flask from flask import request from flask import render_template app = Flask(__name__) @app.route("/write", methods=["GET", "POST"]) def board_write(): if request.method == "POST": name = request.method.get("name") title = request.method.get("title") contents = request.method.get("contents") return "" else: return render_template("write.html") if __name__ == "__main__": app.run()
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
flask_pymongo 패키지 문의.
안녕하세요 강사님. flask_pymongo 대신에 "from pymongo import MongoClient" 패키지 사용중입니다. 접속과 insert/select 시 아직까지는 어려움이 없는데, 혹시 차후 교육과정에서 안되는 부분이 있는지 문의 드립니다. flask_pymongo가 conda에 없어서 문의 드립니다. 감사합니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
bson 설치후 오류, from flask_pymongo import PyMongo
안녕하세요. bson을 설치한 이후에 아래와 같이 오류가 납니다. (env_doc) D:\workspace\python36\DocN_web>python run.py Traceback (most recent call last): File "run.py", line 4, in <module> from flask_pymongo import PyMongo File "C:\Anaconda3\envs\env_doc\lib\site-packages\flask_pymongo\__init__.py", line 35, in <module> from gridfs import GridFS, NoFile File "C:\Anaconda3\envs\env_doc\lib\site-packages\gridfs\__init__.py", line 23, in <module> from bson.py3compat import abc ImportError: cannot import name 'abc' 아래처럼 삭제하고 다시 설치하면 되는데, bson 을 설치하면 다시 오류가 발생합니다. 혹시 버전이나 설치시 주의 사항이 있나요? pip uninstall bson pip uninstall pymongo pip uninstall flask-pymongo pip install flask-pymongo pip install pymongo --bson을 설치하면 다시 오류가 발생합니다. pip install bson 답변 부탁드립니다. 감사합니다.
- 남박사의 파이썬으로 실전 웹사이트 만들기
크롬에서 비밀번호 변경 경고 문구가 나옵니다.
삭제된 글입니다
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
jinja2 오류
글 리스트 강의 보고 있는 중입니다. 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 입니다...ㅜㅜ 왜 이러는 걸까요..?ㅜㅜ
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
GCP 환경에서 코드 수정사항을 반영하려면 어떻게 해야하나요?
안녕하세요, 박사님. 강의 시청은 모두 완료하고 크게 발생한 에러는 없었는데, 소스코드 수정사항을 반영하려면 어떻게 해야할지 문의 드립니다. 이전 강의(Docker이미지로 만들어 배포)를 살펴보면, 이미지 경로 수정을 위해서 run.py 등등을 우분투 환경에 옮겨서 docker를 다시 build하고 docker run을 다시 해주셨는데요. gcp 환경에서도 소스코드 수정 사항을 반영하려면 docker를 다시 build하고 docker run을 다시 해주면 되는건가요? 매번 수정할 때마다 이러한 과정을 거치는지 궁금합니다. 소스코드 수정사항을 실제 웹사이트에 반영할 때 좀 더 간편한 방법이 있을까요?
- 해결됨남박사의 파이썬으로 실전 웹사이트 만들기
게시판만들기-글상세보기 부분에 대한 질문입니다. return value.strftime(...) 에서 에러가 나네요
안녕하세요. 게시판 글상세보기 17분 50초 정도에서, return valve.strftime('%Y - %m - %D %H:%M:%S') 문장에서 syntax error 가 나오네요. 내용을 그대로 따라했는데 errori 나서 질문드립니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
검색창 자동완성 기능
검색어 자동완성 기능은 어떻게 할수 있는지요? 참고할만한 내용이라도 알려주세요
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
안녕하십니까 이미지 파일 업로드 부분 관련하여 질문 드립니다!
안녕하십니까 이런 부분으로 질문드리게 되어 죄송합니다 ㅠ 다만 이미지 업로드 부분에서 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 항목 역시 첨부했습니다
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
오류 확인 부탁 드려요.. ㅠㅠ
오류 확인 부탁 드려요.. ㅠㅠ
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
게속 오류떠요
고쳐도 수용없어요 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 %}
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
postgresql 연결 관련
플라스크에서 postgresql 에 db생성은 어떻게 하는지 궁금합니다. 또한 기존에 이미 생성된 db에 접숙하는 방법은 어떻게 하는지도 알고 싶네요.
- 해결됨남박사의 파이썬으로 실전 웹사이트 만들기
몽고DB 강좌에서 잘 실행이 안되는 부분이 있습니다.
안녕하세요. 선생님 강의를 잘 듣고 있습니다. 제 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 문구가 나오는데, 해결할수 있는 방법이 없을까요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
자동완성 관련해서 질문드려요
col.이후 자동완성이 안되는데 다른부분은 내장함수를 잘 찾는데 저 부분만 그러는데 왜그러는지 알수 있을까요?안되니까 너무 답답하네요
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
파이썬 가상환경 설정
아나콘다를 d드라이브에 설치해서 따로 파이썬을 설치를 안했는데 만약 c드라이브에 강의와 똑같이 python/myweb 아래에 파이썬 가상환경을 만들려면 어떻게 해야하나요?? 아나콘다 prompt창에서 생성해야 하나요..? 그럼 vscode터미널창을 이용할수 없는건가요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
google.py 작성 후 board db에 데이터가 안 생깁니다.
맥북 카탈리나를 사용하고 있고 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) 이렇게 해도 안됩니다...ㅜㅜ 알려주세요~!!