55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
cnt = members.find({"email": email}).count() 관련 질문입니다 !
안녕하세요 강의 잘 보고있습니다.cnt = members.find({"email": email}).count() 관련해서 질문이 있는데요, 저번 강의에서도 find().count()에 버전 관련 오류가 발생했었고 이번에도 당연히 [AttributeError: 'Cursor' object has no attribute 'count’] 오류가 발생했는데요, 그래서 구글링을 통해 cnt = members.collection.estimated_document_count({"email": email}) if cnt > 0: flash("중복된 이메일 주소입니다.") return render_template("join.html")collection.estimated_document_count({"email": email}) 를 찾아서 적용했고 커서 오류를 해결했습니다. 이렇게 회원가입 db를 members로 잘 넘겼는데요, 이메일 주소 중복 부분에서 시크릿키 적용을 한 후에도 이메일이 중복돼도 회원가입이 되고 db가 넘어가더라구요.그래서 또 구글링을 했고 cnt = members.count_documents({"email": email}) if cnt > 0: flash("중복된 이메일 주소입니다.") return render_template("join.html")count_documents({"email": email})코드로 문제 해결을 하기는 했는데요, 여기서 'count_documents'와 'collection.estimated_document_count'의 차이를 알고싶습니다. 아무리 찾아봐도 차이점을 못찾겠어요. 차이점 알려주시면 감사하겠습니다 ! 부탁드려요 !
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
robo3T 처음 접속시 문의드려요
robo 3t설치하려고했더니 studio 3t free로 이름 바뀌었더라구요구동시켜서 초기설정에 uri 입력란이 나오는데 어떻게 해야할지모르겠어요
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
ajax에서 dataType 문의 드립니다.
수업내용 29분 11초 근처입니다 get_comment_list() 함수를 만들때는ajax에서 dataType : "json" 으로 했는데 deleteComment() 함수는ajax에서 dataType을 따로 정해주지 않았습니다board.py에서 jsoniyf로 값을 리턴하니까dataType을 json으로 정해하는거 아닌지 궁금합니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
13:49초 TypeError: 'int' object is not iterable 어떻게 해결해야 할까요?
강의 13:49초 부분에서 처음에는 Not found 라고 나오고 다른 사람들이 질문한 내용을 토대로 수정-실행 반복을 통해 TypeError: 'int' object is not iterable 메세지에서 해결을 못하고 있습니다. 어디가 잘못됐으며 어떻게 해결을 해야할까요? @app.route("/list") def lists(): board = mongo.db.board datas = board.count_documents({}) return render_template("list.html", datas=list(datas)) {% if datas.count_documents() > 0 %} <!--위에 count_documents() 부분은 count, length 로 해도 문제가 발생합니다 -->{% if datas.count_documents() > 0 %} <!--위에 count_documents() 부분은 count, length 로 해도 문제가 발생합니다 --> <table> <thead> <tr> <td>번호</td> <td>제목</td> <td>이름</td> <td>날짜</td> <td>조회수</td> </tr> </thead> <tbody> <!--(주석) 반복되는 구간--> {% for data in datas %} <tr> <td></td> <td>{{data.title}}</td> <td>{{data.name}}</td> <td>{{data.pubdate}}</td> <td>{{data.view}}</td> </tr> {% endfor %} <!--반복되는 구간 끝--> </tbody> </table> {% else %} <h3>데이터가 존재하지 않습니다.</h3> {% endif %}
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
ajax로 comment 작성 문의 드립니다.
댓글을 작성하는 함수입니다.function addComment() { $.ajax({ url: "{{ url_for('board.comment_write') }}", cache: false, type: 'post', data: $("#commentForm").serialize(), success: function(data) { $('#comment').val(''); get_comment_list(); console.log('가나다'); }, error : function(request, status, error) { var msg = "Error : " + request.status + "<br>"; msg += "내용 : " + request.responseText + "<br>" + error; console.log(msg); } }); }코드를 작성하고, 코멘트를 작성했는데, 계속 코멘트가 안먹혀서, 한참을 살펴보니,코드를 작성하는 와중에, 로그인이 풀렸었습니다.로그인이 안된상태라면@login_requreid 데코레이터로 인하여, 로그인 페이지로 넘어가야 하는데, ajax로 commet_write를 접근해서 그런지로그인 페이지로 가지지 않습니다. ajax로 아닌 상황에서는 로그인 페이지로 잘 이동하기때문에 문의글 남겨요 예를 들어서 로그인안하고글작성 클릭하면, 로그인 페이지로 잘 넘어 갑니다. ajax일때는 login_required가 작동하지 않는 것일까요?정확히 말하면 > member/login으로 이동하지 않습니다아래 코드는 vscode 터미날 창 내용입니다192.168.1.13 - - [12/Oct/2022 20:43:53] "GET /member/login?next_url=http%3A%2F%2F192.168.1.13%3A9000%2Fboard%2Fcomment_write HTTP/1.1" 200 - login_required 코드도 남겨봅니다.def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if session.get('id') is None or session.get('id') == '': print(f'로긴 리콰이어드의 request.url : {request.url}') return redirect(url_for('member.member_login', next_url=request.url)) return f(*args, **kwargs) return decorated_function login_requried 함수가 잘 동작해서, 로긴 페이지로 이동하게 하려면 어떻게 해야 할까요?
- 해결됨남박사의 파이썬으로 실전 웹사이트 만들기
title 부분이 null 로 저장됩니다
안녕하세요 강의 잘 듣고있습니다.강의 처음부터 끝까지 잘 따라했고 문제없이 실행되는데 title 부분이 null로 저정됩니다.크롭에서 내용 입력하고 제출은 문제 없이 잘 됩니다.vscode 에서 터미널로 결과를 볼때는 none 이라고 나오구요 print(name, title, contents)>테스터 None ㅎㅎㅎㅎㅎㅎfrom flask import Flask from flask import request from flask import render_template from flask_pymongo import PyMongo from datetime import datetime 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, 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 str(x.inserted_id) else: return render_template("write.html") if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000) write.html<html> <body> <table> <form name="form" method="POST" action="/write"> <tr> <td>작성자</td> <td><input type="text" name="name"></td> </tr> <tr> <td>제목</td> <td><input type="text" name="title>"></td> </tr> <tr> <td>내용</td> <td><textarea name="contents"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit"></td> </tr> </form> </table> </body> </html> 뭐가 문제일까요?...?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
summernote onImageUpload 함수 문의 드려요
글 작성 폼에 HTML 에디터 기능 추가하기해당 강의중 11분 40초 쯤 내용 입니다 onImageUpload 함수는summernote에서 제공 하는 함수로 이해되는데제가 생각하는게 맞는지 궁금하여 문의 드립니다 그리고 onImageUpload 함수가 이미지 업로드시감시해서 작동하는건가요?아니면 callbacks가 이미지업로드를 감시해서 작동하는건지도궁금합니다 알려주시면 감사하겠습니다
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
$('#t' + idx).html(html) 기능 질문
댓글에서 수정버튼을 누르면 저장과 취소 버튼이 활성화 되는데요.이때 editcomment함수의 $('#t' + idx).html(html)는해당하는 t+id의 <td> </td> 사이 값의 html에만 변화를 주는건가요?? 임시로 t + id 값을 주는 것이지요??
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
html에 mongodb 값 넘기는 방법 문의 드립니다
강의내용 7분 39초 정도 내용입니다 @app.route("/view") def board_view(): 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)위처럼board를 find_one하고find한 값을result딕셔너리를 만들어서view.html에 result=result 이렇게 값을 넘겨줍니다제가 테스트로 result를 만들지 않고find_one한 결과를"data = board.find_one({"_id": ObjectId(idx)})"return render_template('view.html', data=data)data=data 이런식으로 view.html에 넘기고html에서{{data.title}}{{data.name}}이런식으로 값을 출력해보니값을 잘 받아 옵니다.result라는 딕셔너리를 만들어서, 값을 넘기는 이유가 뭔지 궁금해서 문의 드립니다.!!
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
이썬에서 몽고DB, PyMongo 기본 문법 이해하기 오류가 뜨네요
import pymongo m = { "이름": "임권일", "나이": 31, "거주지": "울산", } conn = pymongo.MongoClient("localhost", 27017) db = conn.test col = db.members col.insert(m) 이렇게 적었는데 이런오류가뜨네요 오류가 뜨네요PS C:\MongoTest> python test.pyTraceback (most recent call last):File "C:\MongoTest\test.py", line 13, in <module>col.insert(m)File "C:\Program Files\Python310\lib\site-packages\pymongo\collection.py", line 3200, in callraise TypeError(TypeError: 'Collection' object is not callable. If you meant to call the 'insert' method on a 'Collection' object it is failing because no such method exists
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
파이썬에서 몽고DB, PyMongo 기본 문법 이해하기 강의 오류가있네요
import pymongo m = { "이름": "임권일", "나이": 31, "거주지": "울산", } conn = pymongo.MongoClient("localhost", 27017) db = conn.test col = db.members col.insert(m) 이렇게 적었는데 이런오류가뜨네요PS C:\MongoTest> python test.pyTraceback (most recent call last):File "C:\MongoTest\test.py", line 13, in <module>col.insert(m)File "C:\Program Files\Python310\lib\site-packages\pymongo\collection.py", line 3200, in callraise TypeError(TypeError: 'Collection' object is not callable. If you meant to call the 'insert' method on a 'Collection' object it is failing because no such method exists.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
에러문의
6분 44초까지 코드 완성했는데 이런 에러가 뜨네요(빌드에러)이전까지는 다 잘 됐습니다.제 코드 입니다.@blueprint.route("/comment_write", methods=["POST"]) @login_required def comment_write(): if request.method == "POST": name = session.get("name") writer_id = session.get("id") root_idx = request.form.get("rood_idx") comment = request.form.get("comment") current_utc_time = round(datetime.utcnow().timestamp() * 1000) c_comment = mongo.db.comment post = { "root_idx": str(root_idx), "writer_id": writer_id, "name": name, "comment": comment, "pubdate": current_utc_time } c_comment.insert_one(post) return redirect(url_for("board.board_view", idx=root_idx)) 아래는 뷰 html 코드입니다. <form id="commentForm" name="commentForm" action="{{url_for('board.comment_write')}}" method="POST"> <input type="hidden" name="csrf_token" value="{{csrf_token()}}"> <input type="hidden" name="root_idx" value="{{result.id}}"> <div> <span><strong>댓글</strong></span> <span id="cCnt"></span> <table class="table"> <tr> <td><textarea rows="3" cols="110" id="comment" name="comment" playholder="댓글을 입력하세요."></textarea></td> <td><input type="submit" class="btn btn-success" style="height:80px;" value="등록하기"></td> </tr> </table> </div> </form>아래는 board_view 코드입니다.@blueprint.route("/view/<idx>") @login_required def board_view(idx): if idx is not None: page = request.args.get("page") search = request.args.get("search") keyword = request.args.get("keyword") board = mongo.db.board #data = board.find_one({"_id": ObjectId(idx)}) data = board.find_one_and_update({"_id": ObjectId(idx)}, {"$inc": {"view": 1}}, return_document=True) 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"), "writer_id": data.get("writer_id", ""), "attachfile": data.get("attachfile", "") } return render_template("view.html", result=result, page=page, search=search, keyword=keyword, title="글상세보기") return abort(404) 그래서 board_view 부분을 바꿨는데요 @blueprint.route("/view") @login_required def board_view(): idx = request.args.get("idx") if idx is not None: page = request.args.get("page") search = request.args.get("search") keyword = request.args.get("keyword") 이런식으로요 그럼 이런 에러가 뜨네요
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
파일이름 체크하는 부분 질문드립니다.
def check_filename(filename): reg = re.compile("[^A-Za-z0-9_.가-힝-]") for s in os.path.sep, os.path.altsep: if s: filename = filename.replace(s, ' ') filename = str(reg.sub('', '_'.join(filename.split()))).strip("._") return filename 부분인데요 만약 파일이름을 ../../filename/.bash 로 입력한다면 파일이름은 filename_.bash로 나와야 하는거 아닌가요? 실제로 실행해보면 filename.bash로나오긴하는데 strip 함수가 왼쪽 오른쪽에서 ._을 제거하지만 중간에 있는 _는 제거하지 못하는 거잖아요? 하나씩 해보자면 1번 .. .. filename .bash 2번 .._.._filename_.bash 3번 filename_.bash 이렇게 3번으로 파일이름이 나오는 것 같은데 실제로 리턴값 출력하면 filename.bash 이렇게 나옵니다. filename_.bash 의 _ 를 어떻게 제거하는지 궁금하네요. 답변 부탁드립니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
ubuntu 버전 문의 드립니다
강의 영상에서 우분투 18.04 LTS버전을 이용하여, 강의를 진행합니다 지금 우분투를 검색하여 다운로드 하려고 해보면 18.04 LTS 말고, 20.04 LTS, 22.04 LTS 버전들이 보입니다. 지금 현시점에서 보면 강의 영상대로 18.04 LTS 버전을 사용하는게 나은지 20.04나 22.04 버전을 이용하는게 나은지 궁금해서 질문드립니다 알려주시면 감사하겠습니다
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
ajax csrf 토큰 설정 문의 드립니다.
if(!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type)){ x.setRequestHeader("X-CSRFToken", csrf_token); } 영상중 위 코드 중에서 if문 로직을 이해 못해서 질문 드려요 질문1. if(!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type)) if문중 s.type 을 출력해보니 "post"로 console에 나옵니다 제가 생각하기에/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type) 이건 false고앞에 !를 붙여서false가 true로 변하게 되는것 같습니다 >> 제가 생각 하는게 맞는지 궁금합니다. 질문2. 질문1의 제 생각이 맞다면 s.type이 post면 if문이 작동하고s.type이 get이면, csrf 토큰 설정이 안되는것이라고 생각 해도 되나요? get방식은 왜, 토큰 설정을 하지 않을까요? 질문3. 14분 22초 영상 말씀을 빌리자면 "세팅타입이GET이나 HEAD나 OPTIONS나 TRACE중 하나면, x객체에 csrf토큰을 추가"한다고 말씀해 주셨습니다. 혹시 "GET이나 HEAD나 OPTIONS나 TRACE중 하나가 아니면, x 객체에 csrf토큰을 추가 하는게 맞는게 아닌지 궁금합니다" 질문4. if문에서끝부문 .test(s.type)는 .test 앞에 있는 객체나 값들이 s.type 이 맞는지 확인하여맞으면 true틀리면 false를 주는 메소드라고 생각해도 되는지 궁금합니다. 항상 좋은 강의 늘 감사드립니다
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
파일(이미지)접근 문의 드립니다
강의 내용 29분 정도 내용입니다 from flask import send_from_directory@bp.route("/images/<filename>")def board_images(filename): return send_from_directory(app.config["BOARD_IMAGE_PATH"], filename) 이미지가 , 작업 폴더 밖에 위치하다보니 send_from_directory를 사용 하여서 접근 하였습니다 그럼 이미지가 작업폴더 안에 위치한다면 os.path.join 으로 접근 하면되는건지 궁금합니다 아니면, 작업폴더 안에 있어도 send_from_directory를 써야 할까요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
Nginx와 Flask 연동 문제
안녕하세요 강의 잘 듣고있습니다:) 강의 9분부터 9분40초사이를 따라해보는데 uWSGI를 통해 Nginx와 Flask 연동이 되지 않습니다. 그리고 호스트도 0.0.0.0:5000이 나오지 않는데 어떻게 해야할까요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
Undefined Error
안녕하세요. 강의 잘 듣고 있습니다. 댓글기능 구현하는 강의 8분 20초부터 따라하는데 count() 함수를 사용하는 부분에서 Undefined Error가 발생합니다. 몽고DB에서 더이상 count()함수를 지원하지 않는다해서 count_documents()함수를 사용해보았는데도 같은 에러가 발생하는데 어떻게 해결할 수 있을까요? jinja2.exceptions.UndefinedError: 'pymongo.cursor.Cursor object' has no attribute 'count'
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
google.py 질문
안녕하세요. 강의 잘 듣고 있습니다. 4분 15초부터 나오는곳을 따라해보고 있는데 질문이 있습니다. lists = bs.select("div.g") 이 부분에는 제가 직접 개발자모드로 들어가보니 class가 div class="g tF2Cxc"로 나오는데 lists = bs.select("div.g.tF2Cxc")를 사용하면 되는건가요? 또 검색결과의 제목은 h3태그를 확인하니 h3 class="LC201b MBeuO DKV0Md"이 나왔고 검색결과의 요약내용은 div태그에서 <div class="VwiC3b yXK7lf MUxGbd yDYNvb lyLwlc lEBKkf" style="-webkit-line-clamp:2"> 이런식으로 길게 나왔습니다. 이럴 경우에는 어떻게 사용해야하나요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
pip install virtualenv 문제
처음 환경설정할 때 pip install virtualenv 커맨드를 사용했는데 이렇게 제가 선택한 폴더(C:\Python\myweb)에 설치가 되지않고 다른곳에 virtualenv가 설치됐습니다. 어떻게 해결해야 할까요? 감사합니다.