소개
게시글
질문&답변
2020.04.13
summernote 설치 후 그림파일 드레그&드롭 그림 올라가지 않음
안녕하십니까~ 말씀하신대로 수행한 결과 콘솔상에 시현된 것 POST 처리 idx 현재 첨부파일 테스트.txt 새 첨부파일 존재 새 첨부파일명: ========================================================== 문제가 첨부파일 관련된 문제가 이것 때문은 아닌지요? 그리고, 이 부분도 확인을 좀 해주셔야 될 것으로 보입니다. http://127.0.0.1:5700/member/join 연결 시 다음과 같은 에러~ Bad Request The CSRF token is missing. member.py 에서 # @csrf.exempt 이와 같이 적용하고 회원가입했을 때는 정상적으로 회원가입이 되었는데 - 참고하시구요... @csrf.exempt 적용 후에는 회원가입을 하면 Bad Request The CSRF token is missing. 같이 에러 발생합니다. * csrf 관련 코딩 1. __init__.py : from flask_wtf.csrf import CSRFProtect 2. __init__.py : csrf = CSRFProtect(app) 3. __init__.py : from .common import login_required, allowed_file, rand_generator, check_filename, hash_password, check_password 4. member.py(join 함수 관련된 부분) : post = { "name": name, "email": email, "pass": hash_password(pass1), "joindate": current_utc_time, "logintime": "", "logincount": 0, } 5. common.py : from werkzeug.security import generate_password_hash, check_password_hash 6. member.py(login 관련된 부분) : if check_password(data.get("pass"), password): 7. join.html(form 부분) : 8. edit.html(form 부분) : * 참고사항-1 member.py 에서 # @csrf.exempt 적용하고 회원가입했을 때 mongo db 상에서 csrf_token 적용된 비번 정상으로 기록되었음 ** 참고사항-2 코딩 전체에서 csrf_token 적용되어 있음을 알려드립니다. 감사드립니다.
- 1
- 11
- 633
질문&답변
2020.04.12
summernote 설치 후 그림파일 드레그&드롭 그림 올라가지 않음
edit.html 코드 {% extends "main.html" %} {% block contents %} script > $ ( document ). ready ( function () { $ ( "#summernote" ). summernote ({ height: 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 ) { var data = new FormData (); data . append ( "image" , image ); var csrf_token = "{{ csrf_token() }}" ; $ . ajaxSetup ({ beforeSend : function ( x , s ) { if (! / ^ ( GET | HEAD | OPTIONS | TRACE ) $ / i . test ( s . type )) { x . setRequestHeader ( "x-CSRFToken" , csrf_token ) } } }); $ . ajax ({ url: "{{url_for('board.upload_image')}}" , cache: false , contentType: false , processData: false , data: data , type: "post" , success : function ( url ) { var image = $ ( "(사진)" ). attr ( "src" , url ). css ( 'max-width' , "900px" ); $ ( "#summernote" ). summernote ( "insertNode" , image [ 0 ]); }, error : function ( data ) { console . log ( data ); alert ( data ); } }); } 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 = "text" 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-froup" > label for = "contents" > 내용 label > textarea class = "form-control" rows = "8" 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 > {% endblock %} ** 크롬, 엣지, brave, 익스플로러에서도 동일한 현상입니다. 감사합니다.
- 1
- 11
- 633
질문&답변
2020.04.12
summernote 설치 후 그림파일 드레그&드롭 그림 올라가지 않음
print문을 돌려서 확인 결과로서 콘솔상에 나타난 것을 보면 아래와 같습니다. -결과의 내용을 분석하면, 기존의 첨부된 파일이 있는 상태에서 추가 첨부파일 등록없이 작성하기를 클릭했는데... 새로운 첨부파일이 있는 것으로 코딩은 돌아가는 것으로 보입니다. POST 처리 idx 현재 첨부파일 테스트.txt 새 첨부파일 존재 127.0.0.1 - - [12/Apr/2020 17:42:31] "?[32mPOST /board/edit/5e92d378520729c0f6769948 HTTP/1.1?[0m" 302 - 127.0.0.1 - - [12/Apr/2020 17:42:31] "?[37mGET /board/view/5e92d378520729c0f6769948 HTTP/1.1?[0m" 200 - 127.0.0.1 - - [12/Apr/2020 17:42:33] "?[37mGET /board/comment_list/5e92d378520729c0f6769948?_=1586680951452 HTTP/1.1?[0m" 200 - * mongo db 상에서는 attachfile - null * 서버(c:\python uploads)에는 '테스트.txt'(첫번째 글작성 시 올린 파일) 파일 존재 ** '글 수정' 모드로 와서 아무것도 변경없이 단지 '작성하기' 버튼을 클릭했는데 서버상에는 파일(테스트.txt)이 존재하고 -- 기존의 첨부파일이 mongo db상에서 null로 나오고 이리하여 view 화면에서 첨부파일을 보여주지 못하고 있습니다. 감사합니다.
- 1
- 11
- 633
질문&답변
2020.04.12
summernote 설치 후 그림파일 드레그&드롭 그림 올라가지 않음
안녕하십니까~~ 확인한 결과를 말씀드립니다. ㅇ POST 부분 코딩 수정한(즉, else: 이하) - else를 제외한 edit.py 코딩을 지우고 return 값을 위해 아래와 같이 코딩 후 실행하면 첨부파일은 지워지지 않습니다. 물론, 다른 첨부파일 추가 등은 안되는 것은 당연하고요... else: return redirect(url_for("board.board_view", idx=idx)) ㅇ POST 부분 중에서 아래의 이 부분만을 지우고(주석처리하고) - 첨부파일이 있는 상태에서 수정모드로 가서 작성하기를 하면 역시 첨부파일은 지워집니다. if session.get("id") == data.get("writer_id"): 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)) if data.get("attachfile"): board_delete_attach_file(data.get("attachfile")) else: if deleteoldfile == "on": filename = None if data.get("attachfile"): board_delete_attach_file(data.get("attachfile")) else: filename = data.get("attachfile") * board_delete_attach_file(data.get("attachfile")) - 이 함수가 없는데도 첨부파일이 지워지는 현상 ** 이 경우에 db확인하면 attachfile에 null로 나옴 글 작성하였을 경우에는 db에서 정상적으로 파일이 보였다가 수정 후에는 null로 나타납니다. 감사합니다.
- 1
- 11
- 633
질문&답변
2020.04.11
summernote 설치 후 그림파일 드레그&드롭 그림 올라가지 않음
안녕하십니까. 빠른 답변에 매우 감사함을 표시하면서~~~ 강사님께서 말씀하신대로 해도 해결은 안되어서 저의 코딩 내용을 붙입니다. 부탁드립니다. @blueprint.route("/edit/ ", 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", "") board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if session.get("id") == data.get("writer_id"): 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)) if data.attachfile: # if data.get("attachfile"): board_delete_attach_file(data.get("attachfile")) else: 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")) 그리고, 섬머노트 관련된 부분은 해결되었습니다. ~~~역시나 저의 오타가 있었네요...ㅠㅠ 감사합니다.
- 1
- 11
- 633