Thumbnail
BEST 개발 ・ 프로그래밍 웹 개발
남박사의 파이썬으로 실전 웹사이트 만들기
(4.9)
32개의 수강평 ∙ 526명의 수강생

55,000원

지식공유자 : 남박사
총 38개 수업˙총 12시간 11분
평생 무제한 수강
수료증 발급 강의
초급 대상
이 강의는 멘토링 신청이 가능합니다.
멘토링은 수강 신청과 별개로 운영되며, 수강생이 아니어도 신청할 수 있습니다.
내 목록 추가 500 공유
J k범 프로필

프로필폼 관련 질문입니다 ..! J k범 17일 전
프로필페이지를 만들어서 이름을 누르면 그 이름의 프로필 링크로 갈수있게 만들고 싶은데  프로필 작성을 게시글 작성과 비슷하게 만들고 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")

0
meduremi 프로필

getbootstrap.com의 화면이 달라졌네요. meduremi 19일 전
좋은 강의 잘 듣고있습니다. getbootstrap.com의 화면이 설명하시는 화면과 달라졌네요. BootsrapCDN 메뉴도 보이지가 않는데, 어느곳에서 복사해야할지 난감하네요 . 

2
rossendar 프로필

터미널에서 실행하는데 오류가 떠요. rossendar 29일 전
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> 이건 터미널 오류 내용입니다. 철자 틀린게 있나싶어서 다 고쳤는데도 이러네요. 도데체 뭐가 문제인지 알고 싶어요.

1
company 프로필

게시판 pagination에 대해 질문 드립니다. company 29일 전
안녕하세요 '게시판 리스트' 에 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 이런식으로 바뀌는데 무엇이 문제인가요??

1
남박 프로필

sudo systemctl restart myweb 에서 에러 메세지가 나옵니다 남박 1달 전
안녕하세요 sudo systemctl restart myweb 에서 에러 메세지가 나오는데 무슨 말인지 잘 모르겠습니다. ㅠㅠ restart myweb은 문제가 없어서 무시하고 이 뒤로 계속 진행해봤는데요, 역시 브라우저에서 접속이 안됩니다. 뭐가 문제일까요? ㅠㅠ

2
suhr 프로필

정규표현식 suhr 1달 전
정규표현식 쪽에서 이상한 현상이 생깁니다. 한글파일명에 한정되는 현상이며,  올바른 경로에 파일 저장 및 데이터베이스에도 기록되어 있으나 이름이 이상하게 바뀌어집니다.  common.py파일에서  출력하면 파일이름은 날라가고  txt만남게 됩니다. 근데 이상한 점은 코드를 그대로 맥 터미널에서 실행시키면 문제가 없이 실행됩니다. 디버깅을 위해 노력해본 결과 정규표현식에서 문제인 것 같습니다.  print(reg.sub('', '_'.join(filename.split()))) 실행시 .txt만 남게 출력됩니다. 맥 터미널에서는 잘 되는데 왜 여기서만 안돼는지 대체 이유가 뭘까요? 코드가 같은데 실행결과가 다르니.. 어떻게 해결해야할지 ㅠ  파이썬 버전은 둘 다 3.8.5 입니다. 아래는 코드 및 실행결과 첨부합니다.

2
중사 프로필

궁금한점이 있어 질문드립니다 중사 1달 전
우분투에서 별도로 flask를 설치하지 않아도 기존 소스를 가져와 실행하는데 문제되지 않는 걸까요?

1
Dave lee님 팬 프로필

google.py 데이터가 안생깁니다. Dave lee님 팬 1달 전
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

1
Dave lee님 팬 프로필

강의 자료는 (코드) 어디서 다운 받을수있나요? Dave lee님 팬 1달 전
수업 열심히 듣고있습니다. 강의 자료가 혹시 따로 있는지 궁금합니다. 화면을보고 따라 코딩하는대도 , 실행이 안될때가 있네요. 강의 자료가 있다면 어디서 다운받을수 있는지 알려주세요~

1
너굴너굴너구리 프로필

계속 502 Bad Gateway가 뜹니다. 너굴너굴너구리 1달 전
강의 그대로 2번을 따라했는데도 27분쯤에 nginx와 myweb을 재시작하고 나서 9200번 포트로 접속할 때 접속이 되질 않습니다. 2번을 했는데도 안되서 컴퓨터 포맷을 한 뒤에 아무것도 안한 상태에서 Hyper-V만 가동시켜서 또 똑같이 따라했는데도 마찬가집니다. 그리고 마지막엔 파일도 그냥 아무것도 안넣고 run.py만 작성한 상태에서 접속 해봤는데도 502만 뜹니다. 뭐가 문제인지 502 Bad Gateway에 대해서 미친듯이 검색해 봤는데도 능력이 부족해서 해결책을 못찾겠습니다. 강의를 따라하면서 달랐던 것은 1도 없습니다. 하루종일 이것만 하다가 시간을 다 보냈습니다. 제가 문제를 어떻게 해결할 수 있을까요? 지난 번에 했을 때는 잘 됐는데 왜 안되는지 모르겠습니다.

3
너굴너굴너구리 프로필

이미지 업로드 시 작성된 코드 질문입니다. 너굴너굴너구리 1달 전
첫번째 질문입니다. 이전 강좌에서는 코드에 @blueprint.route 추가하면 뒤에 따라오는 ("/list") 이런식의 값이 사용자가 직접 입력하는 주소를 의미했잖아요? (GET과 POST가 서로 다른 방식으로 작동한다는 것은 이해하고 있습니다.) 그럼 이미지 업로드 강의 내용 중에 ajax 통신을 하기 위해  @blueprint.route("/upload_image") 라는 코드를 작성하셨는데 그러면 ajax 통신을 할 때 눈에는 보이지 않지만 가상의 페이지를 통해서 이미지를 주고 받는건가요? 두번째 질문입니다. upload_image 함수를 만드신 다음에 board_images 라는 함수를 만드셨는데 이 함수 내용이 리턴밖에 없습니다. 그러면 굳이 함수를 나눌  필요 없이 upload_image에서 같이 묶어서 처리할 수는 없는건가요? 명확한 기능 구분을 위해서 따로 나눈건지 아니면 url_for 함수와 send_from_directory 함수는 리턴 값으로만 넘길 수 있는건가요?

1
임태희 프로필

파일 업로드에 대하여 임태희 1달 전
안녕하세요 파일 업로드를 할때 파일명 저장이 제대로 되지 않아서 질문하게 되었습니다! 강사님처럼 '연습.txt'를 업로드 했더니 DB와 uploads 폴더 안에는 txt 이름만 저장되며, view에서 파일명도 "txt"(확장자도 없이) 라고 뜹니다.. 강사님과 똑같이 따라한 것 같은데 무엇이 문제인지 모르겠습니다ㅠㅠ 영어 파일명으로 파일 업로드를 하면 정상적으로 잘 작동됩니다!! 한글로 하면 안돼요..!

1
dudqls3986 프로필

GCP ssh 인증?오류 dudqls3986 2달 전
잘 사용하다가 어느 순간 부터 메타데이터에서 값을 못받아서 인스턴스 접속이 안됩니다.. ssh를  지우고 새로 생성해도 해결이 안되네요..(우분투 환경이라 명령어로 생성햇습니다) 계속 이전에 생성했던 ssh가 뜨는데, 키 값 마지막 부분에 expireOn:"2020-11-26~...라고 항상 만료날짜가 적혀있습니다.

3
Chocoder 프로필

안녕하세요. 모듈에서 오류가 자꾸뜨네요! Chocoder 2달 전
강의를 똑같이 따라해봤는데요. 오류가 뜨네요..ㅜㅠ  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")

1
임태희 프로필

로그아웃 기능에 대해서 임태희 2달 전
안녕하세요 강사님! 강의 내용이 제가 찾던 내용과 아주 잘 맞아서 즐겁게 공부하고 있는 수강생입니다. 제가 입문과정까지 수강을 하였는데요 로그아웃기능이 강의 내용에는 없는건가요? 일정한 시간이 지나면 접속이 끊어지는 것 뿐만 아니라 사용자가 임의적으로 로그아웃 버튼을 눌르면 로그아웃이 되도록 만들고 싶습니다! 도와주세요 또, 한가지 여쭤보고 싶은 사항이 있습니다. 장고에서는 is_authenticated 를 사용하여 로그인 여부를 판단했었습니다. 그래서 로그인이 되어 있지 않다면 회원가입과 로그인 버튼이 로그인이 되어 있다면 로그아웃 버튼이 활성화 되도록 만들고 싶은데 이 부분에 알고 계신 내용이 있다면 답변 부탁드립니다.  좋은 강의 만들어주셔서 정말 감사합니다 :)

1

55,000원

내 목록 추가 500 공유
지식공유자 : 남박사
총 38개 수업˙총 12시간 11분
평생 무제한 수강
수료증 발급 강의
초급 대상
이 강의는 멘토링 신청이 가능합니다.
멘토링은 수강 신청과 별개로 운영되며, 수강생이 아니어도 신청할 수 있습니다.
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스