-
[Flask] 파일 업로드/삭제/수정공부/Flask 2021. 10. 4. 14:06
write.html(거의비슷update.html)
<!DOCTYPE html> <head> <!--css --> <link rel="stylesheet" type="text/css" href="/static/css/styles.css"> <!-- ckeditor --> <script src="/static/ckeditor5/ckeditor.js"></script> <style> .ck-editor__editable { min-height: 400px; } </style> </head> <body> <div class="container"> <br> <h3>포스트 작성하기</h3><br> <form name="frm_pw" method="POST" enctype="multipart/form-data"> <div class="form-group"> <label for="title">* 제목</label> <input type="text" name="title" class="form-control" placeholder="제목을 입력하세요"> </div> <div class="form-group"> <br> <label for="title">* 비밀번호</label> <input type="password" name="password" class="form-control"> </div> <div class="form-group"> <br> <label for="title">타이틀사진</label> <input type="file" name="title_image" class="form-control"> </div> <div class="form-group"> <br> <label for="content">* 내용</label> <textarea name="contents" id="editor" class="form-control" placeholder="내용 입력"></textarea> <script> ClassicEditor .create( document.querySelector( '#editor' ), { language : {ui: 'ko', content: 'ko'} // toolbar: [ 'heading', '|', 'bold', 'italic', 'link' ] } ) .then( editor => { window.editor = editor; } ) .catch( err => { console.error( err.stack ); } ); </script> </div> <br> <input style="font-size:100%; border:2px solid black; border-radius: 0.25rem;transition:box-shadow 0.15s ease-in-out;" type="submit" class="btn-primary"> </form> </div> </body>
write python 부분
@main.route('/write', methods=['GET','POST']) def write(): if 'userid' not in session: #print("비로그인 상태") return "<script>alert(\'로그인 후 이용하세요.\');document.location.href=\"login_service/login\"</script>" if request.method == 'GET': return render_template('/main/write.html') #print("로그인 상태") title = request.form['title'] password = request.form['password'] contents = request.form['contents'] if title=='' or password=='' or contents=='': return "<script>alert(\'* 은 필수입력입니다.\');document.location.href=\"/write\"</script>" #파일 업로드 titleimg = request.files['title_image'] fn = secure_filename(titleimg.filename) if not fn: #파일이 없으면 fn = 'dummy-image.jpg' else: ######같은 이름 파일 업로드 중복처리. _ = 0 while os.path.isfile("app/static/img/"+fn): fn = str(_)+fn _ += 1 titleimg.save(os.path.join('app/static/img/'+ fn)) #print(title,password,contents,request.remote_addr,session.get('userid')) db_class = dbModule.Database() #db연결 userid = session.get('userid') sql = "SELECT name from user where id=%s;" username = db_class.executeAll(sql, userid) #username 받아오기 sql = "INSERT INTO board (pwd, name, title, content, ip, viewcnt, titleimg) VALUES (%s, %s, %s, %s, %s, %s, %s);" args = (password, username[0]['name'], title, contents, request.remote_addr, 0, fn) #print(args) boards = db_class.executeAll(sql, args) db_class.commit() return redirect('/')
update python부분
## 글 수정하기 @main.route('/update', methods=['GET','POST']) def update(): if 'userid' not in session: #print("비로그인 상태") return "<script>alert(\'로그인 후 이용하세요.\');document.location.href=\"login_service/login\"</script>" #print("로그인 상태") db_class = dbModule.Database() #db연결 bid = request.args.get('bid') if request.method == 'GET': if request.args.get('bid')!=None and bid!='': sql = "SELECT * FROM board WHERE id=%s;" old_board = db_class.executeAll(sql, bid) return render_template('/main/update.html', old_board=old_board[0]) # POST title = request.form['title'] contents = request.form['contents'] password = request.form['password'] if title=='' or password=='' or contents=='': return "<script>alert(\'* 은 필수입력입니다.\');window.history.back();</script>" sql = "SELECT pwd, titleimg FROM board WHERE id=%s;" old_board = db_class.executeAll(sql, bid) if old_board[0]['pwd'] != password: return "<script>alert(\'비밀번호가 일치하지않습니다.\');window.history.back();</script>" titleimg = request.files['title_image'] #파일 업로드, 글 수정시 이전파일 삭제 후 업로드 fn = secure_filename(titleimg.filename) print(old_board, fn, titleimg.filename) if old_board[0]['titleimg']!=''and old_board[0]['titleimg']!=None and old_board[0]['titleimg']!='dummy-image.jpg' and fn: #이미 파일이 있을때 업로드 os.remove('app/static/img/' + old_board[0]['titleimg']) ######같은 이름 파일 업로드 중복처리. if fn: _ = 0 while os.path.isfile("app/static/img/"+fn): fn = str(_)+fn _ += 1 titleimg.save(os.path.join('app/static/img/'+ fn)) sql = "UPDATE board SET title=%s, content=%s, titleimg=%s WHERE id=%s;" args = (title, contents, fn, bid) else: sql = "UPDATE board SET title=%s, content=%s WHERE id=%s;" args = (title, contents, bid) boards = db_class.executeAll(sql, args) db_class.commit() sql = "SELECT * FROM board WHERE id=%s;" board = db_class.executeAll(sql, bid) return render_template('/main/board.html', board=board[0], num=bid)
'공부 > Flask' 카테고리의 다른 글
flask에서 백그라운드 작업 처리 (0) 2022.08.07 [Jinja2 safe필터] render_templete시 html태그 넘기기 (2) 2022.08.05 [Flask] 간단한 게시판 만들기 (0) 2021.10.04 [Flask] 부트스트랩 적용 (0) 2021.09.18 [Flask] 파이썬에서 웹으로 데이터 전달 (0) 2021.09.18