묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결몇 줄로 끝내는 인터랙티브 웹 개발 노하우 [초급편]
예제파일
강의에서 예제파일보자고 하셨는데 어떻게 받나요?
-
미해결남박사의 파이썬으로 실전 웹사이트 만들기
게속 오류떠요
고쳐도 수용없어요 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 %}
-
미해결자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
프로젝트 import시
lec21pjt001 <--이렇게 나오지 않고 자꾸 lec21로 로드가 되네요 lec21pjt001이 저렇게 로드되니까 lec21pjt002도 lec21로 로드 되려고해서 같은 이름이라고 로드가 안됩니다
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기
ffmpeg 관련
안녕하세요 강사님, 리액트 강의 잘 듣고 있습니다! 다름이 아니라 윈도우용 ffmpeg를 다운로드 하려고 홈페이지에 접속하니 9월 18일에 종료된다는 안내문구가 써있더라구요 ffmpeg가 종료되어도 수업을 계속 진행하기에는 지장이 없는걸까요? 9월 18일 안에 이 수업을 다 수강하지 못할 것 같아서요ㅎㅎ
-
미해결파이썬 라즈베리파이 IoT프로젝트-원격모니터링 자동차
질문
etcher에서 플래시가 실패됬다고 뜨는데, 어떻게 해결할 수 있나요?
-
미해결플러터와 장고로 1시간만에 퀴즈 앱/서버 만들기 [무작정 풀스택]
image upload 오류
pubspec.yaml에 로드 잘 입력해주었는데 애뮬레이터 실행시 이런 오류가 뜹니다. 확인 부탁드립니다.
-
미해결화이트해커가 되기 위한 8가지 웹 해킹 기술
;id를 입력하면 아무것도 나오지 않습니다. 정상인가요?
영상처럼 medium 단계에서 ;id를 입력하면 아무것도 나오지 않습니다. &id는 정상적으로 출력됩니다.
-
해결됨홍정모의 따라하며 배우는 C언어
6.13 강 1분 23초
/* scanf가 쓰일때 마다 생기는 문제가 있습니다 scanf 값을 입력 받고 enter를 치고 다시한번 입력한뒤 enter를 다시 한번 처야 맨처음 입력한 값이입력됩니다 예를 들어 아래 코드에서 4354(설정해둔 비밀번호)를 입력하고 enter 를 치면 아무일도 일어나지 않고 다른숫자(342) 를 치고 enter를 다시한번 치면 그제서야프로그램이 종료가 됩니다 제가 계속 실수 하는 부분이 있는걸까요? */ #include <stdio.h> int main(void) { int pass_waord = 4354; int input = 0; printf("Enter secret code : "); scanf(" %d\n", &input); while (input != pass_waord) { printf("Enter secret code : "); scanf(" %d\n", &input); } printf("Good"); return 0; }
-
리액트로 나만의 블로그 만들기(MERN Stack)
몽고DB에서 이미지를 불러오지 못 합니다.
삭제된 글입니다
-
미해결React로 NodeBird SNS 만들기
인피니트 스크롤링에 관한 질문입니다.
안녕하세요 :) 강의 7-11에서 LOAD_MAIN_POSTS_REQUEST가 중복 요청이 되어 useRef를 사용하여 해결을 하셨는데, 해시태그 페이지에서도 같은 문제가 발생해서 git에 올려놓으신 구버전(old branch) 소스코드나 강좌에서 참고하려했지만 useRef를 적용하는 것에 대한 설명이 없었습니다. 그래서 배운 내용을 스스로 적용해보던 와중에 문제가 생겨서 이렇게 질문을 남깁니다. 먼저 제가 수정한 코드는 아래와 같습니다. (제가 코드를 첨부하는데 제가 잘 다루지 못해서 그런지 javascript로 설정을 해도 계속 글씨가 제대로 보이지 않아서 굵은 글씨로 변경했습니다ㅜㅜ) 해시태그 페이지에서도 마찬가지로 LOAD_HASHTAG_POSTS_REQUEST 가 중복요청이 돼서 일단 saga에는watchLoadHashtagPosts의 takeLatest를 throttle로 수정하여 아래와 같은 코드로 바드로 바꿨습니다. function* watchLoadHashtagPosts() { yield throttle(2000, LOAD_HASHTAG_POSTS_REQUEST, loadHashtagPosts); } 그리고 Hashtag.js 는 useRef를 사용하여 아래와 같이 바꿨습니다. import React, { useEffect, useCallback, useRef } from 'react'; import PropTypes from 'prop-types'; import { useDispatch, useSelector } from 'react-redux'; import { LOAD_HASHTAG_POSTS_REQUEST } from '../reducers/post'; import PostCard from '../components/PostCard'; const Hashtag = ({ tag }) => { const dispatch = useDispatch(); const { mainPosts, hasMorePost } = useSelector(state => state.post); const countRef = useRef([]); const onScroll = useCallback(() => { if (window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300) { const lastId = mainPosts[mainPosts.length - 1] && mainPosts[mainPosts.length -1].id; if (!countRef.current.includes(lastId)) { if (hasMorePost) { dispatch({ type: LOAD_HASHTAG_POSTS_REQUEST, lastId, data: tag, }) } countRef.current.push(lastId); } } }, [hasMorePost, mainPosts.length, tag]); useEffect(() => { window.addEventListener('scroll', onScroll); return () => { window.removeEventListener('scroll', onScroll); } }, [mainPosts.length, hasMorePost, tag]); return ( <div> {mainPosts.map(c => ( <PostCard key={+c.createdAt} post={c} /> ))} </div> ); }; Hashtag.propTypes = { tag: PropTypes.string.isRequired, }; Hashtag.getInitialProps = async (context) => { const tag = context.query.tag; context.store.dispatch({ type: LOAD_HASHTAG_POSTS_REQUEST, data: tag, }) return { tag }; }; export default Hashtag; 그리고 버그는 아래와 같은 순서로 실행시키면 발생합니다. 1. 예를 들어 게시물이 25개 가량 있다고 가정을 합니다. 2. http://localhost:3060/hashtag/인프런 페이지에서 10개씩 게시물을 보여주는 인피니티 스크롤링을 한 번 해서 21번째 게시글의 #인프런 해시태그를 클릭합니다. 3. http://localhost:3060/hashtag/인프런 페이지가 로드될 때, 리덕스 devtools를 통해 액션어 어떻게 실행이 되는지 확인해보면 LOAD_HASHTAG_POSTS_REQUEST LOAD_HASHTAG_POSTS_REQUEST LOAD_HASHTAG_POSTS_SUCCESS LOAD_HASHTAG_POSTS_SUCCESS 이런 식으로 동작을 해서 게시물을 2번 로드해서 중복된 게시물이 보이게 됩니다. 4. console.log를 작성해서 확인해보면, 위와 같은 과정으로 실행시켰을 때 Hashtag.getInitialProps에서 뿐만 아니라 onScroll이 한 번더 실행이 돼서 dispatch로 인해 LOAD_HASHTAG_POSTS_REQUEST를 요청하는 것을 확인할 수 있었습니다. 왜 onScroll이 페이지가 새로 로드가 될 때 같이 실행이 되는지 모르겠습니다. 인피니트 스크롤링을 하지 않은 상태의 최신 10개 글 내에서 해시태그를 클릭하거나, 해당 해시태그 페이지를 새로고침하면 위와 같은 버그가 발생하지 않았고, 인피니트 스크롤링을 실행한 후 생성되는 게시물의 해시태그를 클릭하면 버그가 발생합니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
mongoDB cluster collection 조회시 오류가 뜹니다
이러한 오류는 어떻게 해결할 수 있을까요ㅠㅠ...
-
미해결제주코딩베이스캠프 Code Festival: JavaScript 100제
return merge(mergeSort(left), mergeSort(right));
return merge(mergeSort(left), mergeSort(right)); 위 부분이 이해가 안되서 질문 남깁니다. mergeSort(left)를 끝까지 다 돌고 나면 숫자가 하나밖에 안남는데, 어떻게 merge에서는 모든 값이 다 리턴되나요?
-
미해결눈떠보니 코딩테스트 전날
jupyter notebook 사용법
goormide의 url을 통해 들어간 jupyter notebook에서는 !ls, !touch등 명령어가 잘 작동하는데 알고리즘 폴더를 만들고 거기서 powerShell에 jupyter notebook을 입력하고 생성된 url로 들어가면 !ls나 !touch등의 명령어가 'ls'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라고 나오며 동작하지 않습니다ㅠㅠ
-
반응형 웹사이트 포트폴리오(Architecture Agency)
간단한 질문 드립니다!
삭제된 글입니다
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
MongooseDB 연결 시 에러가 발생합니다
안녕하세요! 몽고 DB를 접속하려고 하는데 콘솔 출력이 안됩니다ㅠㅠ 강의 보고 똑같이 따라했는데 왜 이런 에러가 뜰까요?ㅠㅠ 한번만 봐주세요! 감사합니다
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
형변환 print(int(c)), print(int(d))에서 에러가 뜹니다.
왜 에러가 뜨는 걸까요?
-
미해결홍정모의 따라하며 배우는 C언어
강의 중 오버플로우(overflow)란 warning 이 보이질 않습니다.
결과 값은 수업 진행대로 잘 나오나 output에서 overflow 워닝이 나오질 않습니다. 답변 부탁드리겠습니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <limits.h> //#include <stdlib.h> int main() { unsigned int u_max = UINT_MAX + 1; printf("%u", u_max); //// i to binary representation //char buffer[33]; //_itoa(u_max, buffer, 2); //// print decimal and binary //printf("dicimal:%u\n", u_max); //printf("binary:%s\n", buffer); return 0; } 1>------ Build started: Project: Lecture1, Configuration: Debug Win32 ------ 1>Lecture1.c 1>C:\C\Lecture\Lecture\Lecture1\Lecture1.c(1,1): warning C4005: '_CRT_SECURE_NO_WARNINGS': macro redefinition 1>C:\C\Lecture\Lecture\Lecture1\Lecture1.c : message : see previous definition of '_CRT_SECURE_NO_WARNINGS' 1>Lecture1.vcxproj -> C:\C\Lecture\Lecture\Debug\Lecture1.exe 1>Done building project "Lecture1.vcxproj". ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요! 강의 잘듣고 있습니다!
안녕하세요 좋은 강의 정말 잘 듣고 있습니다. 열심히 공부하여 어떻게든 보답하도록 하겠습니다. 다름이 아니라 크롬에서 단어찾으실때 확장프로그램 사용하시는 것 같은데 혹시 어떤 확장프로그램 사용하시는지 여쭤봐도 괜찮을까요?
-
미해결애플 웹사이트 인터랙션 클론!
두번째 비디오에서 새로고침
안녕하세요 선생님:) 사이트 완성하고 이리저리 눌러보고 새로고침하고 해보는데, 스크롤 끝까지 내렸다가 올렸다가 하다가 두번째 비디오(desc-message) 나오는 부분에서 새로고침할 때 어떨때는 잘 나오다가 어떨때는 맨 마지막에 하단 콘텐츠 추가 부분이 나오는데 버그일까요? 코드를 보내드려야하나욥?ㅠㅠ 제껄로도 테스트해보고, 다운로드 받은 완성파일(7번째 알집)에서 하단 콘텐츠랑 css만 추가해서 테스트해봐도 새로고침에 잘 됐다 안됐다해가지구요 ㅠㅠ
-
미해결스프링 시큐리티
안녕하세요
안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라 출처 남기고 공부한 내용을 블로그에 정리해도 될까요?