묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님
저는 그냥 이렇게 코드를 만들어봤는데 이런 경우 문제가 발생하는지 궁금합니다. 감사합니다! #include<stdio.h> #define MAX 30000 int ind[MAX] = { 0, }; int main() { int n, m; scanf_s("%d", &n); for (int i = 0; i < n; i++) { int indication; scanf("%d", &indication); ind[indication]++; } scanf("%d", &m); for (int i = 0; i < m; i++) { int indication; scanf("%d", &indication); ind[indication]++; } for (int i = 0; i < MAX; i++) { if (ind[i] == 2) { printf("%d ", i); } } }
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
패키지를 설치하지 못하는 문제
안녕하세요. script 등의 패키지 설치가 불가능합니다. 검색해보니 아래와 같은 해결방법이 나와서 https://www.inflearn.com/questions/23451 해당 폴더로 접속하였으나, packages 폴더안에 내용이 없습니다. 도움이 될까 싶지만.. anaconda, git, atom 설치 전에 python과 visual studio code를 설치해 둔 상태였습니다. 어떻게 해결해야 할까요ㅠㅠ?
-
해결됨React로 NodeBird SNS 만들기
좋아요 관련 질문드립니다.
좋아요 기능구현중에 좋아요 개수를 띄우고싶어 작성중인데 게시물이 만들어져있거나 만들고 새로고침하면 이상이없지만 게시물을 만들때 length 가 notdefined에러가 납니다 좋아요 갯수를 가져올수있는 방법이있을까요?
-
미해결[백문이불여일타] 데이터 분석을 위한 중급 SQL
LeetCode의 197. Rising Temperature 문제 질문입니다.
안녕하세요. LeetCode의 197. Rising Temperature 문제에서 Self Join을 할 때, 다음과 같이 INNER JOIN을 사용해주셨는데 /* SELECT today.id as Id FROM weather as today INNER JOIN weather as yesterday ON datediff(today.recorddate, yesterday.recorddate) = 1 # datediff 함수 대신, date_add 함수를 다음과 같이 사용할수도 있다 # INNER JOIN weather as yesterday ON date_add(yesterday.recorddate, interval 1 day) = today.recorddate WHERE today.temperature > yesterday.temperature */ Self Join 관련 구글링을 해보니, "INNER JOIN" 대신에 "CROSS JOIN" 또는 "JOIN"를 보통 사용하던데, 혹시 INNER JOIN을 사용하시는 특별한 이유가 있으신지 궁금합니다! INNER JOIN, CROSS JOIN, JOIN 위 3가지 방법을 각각 수행했을 때, 출력 결과는 동일하던데 그러면 세 가지 방법들 중, 아무거나 사용해도 무방한건가요?
-
해결됨파이썬 라즈베리파이 IoT프로젝트-원격모니터링 자동차
영상에서 ssh 발음만 특이하네요 ^^
영상에서 ssh 발음만 특이하네요 ^^
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
구글 클라우드 내 파일의 PC에 다운?
구글클라우드에서 세션을 열어서 작업하던 파일을 pc로 다운 받으려면 어떻게 해야 하는지 궁금합니다. 클라우드 파일을 github에 올린 후 다시 pc로 받는 방법을 쓰는가요? 혹시 putty 세션을 뛰웠을때 항상 폰트 크기가 작은데 크기를 좀 올리는 방법이 없을까요?
-
미해결페이스북 클론 - full stack 웹 개발
vscode 사용중인데 ajax 실행시 어떻게 해야하나요?
안녕하세요 현재 vscode 사용중인데 ajax 실행시 웹서버 어떻게 해야하나요?
-
미해결인터랙티브 웹 개발 제대로 시작하기
브라우져 구분중에
(function () { const useragent = window.navigator.userAgent.toLowerCase(); if (useragent.indexOf('chrome') < 0 && useragent.indexOf('safari') < 0) { document.body.style.cssText = 'height: auto'; document.body.innerHTML = '<p style="padding: 20px; line-height: 1.6">본 예제는 Full CSS 3D가 사용된 페이지로, webkit 기반 브라우저(크롬, 사파리 등)에서 확인하며 학습하시는게 좋습니다.<br>CSS 3D 부분 외에는 브라우저 상관없이 인터랙티브 웹 페이지 개발을 위해 필수적이고 유용한 내용들을 다루고 있으니 꼭 처음부터 끝까지 공부해 보세요! :)</p>'; } })(); 이있는데요.. 엣지는 접속이되고 오류가 나던데.. 먹을 방법이 잇을까요?
-
미해결실전! Querydsl
Function 호출 오류
@Testpublic void sqlFunction() { List<String> result = queryFactory .select(Expressions.stringTemplate("function('replace', {0}, {1}, {2})", member.username, "member", "M")) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); }}위와 같이 실행했을 경우 아래 오류가 발생합니다.Caused by: org.hibernate.QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode \-[METHOD_CALL] MethodNode: 'function (replace)' +-[METHOD_NAME] IdentNode: 'replace' {originalText=replace} \-[EXPR_LIST] SqlNode: 'exprList' +-[DOT] DotNode: 'member0_.username' {propertyName=username,dereferenceType=PRIMITIVE,getPropertyPath=username,path=member1.username,tableAlias=member0_,className=yhpark.querydsl.entity.Member,classAlias=member1} | +-[ALIAS_REF] IdentNode: 'member0_.member_id' {alias=member1, className=yhpark.querydsl.entity.Member, tableAlias=member0_} | \-[IDENT] IdentNode: 'username' {originalText=username} +-[PARAM] ParameterNode: '?' {label=1, expectedType=null} \-[PARAM] ParameterNode: '?' {label=2, expectedType=null}
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드 타입 문의드립니다.
영한님 안녕하세요. 요 몇일동안 열공모드로 달리고 있다보니 질문을 자주 남기게 되네요. (너무 귀찮게 해드려 죄송합니다..) 강의에서 임베디드 타입을 설명해주셨는데 실무에서는 혹시 임베디드 타입만 별도 패키지로 모아놓고 여러 엔티티에서 공통으로 활용을 하는 게 일반적인지 궁금합니다. 아니면 의존성이 어느 정도 있다고 판단하고 엔티티별로 나눠서 사용하는 지 알고 싶네요.. 공통으로 쓰는 것도 있을 것 같고, 결합도가 강한 건 따로 빼기도 할 거 같은데 주로 어떻게 사용을 하고 계신가요?
-
미해결R로 하는 웹 크롤링 - 실전편
자바스크립트 및 iframe으로 구성되어 있는 웹페이지 크롤링 문의
안녕하세요, 네이버 금융의 종목분석 페이지에 나와 있는 재무정보를 크롤링하고자 하는데 문제에 부딪쳐 문의 드립니다. (https://finance.naver.com/item/coinfo.nhn?code=005930) 아래 두 가지 방법으로 크롤링을 시도해보았습니다. 1) 강의에서 말씀하신 숨겨진 주소를 찾아서 크롤링 : 크롬 개발자 도구에서 Network 검사를 통해 숨겨진 주소를 확인하고 (이 경우 네이버가 지속적으로 인증값을 바꿈) JSON 형식으로 된 재무정보를 깔끔하게 불러들일 수 있으나, 인증값이 계속 바뀌기 때문에 이 부분을 핸들링 하는 것이 어려움. 따라서 아래 셀레니움을 이용한 방식을 사용하고자 하는데요, 2) 셀레니움을 통한 크롤링 : 따라서 셀레니움을 통해 크롤링을 시도했으나 소스가 iframe으로 보호되어 크롤링이 어렵습니다. 개발자도구에서 버튼의 xpath를 확인해도 정작 R에서는 읽어들이지 못하고 (iframe으로 숨겨진 탓으로 보입니다) css selector라는 크롬 익스텐션으로는 아예 재무정보 부분이 블록되어 있어서 제대로 된 xpath를 읽지 못합니다. 이 경우 핸들링을 어떻게 해야 할까요? 셀레니움 강의 부분은 짧아서 다른 정보를 찾아봤지만 파이썬으로 내용이 많이 나와 R과는 조금 다른 듯 합니다.
-
미해결React로 NodeBird SNS 만들기
포스트가 존재하지 않습니다 에러가 납니다ㅠㅜㅠ
if(!post)에서 걸려서 404에러가 나요ㅠㅠ console.log(post)찍어봐도 null이 나옵니다. 디비에는 잘 들어가 있는데 어디가 문제일까요??
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
프로그램 중지 시 오류 발생
실행 중인 프로그램을 중지하려고 하면 이런 오류가 나옵니다 무슨 오류이고 왜 발생하는 오류인가요?
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
55 게시판 크롤링 - 관련 질문
안녕하세요. 우선 양질의 컨텐츠를 제공해주신 강사님께 감사의 말씀 올립니다. 1. 목적 : 게시판(https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&page=1)의 제목을 크롤링한다. 2. 작성코드 import requests from bs4 import BeautifulSoup for index in range(1, 4): res = requests.get('https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&page='+ str(index)) soup = BeautifulSoup(res.content, "html.parser") data = soup.select('#fboardlist > div.list-board > ul > li > div.wr-subject > a') for item in data: print(item.get_text().split('\t')[5]) 위와 같이 작성하면 원하는 답을 도출할 수 있었습니다. 여기서 질문드립니다. 3. 질문 수정코드 : data = soup.select('#fboardlist > div.list-board > ul > *****li:nth-child(1) > div.wr-subject > a') 게시판의 1개의 제목만 출력하기위해 위와 같이 수정하고 item.get_text() 하면 아래와 같이 나옵니다. 1 탄소 발자국을 줄이는 나이키 신발 1위와 같이 데이터가 출력되기에 탭키로 스플릿해서 출력했습니다. 결국 원하는 데이터가 도출되기는 하였으나 왠지 좀 불안해보이고 전문성이 떨어져 보입니다.아래는 해당 제목의 엘러먼트 입니다.<a href="https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&wr_id=745898" class="item-subject"> <span class="orangered visible-xs pull-right wr-comment"> <i class="fa fa-comment lightgray"></i> <b>1</b> </span> <san class="wr-icon wr-image"></span> 탄소 발자국을 줄이는 나이키 신발 <span class="count orangered hidden-xs">1</span> </a>엘러먼트 값 중 a태그 안의 구성은 ①텍스트가 없는 태그, ②불필요한 텍스트가 작성된 태그, ③원하는 결과 값을 가지고 있는 텍스트등으로 나눠볼 수 있으며 이를 분별하는 방법에 대한 문의 입니다.①과 ②, ③은 get_text로 분리할 수 있지만 ②와 ③은 어떻게 분리할지 잘 모르겠습니다. 아무리 머리를 쥐어짜도 스플릿외에는 생각이 나지 않습니다.하위 디렉토리(태그)를 제거하여 추출하거나 동일 디렉토리의 특정태그만 분별 or 태그가 없는 택스트만 분별하는 방법이 있는지요?감사합니다.
-
미해결코틀린 기반 안드로이드 앱개발 기본 1단계
안드로이드 스튜디오의 xml 텍스트로 보기
영상 강의에서는 xml 파일을 Design / Text 탭을 이동하여 직접 스크립트를 볼 수 있는데요. 현재 제가 설치한 안드로이드 스튜디오 버전(3.6.2)에서는 해당 기능을 찾지를 못하겠어서 혹시 이 기능을 어디서 쓸 수 있는지 질문 드립니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기
url : res.req.file.path 오류..
지속적으로 path가 undefined으로 오류가 나는데 왜그럴까요 ㅠㅠ 강사님이 완료하신 github 코드도 붙여넣어도 동일하게 오류가 생기네요.ㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit 테스트 도중 에러 발생합니다.
위와 같은 에러 발생합니다. fail()을 지우고 돌리면 @TEST의 expected 옵션이 적용되지 않고 IllegalStateException이 발생하네요... 원인이 뭘까요? 소스코드 자체는 똑같이 작성했습니다.
-
미해결남박사의 파이썬으로 실전 웹사이트 만들기
등록된 글 수정시
로그인 보안 강화까지 강의를 들었습니다. 보안강화된 아이디로 로그인 한 후, 작성한 글 수정이 안됩니다. 아래와 같은 에러가 나타납니다. File "C:\Python\myweb\main\board.py", line 245, in board_edit board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contents, "attachfile": filename } }) flash("수정되었습니다.") return redirect(url_for("board.board_view", idx=idx)) else: UnboundLocalError: local variable 'filename' referenced before assignment adit.html {% extends "main.html" %} {% block contents %} <script> $(document).ready(function () { $("#summernote").summernote({ heigth: 300, minHeight: null, maxHeight: null, lang: "ko-KR", popover: { image: [], link: [], air: [] }, //콜백함수는 호출이 되어진다. //이미지 업로드 관련 callbacks: { onImageUpload: function(image) { for(var i = 0 ; i < image.length ; i++) { uploadImage(image[i]); } } } }); }); //웹사이트 콘솔창에서 볼수 있는 것 //function uploadImage(image) { // console.log(image); //} function uploadImage(image) { //객체를 설정한다(담기 위한 그릇) var data = new FormData(); console.log(image) // 넘어온 이미지 객체를 append 시켜준다. data.append("image", image); var csrf_token = "{{csrf_token()}}"; $.ajaxSetup({ beforeSend: function(x, s){ //s가 GET|HEAD|OPTIONS|TRACE 중 하나이면 if(!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type)){ //x(내부통신을 전담하는 객체 에이젝스에서)가 해더를 추가하는데 해더의 이름은 X-CSRFToken이고 값은 csrf_token이다. x.setRequestHeader("X-CSRFToken", csrf_token) } } }); $.ajax({ //페이지 이동없이 내부적으로 통신한다. //url 주소로 찾아준다. url: "{{url_for('board.upload_image')}}", cache: false, contentType: false, processData: false, //데이터를 data: data, //포스트 형식으로 전달한다. type:"post", //위 데이터 전송이 성공하면 success: function(url) { //<omg src=서버주소> 태그를 생성해준다. var image = $("<img>").attr("src",url).css('max-width', "900px"); //insertNode:이미지를 강제적으로 추가해준다. $("#summernote").summernote("insertNode",image[0]); }, //성공하지 못하면 오류를 보여준다. error: function(data) { console.log(data); alert(data); } }); } </script> <script> function CheckEditForm() { if($.trim($("#title").val()) == "") { alert("제목을 입력하세요."); $("#title").focus(); return false; } if($.trim($("#summernote").val()) == "") { alert("내용을 입력하세요."); $("#summernote").focus(); return false; } return true; } </script> <form name="form" method="POST" action="{{url_for('board.board_edit', idx=data._id)}}" enctype="multipart/form-data"> <!--보안 강화--> <input type="hidden" name="csrf_token" value="{{csrf_token()}}"> <div class="form-group"> <label for="name">작성자</label> <input class="form-control" type="text" name="name" value="{{session['name']}}" readonly> </div> <div class="form-group"> <label for="title">제목</label> <input class="form-control" type="title" name="title" value={{data.title}} > </div> {% if data.attachfile %} <div class="form-check text-right"> <input type="checkbox" class="form-check-input" id="deleteoldfile" name="deleteoldfile"> <label class="form-check-label" for="deleteoldfile">첨부파일 삭제 ({{data.attachfile}})</label> </div> {% endif %} <div class="form-group"> <label for="contents">내용</label> <textarea rows ="8" class="form-control" name="contents" id="summernote" >{{data.contents}}</textarea> </div> <!-- 파일 첨부 버튼 --> <div class="custom-file"> <input class="custom-file-input" id="customFile" type="file" name="attachfile"> <label class="custom-file-label" for="customFile">파일선택</label> </div> <div class="text-center"><input class="btn btn-primary" type="submit" value="수정하기"></div> </form> <!-- <table> <form name="form" method="POST" action="{{url_for('board.board_edit', idx=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" value={{data.title}}></td> </tr> <tr> <td>내용</td> <td><textarea name= "contents">{{data.contents}}</textarea></td> </tr> <tr> <td colspan="2"><input type="submit"></td> </tr> </form> </table> --> {% endblock %} #board.html from main import * # 큰 프로젝트시 /board/list 같은 것을 만들어주는 것 from flask import Blueprint # 게시판에 관한 내용 from flask import send_from_directory #이 블루프린트의 이름은 "board"이고 블루프린트가 선언된 곳에 앞에다가는 모두 "/board"를 붙여준다. blueprint = Blueprint("board", __name__, url_prefix="/board") # 첨부파일을 삭제하는 기능 def board_delete_attach_file(filename): # abs : 절대경로 abs_path = os.path.join(app.config["BOARD_ATTACH_FILE_PATH"], filename) # 파일이 abs에 존재하면 if os.path.exists(abs_path): os.remove(abs_path) return True return False @blueprint.route("/upload_image", methods=["POST"]) def upload_image(): if request.method == "POST": file = request.files["image"] # 확장자가 문제 없다고 판단 되면 if file and allowed_file(file.filename): # 임의의 랜덤의 문자 열로 파일명이 생성하게 된다. filename = "{}.jpg".format(rand_generator()) # 실제 파일이 저장될 경로 savefilepath = os.path.join(app.config["BOARD_IMAGE_PATH"], filename) # 파일저장 file.save(savefilepath) # 주소를 리턴해준다. return url_for("board.board_images", filename=filename) # @blueprint.route("/images/<filename>") def board_images(filename): # send_from_directory : 밖에 폴더에 접근하기 위한 함수 # app.config["BOARD_IMAGE_PATH"] : 절대경로 # filename : 그 파일의 이름 # 독립적인 폴더에 저장하고 웹에서는 이와 같은 방식으로 접근한다. return send_from_directory(app.config["BOARD_IMAGE_PATH"], filename) @blueprint.route("/files/<filename>") def board_files(filename): # as_attachment=True :다운로드 형태 return send_from_directory(app.config["BOARD_ATTACH_FILE_PATH"], filename, as_attachment=True) # 리스트 @blueprint.route("/list") def lists(): # 페이지 값(값이 없는 경우 기본 값은 1) page = request.args.get("page", default=1, type=int) # 한 페이지 당 몇 개의 게시물을 출력할 지 limit = request.args.get("limit", 7, 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(query).skip((page - 1) * limit).limit(limit).sort("pubdate",-1) # 전체 게시물의 총 개수 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, title="게시판 리스트" #main.html의 title 값이 된다. ) # 상세페이지 @blueprint.route("/view/<idx>") @login_required # idx 값을 따라서 몽고 db에서 값을 가져오는 역할 def board_view(idx): # post 노출되지 않고 GET은 노출 됨 # 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", ""), "attachfile": data.get("attachfile","") } return render_template("view.html", result=result, page=page, search=search, keyword=keyword, title="글 상세보기") return abort(404) # # 글쓰기 @blueprint.route("/write", methods=["GET", "POST"]) @login_required def board_write(): # if session.get("id") is None: # return redirect(url_for("member_login")) if request.method == "POST": filename = None # 첨부된 파일이 있으면 if "attachfile" in request.files: file = request.files["attachfile"] # 허용된 파일이라면 if file and allowed_file(file.filename): # 파일 이름을 넘겨주고 새로운 파일 이름을 받는다. filename = check_filename(file.filename) # 새로운 파일 명으로 세이브해라 file.save(os.path.join(app.config['BOARD_ATTACH_FILE_PATH'], filename)) 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, } # 위 post에 attachfile가 추가 되어 나온다. if filename is not None: post["attachfile"] = filename x = board.insert_one(post) print(x.inserted_id) return redirect(url_for("board.board_view", idx=x.inserted_id)) else: return render_template("write.html", title="글 작성") @blueprint.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 is None: flash("해당 게시물이 존재하지 않습니다.") return redirect(url_for("board.lists")) else: if session.get("id") == data.get("writer_id"): return render_template("edit.html", data=data, title="글 수정") else: flash("글 수정 권한이 없습니다.") return redirect(url_for("board.lists")) else: title = request.form.get("title") contents = request.form.get("contents") # 값을 받는다. deleteoldfile = request.form.get("deleteoldfile", "") # db에 접속하여 board = mongo.db.board # id 값을 가져와서 data = board.find_one({"_id": ObjectId(idx)}) # 둘의 값이 같으면 if session.get("id") == data.get("writer_id"): file = None # 첨부파일이 추가된 상태라면 if "attachfile" in request.files: file = request.files["attachfile"] # 파일이 있고 확장자(allowed_file(file.filename):)에도 문제가 없다면 if file and allowed_file(file.filename): filename = check_filename(file.filename) #새로운 파일을 저장해라 file.save(os.path.join(app.config["BOARD_ATTACH_FILE_PATH"], filename)) # 예전파일이 있는 경우에는 기존파일을 삭제하고 재업로드해라 if data.get("attachfile"): board_delete_attach_file(data.get("attachfile")) # 첨부파일이 저장이 되진않았고 else: # 체크박스에 체크를 한 경우 on이 들어온다. if deleteoldfile == "on": filename = None if data.get("attachfile"): board_delete_attach_file(data.get("attachfile")) # 새로운 첨부파일도 없고 기존의 첨부파일도 삭제하지 않는 경우 else: filename = data.get("attachfile") board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contents, "attachfile": filename } }) flash("수정되었습니다.") return redirect(url_for("board.board_view", idx=idx)) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("board.lists")) @blueprint.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("board.lists"))
-
미해결React로 NodeBird SNS 만들기
Front 에서 익스프레스를 사용하지 않고 배포하려면??
프론트에서, 익스프레스 서버 사용하지 않고, 넥스트로만 EC2 에 배포하려면 어떻게 해야 할까요?? 백엔드 구성하지 않고, 단순 넥스트 웹페이지 로만 따로 만들어서 실습을 하고 있는데 이 부분에서 막히네요.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
에러 검토중에 해결한 방법을 공유합니다.
에러 메시지를 분석한 결과, 암호화 후에 mxlength 에러인 경우에 실제 암호화된 데이터를 보니 60자 였습니다(버전 탓?) 그래서 예제에 50자로 설정된 password Maxlength를 70자로 수정하니 동작 되었습니다. 참고하세요. 감사합니다.