소개
게시글
질문&답변
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
- 909
질문&답변
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
- 909
질문&답변
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
- 909
질문&답변
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
- 909
질문&답변
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
- 909