묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
아톰에서 script 패키지 검색 시 나오지 않습니다.
안녕하세요, 아톰을 이제 막 설치하고 필요한 패키지를 install하는 중인데, autocomplete까지는 잘 검색이 되어 설치했으나 Script는 install에서 검색 시 검색결과로 나오지가 않아 설치하지 못하는 중입니다. 혹시 해결방법을 알고 계실까요? [Script 검색 시 화면] [찾고있는 Script 패키지] 설치 숫자가 비슷하게 많은 패키지는 아래와 같이 하나 나오는데, 혹시 같은 기능을 가진 패키지일까요?
-
미해결
아톰에서 Script 패키지 설치하려고 하는데 검색이 되지 않습니다.
안녕하세요, 아톰을 이제 막 설치하고 필요한 패키지를 install하는 중인데, autocomplete까지는 잘 검색이 되어 설치했으나 Script는 install에서 검색 시 검색결과로 나오지가 않아 설치하지 못하는 중입니다. 혹시 비슷한 문제를 겪어보신 분이 있으실까요? [Script 검색 시 화면] [찾고있는 Script 패키지] 설치 숫자가 비슷하게 많은 패키지는 아래와 같이 하나 나오는데, 혹시 같은 기능을 가진 패키지일까요? 비슷한 문제를 겪어보신 분이 있으시면 말씀 부탁드립니다.ㅠ
-
미해결예제로 공부하는 Python 100 문제풀이 Part.2
역인덱스 관련 질문입니다.
강의 마무리 부분이 이해가 안 됩니다. 첨부한 사진에 파란색으로 표시된 부분을 봐주시면 됩니다. 강사 분이 점수 요소들의 역인덱스를 한눈에 보기좋게 구현하신 건데요. 100 ( -10 ) 95 ( -9 ) 90 ( -8 ) 85 ( -7 ) 80 ( -6 ) 75 ( -5 ) 65 ( -4 ) 45 ( -3 ) 35 ( -2 ) 25 ( -1 ) 이런 식으로. 1. 괄호를 감싸고 있는 가장 바깥의 홑따옴표는 괄호를 포함한 내용이 문자열로 출력하기 위한 것이라는 건 이해하였습니다. 2. 괄호 안에 홑따옴표 또한 숫자가 아닌 문자열로 출력하는 것은 이해하였으나 ' , i , '에서 i의 앞 뒤로 쉽표는 무엇을 의미하는 중요한 것인지 알고 싶습니다. 단순히 띄어쓰기라기에는 지우면 에러가 뜹니다. range()함수에 [start,]stop[,step]을 나타내는 건지 생각도 해봤고요. 궁금합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 기본개념
파이썬 기본 개념을 여기 나와있는것만 듣고 알고리즘 공부해도 충분한가요?
-
미해결
네이버 영어사전 크롤링
import requests from bs4 import BeautifulSoup print("검색하려는 영어 단어를 입력하세요.") word = input() url = "https://en.dict.naver.com/#/search?query=what" response = requests.get(url) response.raise_for_status() soup = BeautifulSoup(response.text, "html.parser") title = soup.find_all('ul',class_='mean_list') print(title) 이렇게 네이버 영어사전 크롤링 시도했는데 왜 안될까요ㅣ..
-
미해결
파이썬 - 데이터로 그래프를 그리고 싶은데 도와주세요
파이썬 - 저장되어 있는 데이터로 그래프를 그리고 싶은데 plot 해도 그래프가 나오지 않아 혹시 그래프를 그리고 싶다면 어떤 코딩을 어느 위치에 추가해야 하는지 알수 있을까요 ? 밑에 코딩 첨부하겠습니다. import time import pymysql import pandas as pd import numpy as np from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt groups_folder_path = 'D:/3DP/' #학습데이터 저장 경로 A = np.empty((0,5)) D = np.empty((0,4)) mid_D = np.empty((0,4)) for indx in range(1,8): data_dir = groups_folder_path + 'ACC_' + str(indx) + '.csv' data = pd.read_csv(data_dir) data = data.to_numpy() A = np.vstack([A, data]) data_dir = groups_folder_path + 'DHT_' + str(indx) + '.csv' data2 = pd.read_csv(data_dir) data2 = data2.to_numpy() for i in range(0, len(data2)): dummy = data2[i].reshape([1,4]) dummy = np.repeat(dummy,repeats = 750, axis = 0) mid_D = np.vstack([mid_D, dummy]) D = np.vstack([D, mid_D[0:len(data)]]) SS = np.empty((0,6)) A = np.delete(A,0,1) D = np.delete(D,0,1) D = np.delete(D,2,1) Sum = np.hstack([A,D]) for i in range(len(Sum)): if Sum[i,3] == 4: a = Sum[i] a = a.reshape(1,6) SS=np.vstack([SS,a]) else : 1 dummy2 = np.repeat(SS,repeats = 9, axis = 0) SS = np.vstack([SS,dummy2]) Sum = np.vstack([Sum,SS]) label = Sum[:,3] label = label.reshape([len(Sum),1]) X = np.delete(Sum,3,1) Y = label X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.1,shuffle=True) from sklearn.preprocessing import StandardScaler sc = StandardScaler() sc.fit(X_train) X_train_std = sc.transform(X_train) X_test_std = sc.transform(X_test) from sklearn.svm import SVC svm_model = SVC(kernel='rbf',C=5, gamma=0.1, decision_function_shape='ovo') # ovo = one vs. one / ovr = one vs. rest svm_model.fit(X_train_std, y_train) # SVM 분류 모델 훈련 y_pred = svm_model.predict(X_test_std) q = len(y_test) L1 = len(y_test[y_test == 1]) L2 = len(y_test[y_test == 2]) L3 = len(y_test[y_test == 3]) L4 = len(y_test[y_test == 4]) A1 = 0 A2 = 0 A3 = 0 A4 = 0 A5 = 0 for i in range (0,len(y_test)): if y_pred[i] == y_test[i]: if y_pred[i] == 1: A1 = A1 + 1 elif y_pred[i] == 2: A2 = A2+1 elif y_pred[i] == 3: A3 = A3+1 else: A4 = A4+1 else: A5 = A5+1 print(A1/L1) print(A2/L2) print(A3/L3) print(A4/L4) print((len(y_test)-A5)/len(y_test)*100) #최종 정답률 from sklearn.metrics import confusion_matrix, plot_confusion_matrix import matplotlib.pyplot as plt confusion_matrix(y_test, y_pred)
-
미해결
seaborn을 사용한 lineplot에서 신뢰구간(ci)가 그림자로 표현이 되지 않는 이유
d안녕하세요 데이터 시각화 중에 신뢰구간이 그림자로 표현이 되지 않아서 질문드립니다. seaborn lineplot 과 relplot을 사용하여 ci 신뢰구간을 그림자표현으로 보여야 하는데 그림자로 나타나지 않아서 문의드립니다... 선형회귀그래프 lmplot으로 그려볼경우는 작게 신뢰구간이 표시되긴하는데 왜 lineplot으로는 확인이 안될까요... 데이터 타입은 x축 int y축 float로 확인하였습니다 답변 부탁드립니다 감사합니다
-
미해결문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!
강의 봤을때는 키랑 몸무게 표현이 되는데 저는 아래 적은 코드인 몸무게만 나옵니다 ㅜㅜ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. 강의 봤을때는 키랑 몸무게 표현이 되는데 저는 아래 적은 코드인 몸무게만 나옵니다 ㅜㅜ. 어떻게 해야 두 코드가 같이 표기되나요?? 도와주세요 ㅠㅠ
-
미해결
[Python 오류] 질문입니다! couldn't find program 'bash' (급합니다ㅠ)
%%bash # drive.mount("/content/drive") apt-get update apt-get install g++ openjdk-8-jdk python-dev python3-dev pip3 install JPype1 pip3 install konlpy %% bash 에서 막히네요 오류는 제목 그대로 뜹니다 현재 git bash가 설치되어 있는 상황인데 연관이 있을까요?
-
미해결
random_state 관련 질문
train_test_split(iris.data, iris.target, test_size = 0.2, random_state = 13, stratify = iris.target) iris_tree = DecisionTreeClassifier(max_depth = 2, random_state = 13) iris_tree.fit(x_train, y_train) 여기서 train_test_split와 DecisionTreeClassifier의 random_state는 어떻게 다른가요?? 그리고 DecisionTreeClassifier에서의 random_state를 변경하면 정확도도 동일해야 하는거 아닌가요? 13보다 작은 수를 입력했을 때는 정확도가 일정한데 13보다 큰 수를 입력하면 왜 정확도가 달라지는지 잘 모르겠습니다.
-
미해결
코딩테스트 언어
안녕하세요. 현재 개발자 쪽 직무로 공부중인 학생입니다. 현재 정확한 개발자 직무를 정한 것은 아니지만 크게 안드로이드 앱 개발자(자바 언어 사용) 또는 풀스택 개발자(자바 언어, javascript , jsp)쪽으로 공부 중입니다. (파이썬, c언어, 자바 중) 거의 자바 언어로 개발자 준비를 할 생각입니다. 지금까지 공부해온 언어는 크게 자바와 파이썬이지만 개발자 직무에 대한 공부 이전에 데이터 분석과 관련하여 파이썬으로 코딩을 해왔으며 자바보다는 조금 더 친숙하고 공부 난이도가 쉬운 것 같다고 여겨집니다. 다름이 아니라 현재 개발자 직무에 취업하기 위해 코딩테스트 언어를 봐야하는데 저의 주 개발언어가 될 자바로 시험을 보는 것이 맞나요 아니면 저에게 조금 친숙하고 난이도가 좀 더 쉽게 느껴지는 파이썬 언어로 시험을 보는 것이 맞나요? 1. 파이썬 언어로 시험볼 경우 : 단점 - 주 개발언어인 자바 이외에 파이썬을 코딩테스트용으로 공부해야함 : 장점 - 자바보다는 파이썬으로 코딩하는 것이 조금 더 친숙하고 난이도가 쉽게 느껴져 코딩테스트용 언어로 적합할 수 있음 2. 자바 언어로 시험볼 경우 : 단점 - 파이썬보다는 난이도가 있다고 여겨짐 : 장점 - 코딩테스트를 준비하며 주 개발언어인 자바에 대한 지식도 깊어질 수 있음 * 이외에 코딩테스트에 관련하여 여러 지식들 남겨주시면 너무 감사하겠습니다!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
4.19일부터 시작하는 코딩테스트 스터디원 구합니다.
김태원선생님 파이썬 코테 강의 스터디원 모집합니다. 링크는 아래와 같습니다. https://www.inflearn.com/studies/504882
-
해결됨남박사의 파이썬으로 실전 웹사이트 만들기
모듈화 과정에서 pylint 오류가 잔뜩나면서.. 직접 임포트를 하더라도 해결이 안되던데 왜그럴까요?
안녕하세요 남박사님..! 계속 질문 해서 죄송합니다..ㅠ 이번은 모듈화 과정에서 계속 문제가 나서 어떻게 해야할까 해서 질문을 올립니다..! 코드가 아예 먹통이 되는거 같더라구요..! 직접 임포트해서 넣은 common,py / filter.py 는 pylint 내용은 나오더라도 오류는 안나는데.. 다른거는 직접 넣어도 전부 오류가 나오네요..! 다른분들이 올리신 글보고 vscode settings에서 format on save 체크가 되어 있어서 해제 했습니다! 이 부분도 이렇게 추가해서 해봤는데 같았습니다! from main import member from main import board from main.filter import format_datetime from main.common import login_required board.py 코드 부분에서 edit 에 is data in None: <<< None이 빨간줄로 표시가 나오던데 왜그런걸까요? @app.route("/edit/<idx>", methods=["GET", "POST"]) def board_edit(idx): if request.method == "GET": board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if data in None: flash("해당 게시물이 존재하지 않습니다.") return redirect(url_for("lists")) else: if session.get("id") == data.get("writer_id"): return render_template("edit.html", data=data) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists")) else: title = request.form.get("title") contains = request.form.get("contents") board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if session.get("id") == data.get("writer_id"): board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contains, } }) flash("수정 되었습니다.") return redirect(url_for("board_view", idx=idx)) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists") - 터미널 오류- -pylint 추가오류- - 코드오류 -1 - 기존 임포트 처럼 전부 넣어도 오류가 나오네요.. flaek8 로 변경해도 똑같습니다..! - 코드오류 -2 - - 코드 오류-3- -코드 내용- - run.py- from main import app if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000) --------------------------------------------------------------------------------------- - __init__.py - from flask import Flask from flask import request from flask import render_template from flask_pymongo import PyMongo from bson.objectid import ObjectId from datetime import datetime, timedelta from flask import abort from flask import redirect from flask import url_for from flask import flash from flask import session import math import time from . import member from . import board from .filter import format_datetime from .common import login_required 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) -------------------------------------------------------------------------------------- -board.py- from main import * from flask import Flask from flask import request from flask import render_template from flask_pymongo import PyMongo from bson.objectid import ObjectId from datetime import datetime, timedelta from flask import abort from flask import redirect from flask import url_for from flask import flash from flask import session import math import time @app.route("/list") def lists(): # 페이지 값 (값이 없는 경우 기본값는 1) page = request.args.get("page", 1, type=int) # 한페이지당 몇개의 게시물을 출력할지 limit = request.args.get("limit", 5, type=int) 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}}) # 검색 대상이 한개라도 존재할 경우 query 변수에 $or 리스트를 쿼리 합니다. if len(search_list) > 0: query = {"$or": search_list} print(query) board = mongo.db.board datas = board.find({}).skip( (page - 1) * limit).limit(limit).sort("pubdate", -1) # 게시물의 총 갯수 tot_count = board.count_documents({}) # 마지막 페이지의 수를 구한다. 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=list(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>") @login_required def board_view(idx): # 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") 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", "") } return render_template("view.html", result=result, page=page, search=search, keyword=keyword) return abort(404) @app.route("/write", methods=["GET", "POST"]) def board_write(): if session.get("id") is None: return redirect(url_for("member_login")) 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, "writer_id": session.get("id"), "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") @app.route("/edit/<idx>", methods=["GET", "POST"]) def board_edit(idx): if request.method == "GET": board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if data in None: flash("해당 게시물이 존재하지 않습니다.") return redirect(url_for("lists")) else: if session.get("id") == data.get("writer_id"): return render_template("edit.html", data=data) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists")) else: title = request.form.get("title") contains = request.form.get("contents") board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if session.get("id") == data.get("writer_id"): board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contains, } }) flash("수정 되었습니다.") return redirect(url_for("board_view", idx=idx)) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists")) @app.route("/delete/<idx>") def board_delete(idx): board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if data.get("writer_id") == session.get("id"): board.delete_one({"_id": ObjectId(idx)}) flash("삭제 되었습니다.") else: flash("삭제 권한이 없습니다.") return redirect(url_for("lists")) ------------------------------------------------------------------------------------------------------- - 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.count_documents({"email": email}) 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 redirect(url_for("member_login")) 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") -------------------------------------------------------------------------------------------------- - common.py- from functools import wraps from main import session, redirect, request, url_for def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if session.get("id") is None or session.get("id") == "": return redirect(url_for("member_login", next_url=request.url)) return f(*args, **kwargs) return decorated_function ------------------------------------------------------------------------------------------------------- - fliter.py - from main import app, datetime, time @app.template_filter('formatdatetime') def format_datetime(value): if value is None: return "" now_timestamp = time.time() offset = datetime.fromtimestamp( now_timestamp) - datetime.utcfromtimestamp(now_timestamp) value = datetime.fromtimestamp((int(value) / 1000)) + offset return value.strftime('%Y-%m-%d %H:%M:%S')
-
해결됨남박사의 파이썬으로 실전 웹사이트 만들기
오류 나는 부분이 있어서 다시 질문 드립니다! 도와주세요! (join 로그인시 백지, 몽고db 이메일주소 null 표시)
안녕하세요 웹개발 입문부분 강좌를 거의다 들었는데.. 오류가 나는 부분이 있어서.. 질문을 올립니다! 문제는..join 로그인 하면 몽고db에서 이메일 주소가 null로 표시가 되서.. 동작이 되지 않는점이 있습니다.. 비슷한 증상을 찾기 어려워서 질문 남깁니다! -화면- -join- -mongoDB- -list- -list 로그인 페이지- next_url << 이게 문제가 나왔었는데 다른 코드들 참고 했는데 해결은 됬습니다. -run.py- 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 flask import redirect from flask import url_for from flask import flash from flask import session from functools import wraps import math import time from datetime import datetime, timedelta 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) def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if session.get("id") is None or session.get("id") == "": return redirect(url_for("member_login", next_url=request.url)) return f(*args, **kwargs) return decorated_function @app.template_filter('formatdatetime') def format_datetime(value): if value is None: return "" now_timestamp = time.time() offset = datetime.fromtimestamp( now_timestamp) - datetime.utcfromtimestamp(now_timestamp) 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", 5, type=int) 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}}) # 검색 대상이 한개라도 존재할 경우 query 변수에 $or 리스트를 쿼리 합니다. if len(search_list) > 0: query = {"$or": search_list} print(query) board = mongo.db.board datas = board.find({}).skip((page - 1) * limit).limit(limit) # 게시물의 총 갯수 tot_count = board.count_documents({}) # 마지막 페이지의 수를 구한다. 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=list(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>") @login_required def board_view(idx): # 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") 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", "") } return render_template("view.html", result=result, page=page, search=search, keyword=keyword) return abort(404) @ app.route("/write", methods=["GET", "POST"]) def board_write(): if session.get("id") is None: return redirect(url_for("member_login")) 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, "writer_id": session.get("id"), "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") @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.count_documents({"email": email}) 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") @app.route("/edit/<idx>", methods=["GET", "POST"]) def board_edit(idx): if request.method == "GET": board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if data in None: flash("해당 게시물이 존재하지 않습니다.") return redirect(url_for("lists")) else: if session.get("id") == data.get("writer_id"): return render_template("edit.html", data=data) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists")) else: title = request.form.get("title") contains = request.form.get("contents") board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if session.get("id") == data.get("writer_id"): board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contains, } }) flash("수정 되었습니다.") return redirect(url_for("board_view", idx=idx)) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("lists")) @app.route("/delete/<idx>") def board_delete(idx): return "" if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000) ------------------------------------------------------------------------------------------------ -join- {% with messages = get_flashed_messages() %} {% if messages %} <script> alert('{{messages[-1]}}'); </script> {% endif %} {% endwith %} <table> <form name="form" action="/join" method="POST"> <thead> <caption>회원가입</caption> </thead> <tbody> <tr> <td>이름</td> <td><input type="text" name="name"></td> </tr> <tr> <td>이메일</td> <td><input type="text" nmae="email"></td> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="pass"></td> </tr> <tr> <td>비밀번호 확인</td> <td><input type="password" name="pass2"></td> </tr> <tr> <td colspan="2"><input type="submit" value="가입하기"></td> </tr> </tbody> </form> </table> ---------------------------------------------------------------------------------------------------------- -login- {% with messages = get_flashed_messages() %} {% if messages %} <script> alert("{{messages[-1]}}"); </script> {% endif %} {% endwith %} <table> <form name="form" action="/login" method="POST"> {% if next_url %} <input type="hidden" name="next_url" value="{{next_url}}" /> {% endif %} <thead> <caption> 회원 로그인 </caption> </thead> <tbody> <tr> <td>이메일</td> <td><input type="text" name="email" /></td> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="pass" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="로그인" /></td> </tr> </tbody> </form> </table> -------------------------------------------------------------------------------------------------------- - list - {% with messages = get_flashed_messages() %} {% if messages %} <script> alert('{{messages[-1]}}'); </script> {% endif %} {% endwith %} <script> function search() { var v_search = document.getElementById("search").value; var v_keyword = document.getElementById("keyword").value; if (v_search == "" || v_keyword == "") { return false; } else { self.location.href = "{{url_for('lists')}}?search=" + v_search + "&keyword=" + v_keyword; } } </script> {% if datas|length > 0 %} <table> <thead> <tr> <td>번호</td> <td>제목</td> <td>이름</td> <td>날짜</td> <td>조회수</td> </tr> </thead> <tbody> <!--반복되는 구간--> <tr> {% for data in datas %} <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> </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_num %} {{ 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_num %} <a href="{{url_for('lists', page=block_last + 1, search=search, keyword=keyword)}}">[다음]</a> {% endif %} <select name="search" id="search"> <option value="" {% if search=='' or search==-1 %} selected {% endif %}>검색대상</option> <option value="0" {% if search==0 %} selected {% endif %}>제목</option> <option value="1" {% if search==1 %} selected {% endif %}>내용</option> <option value="2" {% if search==2 %} selected {% endif %}>제목+내용</option> <option value="3" {% if search==3 %} selected {% endif %}>작성자</option> </select> <input type="text" name="keyword" id="keyword" {% if keyword !="" %} value="{{keyword}}" {% endif %} /> <input type="button" value="검색" onclick="search()" /> {% else %} <h3>데이터가 없습니다.</h3> {% endif %} <a href="{{url_for('board_write')}}">글작성</a> ------------------------------------------------------------------------------------------------------- - edit - <html> <body> <table> <form name="form" method="post" action="/edit/{{data._id}}"> <tr> <td>작성자</td> <td><input type="text" name="name" value="{{session['name']}}" readonly /></td> </tr> <tr> <td>제목</td> <td><input type="text" name="title" /></td> </tr> <tr> <td>내용</td> <td><textarea type="text" name="contents">{{data.contents}}</textarea></td> </tr> <tr> <td colspan="2"><input type="submit" /></td> </tr> </form> </table> </body> </html>
-
해결됨남박사의 파이썬으로 실전 웹사이트 만들기
회원가입 만들기 오류 문의 (AttributeError: 'Cursor' object has no attribute 'count') 오류
안녕하세요 몇일째 오류랑 씨름하다가 여기까지 왔는데.. 도저희 해결이 안나서 문의 남깁니다. 구글링이나.. 다른분들 오류 해결하시는거 찾아보면서 해도.. 계속오류 나면서 하니까 진도가 너무 늦네요..ㅠ 파이썬으로 실전 웹사이트 만들기 - 회원가입 페이지 만들기 중입니다. -오류내용- -코드- (run.py) 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 flask import redirect from flask import url_for from flask import flash import math import time from datetime import datetime app = Flask(__name__) app.config["MONGO_URI"] = "mongodb://localhost:27017/myweb" app.config["SECRET_KEY"] = "abcd" mongo = PyMongo(app) @app.template_filter('formatdatetime') def format_datetime(value): if value is None: return "" now_timestamp = time.time() offset = datetime.fromtimestamp( now_timestamp) - datetime.utcfromtimestamp(now_timestamp) 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", 5, type=int) 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}}) # 검색 대상이 한개라도 존재할 경우 query 변수에 $or 리스트를 쿼리 합니다. if len(search_list) > 0: query = {"$or": search_list} print(query) board = mongo.db.board datas = board.find({}).skip((page - 1) * limit).limit(limit) # 게시물의 총 갯수 tot_count = board.count_documents({}) # 마지막 페이지의 수를 구한다. 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=list(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: 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)}) 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, page=page, search=search, keyword=keyword) 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") @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") if __name__ == "__main__": app.run(host="0.0.0.0", debug=True, port=9000) (join.html) {% with messages = get_flashed_messages() %} {% if messages %} <script> alert('{{messages[-1]}}'); </script> {% endif %} {% endwith %} <table> <form name="form" action="/join" method="POST"> <thead> <caption>회원가입</caption> </thead> <tbody> <tr> <td>이름</td> <td><input type="text" name="name"></td> </tr> <tr> <td>이메일</td> <td><input type="text" nmae="email"></td> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="pass"></td> </tr> <tr> <td>비밀번호 확인</td> <td><input type="password" name="pass2"></td> </tr> <tr> <td colspan="2"><input type="submit" value="가입하기"></td> </tr> </tbody> </form> </table>
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
Chapter6 인스턴스 및 네임스페이스
강의를 보고 보고 또봐도 네임스페이스가뭔지 인스턴스가뭔지 이해가안가요 정의도 설명을찾아봐도 이해가안가요 간단한예시를들어주실수있나요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
%f자릿수에 대해
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Print사용법 강좌에서요 print('%06.2f' %(3.1415926...)) 의 결과값이 003.14 로 나오잖아요 질문 1) 여기서 6은 정수부자릿수가 아니라 총 자릿수를 의미하는 건가요? 질문 2) 자릿수라는게 할당된 공간의 갯수를 말하는 건가요? 자릿수가 6개라고 하니까 이해가 안되서요. '.'도 포함해서 공간이 6개 할당된다는 것으로 이해하면 될까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
파이썬 버전
이전 답변들이 좀 오래된 것 같아서 질문들을 찾아보다가 새질문으로 올리게 되었습니다. 파이썬 버전이 현재의 최신버전으로 3.10.3으로 나와있는데 어떤 버전을 다운로드하는게 지금으로서 가장 좋을까요?
-
미해결
파이썬 AttributeError: 'NoneType' object has no attribute 'get_text' 오류
AttributeError: 'NoneType' object has no attribute 'get_text' 오류가 발생했습니다. 해당 오류는 none 값일때 어떻게 해야 하는지 결정되지 않았을 때 발생하는 오류로 알고 있는데 제가 크롤링 하는 사이트 특성상 없는 값이 있을 수 있습니다. (입력을 안했을 경우가 있습니다.) 아래 소스에서 for item in itmes : print(item.find("h2",attrs={"class":"camp_tt"}).get_text()) print(item.find("li",attrs={"class":"addr"}).get_text()) print(item.find("li",attrs={"class":"call_num"}).get_text()) print() print(item.find("li",attrs={"class":"call_num"}).get_text()) 의 부분이 문제 입니다. 해당 값은 없는 값이 있을 수 있는데 이럴 경우 오류 처리를 어떻게 해야 하나요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
배열 n+1 궁금합니다.
파이썬 프로그래밍 섹션 6의 3번문제인 DFS를 활용한 부분집합 구하기 문제에 대해 궁금증이 있어 문의를 남깁니다. 해당 문제는 사용하는 경우와 사용하지 않는 경우를 파악하기 위해 0,1로 사용여부를 판단하고 있습니다. 코드에서 ch=[0]*(n+1)이 초기화 하는 부분에서 1,2,3의 칸을 만들어 초기화 하고 있는데... 배열은 0부터 시작하는 것으로 판단이 되는데 왜 1,2,3으로 하셨는지 궁금합니다.. 저렇게 만들어지면 0,1,2,3의 칸이 만들어지는거 아닌가요? ㅠ