25%
41,250원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
self.location.href = "{{ url_for('inte6')}}?search=" + v_search + "&keyword=" + v_keyword; 여기서 잘못된 부분이 있나요 혹시??
게시판 리스트 구현 부분 공부중인데 function search() { let v_search = $('#search').val() let v_keyword = $('#keyword').val() if( v_search == "" || v_keyword == "") { return false; } else { self.location.href = "{{ url_for('inte6')}}?search=" + v_search + "&keyword=" + v_keyword; }}스크립트 부분 이렇게 구현하고 @app.route('/complain')def inte6(): # 페이지 값 (값이 없는 경우 기본값 1) page = request.args.get("page", default=1, type=int) # 한페이지당 몇개의 게시물을 출력할지 limit = request.args.get("limit", 15, type=int) search = request.args.get("search", -1, type=int) keyword = request.args.get("search", type=str) # 최종적으로 완성된 쿼리를 만들 변수 query = {} # 검색어 상태를 추가할 리스트 변수 search_list = [] if search == 0: search_list.append({"title": {"$regex": keyword}}) elif search == 1: search_list.append({"content": {"$regex": keyword}}) elif search == 2: search_list.append({"title": {"$regex": keyword}}) search_list.append({"content": {"$regex": keyword}}) elif search == 3: search_list.append({"name": {"$regex": keyword}}) # 검색 대상이 한개라도 존재할 경우 query 변수에 $or 리스트를 쿼리 if len(search_list) > 0: query = {"$or": search_list} board = db.dbgood datas = board.find({query}).skip((page - 1)*limit).limit(limit) # 게시물의 총 갯수 tot_count = board.find({query}).count() # 마지막 페이지 수 구하기 last_page_num = math.ceil(tot_count / limit) # 페이지 블럭 사이즈 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('complain.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)서버는 이렇게 구현 했는데계속 "GET /%7B%7Burl_for('inte6')%7D%7D?search=0&keyword=1 HTTP/1.1" 404 -이런 에러가 뜹니다
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
프로필폼 관련 질문입니다 ..!
프로필페이지를 만들어서 이름을 누르면 그 이름의 프로필 링크로 갈수있게 만들고 싶은데 프로필 작성을 게시글 작성과 비슷하게 만들고 idx 를 ida 로 변경했느데 프로필 작성 게시글을 쓰면 바로 프로필 상세보기로 가는데 따로 이름을 눌러서 가지지는 않는데 어떤걸 수정해야 할까요 ..? 프로필 상세보기 @app.route("/portfolio") @login_re def portfolio_view(): ida = request.args.get("ida") if ida is not None: portfolio = mongo.db.portfolio data = portfolio.find_one({"_id": ObjectId(ida)}) if data is not None: results = { "name": session.get("name"), "id": data.get("_id"), "work": data.get("work"), "job": data.get("job"), "phone": data.get("phone"), "youtube": data.get("youtube"), "facebook": data.get("facebook"), "Twitter": data.get("Twitter"), "instagram": data.get("instagram"), "github": data.get("github"), "notion": data.get("notion"), "writer_id": data.get("writer_id", "") } return render_template("portfolio.html", results=results) return abort(404) 프로필 작성 @app.route("/portfolioedit", methods=["GET", "POST"]) def portfolio_edit(): if request.method == "POST": name = session.get("name") write_id = session.get("id") work = request.form.get("work") job = request.form.get("job") phone = request.form.get("phone") youtube = request.form.get("youtube") facebook = request.form.get("facebook") Twitter = request.form.get("Twitter") instagram = request.form.get("instagram") github = request.form.get("github") notion = request.form.get("notion") cr_utc_time = round(datetime.utcnow().timestamp() * 1000) portfolio = mongo.db.portfolio portfolios = { "name": name, "work": work, "job": job, "phone": phone, "youtube": youtube, "facebook": facebook, "Twitter": Twitter, "instagram": instagram, "github": github, "notion": notion, "write_id": write_id, "time": cr_utc_time, } a = portfolio.insert_one(portfolios) return redirect(url_for("portfolio_view", ida=a.inserted_id)) else: return render_template("portfolio_edit.html")
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
getbootstrap.com의 화면이 달라졌네요.
좋은 강의 잘 듣고있습니다. getbootstrap.com의 화면이 설명하시는 화면과 달라졌네요. BootsrapCDN 메뉴도 보이지가 않는데, 어느곳에서 복사해야할지 난감하네요 .
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
터미널에서 실행하는데 오류가 떠요.
from flask import Flask from flask import requast 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, title, contents) 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) 이건 코드고요. (venv) C:\Python\myweb>python run.py Traceback (most recent call last): File "C:\Python\myweb\run.py", line 2, in <module> from flask import requast ImportError: cannot import name 'requast' from 'flask' (C:\Python\myweb\venv\lib\site-packages\flask\__init__.py) (venv) C:\Python\myweb> 이건 터미널 오류 내용입니다. 철자 틀린게 있나싶어서 다 고쳤는데도 이러네요. 도데체 뭐가 문제인지 알고 싶어요.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
게시판 pagination에 대해 질문 드립니다.
안녕하세요 '게시판 리스트' 에 pagination 부분에 질문이 있어 글을 남깁니다. url_for 함수를 사용하여 pagination에 링크를 걸었습니다. block_size 는 10으로 했습니다. 그런데 문제는 1페이지는 괜찮은데 2페이지를 클릭하면 block_size가 이상하게 바뀝니다. 1페이지1 2 3 4 5 6 7 8 9 10 2페이지 클릭11 12 13 14 15 16 17 18 19 20 3페이지를 누르면21 22 23 24 25 26 27 28 29 30 이런식으로 바뀌는데 무엇이 문제인가요??
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
sudo systemctl restart myweb 에서 에러 메세지가 나옵니다
안녕하세요 sudo systemctl restart myweb 에서 에러 메세지가 나오는데 무슨 말인지 잘 모르겠습니다. ㅠㅠ restart myweb은 문제가 없어서 무시하고 이 뒤로 계속 진행해봤는데요, 역시 브라우저에서 접속이 안됩니다. 뭐가 문제일까요? ㅠㅠ
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
정규표현식
정규표현식 쪽에서 이상한 현상이 생깁니다. 한글파일명에 한정되는 현상이며, 올바른 경로에 파일 저장 및 데이터베이스에도 기록되어 있으나 이름이 이상하게 바뀌어집니다. common.py파일에서 출력하면 파일이름은 날라가고 txt만남게 됩니다. 근데 이상한 점은 코드를 그대로 맥 터미널에서 실행시키면 문제가 없이 실행됩니다. 디버깅을 위해 노력해본 결과 정규표현식에서 문제인 것 같습니다. print(reg.sub('', '_'.join(filename.split()))) 실행시 .txt만 남게 출력됩니다. 맥 터미널에서는 잘 되는데 왜 여기서만 안돼는지 대체 이유가 뭘까요? 코드가 같은데 실행결과가 다르니.. 어떻게 해결해야할지 ㅠ 파이썬 버전은 둘 다 3.8.5 입니다. 아래는 코드 및 실행결과 첨부합니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
궁금한점이 있어 질문드립니다
우분투에서 별도로 flask를 설치하지 않아도 기존 소스를 가져와 실행하는데 문제되지 않는 걸까요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
google.py 데이터가 안생깁니다.
3시간 가까이. 고민하고 찾아보고 해도 도저히 해결방법을 못찾겠습니다.. 디비를 못넣으면 수업진도를 나갈수가 없으니, 괴롭네요 문제점이 무엇인지 알려주시면 정말 감사하겠습니다. ---아래는 코드----- import requests from bs4 import BeautifulSoup from pymongo import MongoClient from datetime import datetime # 몽고DB client = MongoClient(host="localhost", port=27017) # myweb 데이터베이스 db = client.myweb # board 컬렉션 col = db.board # 구글 검색시 헤더값을 설저하지 않으면 브라우저에서 보이는것과 다른 결과가 나옴 header = { "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36"} # 검색 결과의 5페이지까지만 수집 for i in range(6): # 구글 검색 URL, 검색어는 파이썬 url = "https://www.google.com/search?q={}&start={}".format("파이썬", i * 10) # url 접속 r = requests.get(url, headers=header) # 웹페이지의 검색 결과를 파싱하기 위한 준비 # lxml 라이브러리 사용(설치 요망) bs = BeautifulSoup(r.text, "lxml") # 검색 결과는 div 태그의 g 클래스 단위로 반복됨 lists = bs.select("div.CAEQAA") # 검색결과 루프 for l in lists: # 게시물 작성시간 기록을 위해 현재시간 저장 (utc 타임) current_utc_time = round(datetime.utcnow().timestamp() * 1000) try: # 검색 결과의 제목은 h3 태그의 LC20lb 클래스에 있음 title = l.select_one("div.V7Sr0.p5AXld.PpBGzd.YcUVQe").text # 검색결과의 요약내용은 div 태그의 s 클래스에 있음 contents = l.select_one("div.MUxGbd.yDYNvb").text # 몽고DB에 저장 # 작성자와 writer_id 설정 필요 col.insert_one({ "name": "테스터", "title": title, "contents": contents, "view": 0, "pubdate": current_utc_time }) except: pass
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
강의 자료는 (코드) 어디서 다운 받을수있나요?
수업 열심히 듣고있습니다. 강의 자료가 혹시 따로 있는지 궁금합니다. 화면을보고 따라 코딩하는대도 , 실행이 안될때가 있네요. 강의 자료가 있다면 어디서 다운받을수 있는지 알려주세요~
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
계속 502 Bad Gateway가 뜹니다.
강의 그대로 2번을 따라했는데도 27분쯤에 nginx와 myweb을 재시작하고 나서 9200번 포트로 접속할 때 접속이 되질 않습니다. 2번을 했는데도 안되서 컴퓨터 포맷을 한 뒤에 아무것도 안한 상태에서 Hyper-V만 가동시켜서 또 똑같이 따라했는데도 마찬가집니다. 그리고 마지막엔 파일도 그냥 아무것도 안넣고 run.py만 작성한 상태에서 접속 해봤는데도 502만 뜹니다. 뭐가 문제인지 502 Bad Gateway에 대해서 미친듯이 검색해 봤는데도 능력이 부족해서 해결책을 못찾겠습니다. 강의를 따라하면서 달랐던 것은 1도 없습니다. 하루종일 이것만 하다가 시간을 다 보냈습니다. 제가 문제를 어떻게 해결할 수 있을까요? 지난 번에 했을 때는 잘 됐는데 왜 안되는지 모르겠습니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
이미지 업로드 시 작성된 코드 질문입니다.
첫번째 질문입니다. 이전 강좌에서는 코드에 @blueprint.route 추가하면 뒤에 따라오는 ("/list") 이런식의 값이 사용자가 직접 입력하는 주소를 의미했잖아요? (GET과 POST가 서로 다른 방식으로 작동한다는 것은 이해하고 있습니다.) 그럼 이미지 업로드 강의 내용 중에 ajax 통신을 하기 위해 @blueprint.route("/upload_image") 라는 코드를 작성하셨는데 그러면 ajax 통신을 할 때 눈에는 보이지 않지만 가상의 페이지를 통해서 이미지를 주고 받는건가요? 두번째 질문입니다. upload_image 함수를 만드신 다음에 board_images 라는 함수를 만드셨는데 이 함수 내용이 리턴밖에 없습니다. 그러면 굳이 함수를 나눌 필요 없이 upload_image에서 같이 묶어서 처리할 수는 없는건가요? 명확한 기능 구분을 위해서 따로 나눈건지 아니면 url_for 함수와 send_from_directory 함수는 리턴 값으로만 넘길 수 있는건가요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
파일 업로드에 대하여
안녕하세요 파일 업로드를 할때 파일명 저장이 제대로 되지 않아서 질문하게 되었습니다! 강사님처럼 '연습.txt'를 업로드 했더니 DB와 uploads 폴더 안에는 txt 이름만 저장되며, view에서 파일명도 "txt"(확장자도 없이) 라고 뜹니다.. 강사님과 똑같이 따라한 것 같은데 무엇이 문제인지 모르겠습니다ㅠㅠ 영어 파일명으로 파일 업로드를 하면 정상적으로 잘 작동됩니다!! 한글로 하면 안돼요..!
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
GCP ssh 인증?오류
잘 사용하다가 어느 순간 부터 메타데이터에서 값을 못받아서 인스턴스 접속이 안됩니다.. ssh를 지우고 새로 생성해도 해결이 안되네요..(우분투 환경이라 명령어로 생성햇습니다) 계속 이전에 생성했던 ssh가 뜨는데, 키 값 마지막 부분에 expireOn:"2020-11-26~...라고 항상 만료날짜가 적혀있습니다.
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
안녕하세요. 모듈에서 오류가 자꾸뜨네요!
강의를 똑같이 따라해봤는데요. 오류가 뜨네요..ㅜㅠ from main import * 를 했는데, app 이 undefined 라고 합니다..! pylint install도 해봤고, 아예 import를 따로도 해봤는데 같은 문제가 발생하네요! 어떻게 해결할 수 있을까요?? 구글에서는 보통 app을 import하지 않고 먼저 사용했을 때 이런 오류가 발생한다고 하는데, from main import *로 app을 분명히 정의한 것 같은데 왜 안되는지 모르겠습니다. (참고로 @ 와 app 사이에 띄어쓰기는 다시 붙였습니다!) 아래는 제 코드 붙여놓겠습니다! 에러는 다음과 같습니다. init.py from . import member from . import board from .filter import format_datetime from .common import login_required from flask import Flask, request, render_template, abort, url_for from flask import redirect from flask import flash, session from flask_pymongo import PyMongo from datetime import datetime, timedelta from bson.objectid import ObjectId import time import math app = Flask(__name__) app.config["MONGO_URI"] = "mongodb://localhost:27017/myweb" app.config["SECRET_KEY"] = "abcd" app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(minutes=30) mongo = PyMongo(app) run.py from main import app if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000) member.py from main import * @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") @app.route("/login", methods=["GET", "POST"]) def member_login(): if request.method == "POST": email = request.form.get("email") password = request.form.get("pass") next_url = request.form.get("next_url") members = mongo.db.members data = members.find_one({"email": email}) if data is None: flash("회원 정보가 없습니다.") return redirect(url_for("member_login")) else: if data.get("pass") == password: session["email"] = email session["name"] = data.get("name") session["id"] = str(data.get("_id")) session.permanent = True if next_url is not None: return redirect(next_url) else: return redirect(url_for("lists")) return redirect(url_for("lists")) else: flash("비밀번호가 일치하지 않습니다.") return redirect(url_for("member_login")) return "" else: next_url = request.args.get("next_url", type=str) if next_url is not None: return render_template("login.html", next_url=next_url) else: return render_template("login.html")
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
로그아웃 기능에 대해서
안녕하세요 강사님! 강의 내용이 제가 찾던 내용과 아주 잘 맞아서 즐겁게 공부하고 있는 수강생입니다. 제가 입문과정까지 수강을 하였는데요 로그아웃기능이 강의 내용에는 없는건가요? 일정한 시간이 지나면 접속이 끊어지는 것 뿐만 아니라 사용자가 임의적으로 로그아웃 버튼을 눌르면 로그아웃이 되도록 만들고 싶습니다! 도와주세요 또, 한가지 여쭤보고 싶은 사항이 있습니다. 장고에서는 is_authenticated 를 사용하여 로그인 여부를 판단했었습니다. 그래서 로그인이 되어 있지 않다면 회원가입과 로그인 버튼이 로그인이 되어 있다면 로그아웃 버튼이 활성화 되도록 만들고 싶은데 이 부분에 알고 계신 내용이 있다면 답변 부탁드립니다. 좋은 강의 만들어주셔서 정말 감사합니다 :)
- 해결됨남박사의 파이썬으로 실전 웹사이트 만들기
재시작을 해도 로그아웃이 안되네요!
python run.py로 재시작하고 웹사이트를 새로고침하면 남박사님은 로그인 정보가 없어지고 로그아웃되는 것 같은데요. 저는 안되네요!! 원래 그럴수도 있는걸까요??? @ app.route("/login", methods=["GET", "POST"]) def member_login(): if request.method == "POST": email = request.form.get("email") password = request.form.get("pass") next_url = request.form.get("next_url") members = mongo.db.members data = members.find_one({"email": email}) if data is None: flash("회원 정보가 없습니다.") return redirect(url_for("member_login")) else: if data.get("pass") == password: session["email"] = email session["name"] = data.get("name") session["id"] = str(data.get("_id")) session.permanent = True if next_url is not None: return redirect(next_url) else: return redirect(url_for("lists")) return redirect(url_for("lists")) else: flash("비밀번호가 일치하지 않습니다.") return redirect(url_for("member_login")) return "" else: next_url = request.args.get("next_url", type=str) if next_url is not None: return render_template("login.html", next_url=next_url) else: return render_template("login.html")
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
messages가 복수개?
messages가 복수개이고 [-1]을 통해서 가장 마지막 메시지를 가져온다고 하셨는데요. 왜 가장 마지막인가요?? [0]을 해도 같은 결과값이 나오는데 굳이 -1로 한 이유가 있을까요?
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
venv 에 대해서 궁금한 점이 있어요!
남박사님이랑 똑같이 여러번 따라해봐도 (venv)는 화면에 표시되지 않는데요. 버전때문에 나타나지 않을 수도 있는건가요?? 아래 venv 생성안되는 사람을 위해 올려놓으신 분꺼 따라해봐도 결과는 똑같네요! 가상환경이 제대로 실행되고 있는데도 불구하고 표시가 안될수도 있나요? 참고로 select interpreter, command prompt 등 남박사님이 말씀해주신 부분에서 딱히 문제는 없었습니다!
- 미해결남박사의 파이썬으로 실전 웹사이트 만들기
(venv)가 생성되지 않을 경우에 참고하세요.
질문은 아닙니다. 제가 몇 달 전에 강의를 보면서 저도 같은 증상을 겪었었는데 강의를 다시 와보니 다른 분들도 똑같은 상황을 겪는거 같아서 제가 해결한 방법을 알려드릴테니 한 번 해보시기 바랍니다. 윈도우 시작 버튼을 누르고 PowerShell 이라고 치면 PowerShell 관련 버튼이 생깁니다. 관리자권한으로 실행하시고 나서 Set-ExecutionPolicy Unrestricted를 입력하시고(대소문자 무관) Y를 입력하시고 엔터를 누르시면 됩니다. 그리고나서 다시 VSC로 돌아와서 venv\Scripts\activate.ps1 하시면 됩니다. 저는 일단 이 방법으로 해결이 됐습니다만 이렇게 해도 안될 경우는 저도 잘 모르겠습니다. 도움이 되셨길 바랍니다.