def update_user(username): """사용자 정보 수정을 위한 함수""" current_user = __get_user(username) form = UpdateForm(request.form) if form.validate(): email = form.email.data password = form.password.data try: current_user.email = email current_user.password = generate_password_hash(password) dao.commit() except Exception as e: dao.rollback() Log.error(str(e)) raise e else: # 변경된 사용자 정보를 세션에 반영 session['user_info'].email = \ current_user.email session['user_info'].password = \ current_user.password session['user_info'].password_confirm = \ current_user.password # 성공적으로 사용자 등록이 되면, 로그인 화면으로 이동. return redirect(url_for('.login', update_username=username)) else: return render_template('regist.html', user=current_user, form=form)
def register_user(): """사용자 등록을 위한 함수""" form = RegisterForm(request.form) if form.validate(): username = form.username.data email = form.email.data password = form.password.data try: user = User(username, email, generate_password_hash(password)) dao.add(user) dao.commit() Log.debug(user) except Exception as e: error = "DB error occurs : " + str(e) Log.error(error) dao.rollback() raise e else: # 성공적으로 사용자 등록이 되면, 로그인 화면으로 이동. return redirect(url_for('.login', regist_username=username)) else: return render_template('regist.html', form=form)
def unregist(): user_id = session['user_info'].id try: user = dao.query(User).filter_by(id=user_id).first() Log.info("unregist:" + user.username) if user.id == user_id: dao.delete(user) # 업로드된 파일 삭제 try: upload_folder = \ os.path.join(current_app.root_path, current_app.config['UPLOAD_FOLDER']) __delete_files(upload_folder, user.username) except Exception as e: Log.error("파일 삭제에 실패했습니다. : %s" + \ str(e)) dao.commit() else: Log.error("존재하지 않는 사용자의 탈퇴시도 : %d", user_id) raise Exception except Exception as e: Log.error(str(e)) dao.rollback() raise e return redirect(url_for('.logout'))
def update_contract(contract_id): """ 계약서 업로드 화면에서 사용자가 수정한 내용을 DB에 업데이트 한다. """ form = ContractUploadForm(request.form) if form.validate(): try : #: 변경전 원래의 contract 테이블 값을 읽어 온다. contract = dao.query(Contract).filter_by(id=contract_id).first() dao.commit() except Exception as e: dao.rollback() Log.error("Update DB error : " + str(e)) raise e return redirect(url_for('.show_all')) else: return render_template('upload.html', contract=contract, form=form)
def remove(contract_id): """ DB에서 해당 데이터를 삭제하고 관련된 파일을 함께 삭제한다.""" user_id = session['user_info'].id try: contract = dao.query(Contract).filter_by(id=str(contract_id)).first() dao.delete(contract) dao.commit() upload_folder = os.path.join(current_app.root_path, current_app.config['UPLOAD_FOLDER']) os.remove(upload_folder + str(contract.filename)) except Exception as e: dao.rollback() Log.error("Contract remove error => " + contract_id + ":" + user_id + \ ", " + str(e)) raise e return redirect(url_for('.show_all'))
def upload_contract(): """ Form으로 파일과 변수들을 DB에 저장하는 함수. """ form = ContractUploadForm(request.form) # HTTP POST로 요청이 오면 사용자 정보를 등록 if form.validate(): #: Session에 저장된 사용자 정보를 셋팅 user_id = session['user_info'].id username = session['user_info'].username #: Form으로 넘어온 변수들의 값을 셋팅함 upload_date = datetime.today() #: 업로드되는 파일정보 값들을 셋팅한다. upload_contract = request.files['contract'] filename = None filesize = 0 filename_orig = upload_contract.filename try: #: 파일 확장자 검사 if upload_contract and __allowed_file(upload_contract.filename): ext = (upload_contract.filename).rsplit('.', 1)[1] #: 업로드 폴더 위치는 얻는다. upload_folder = \ os.path.join(current_app.root_path, current_app.config['UPLOAD_FOLDER']) #: 유일하고 안전한 파일명을 얻는다. filename = \ secure_filename(username + '_' + str(uuid.uuid4()) + "." + ext) abs_filename = os.path.join(upload_folder, filename) upload_contract.save(abs_filename) filesize = os.stat(upload_folder + filename).st_size else: raise Exception("File upload error : illegal file.") except Exception as e: Log.error(str(e)) raise e try : tika_url = 'http://192.168.0.200:8080/tika/scanpdf?file=' + abs_filename es_url = 'http://192.168.0.200:9201/test_idx/fulltext/' + filename es_request_header = {'Content-Type': 'application/json; charset=utf-8'} #tika_parsed = parser.from_file(os.path.join(upload_folder, filename), tika_url) tika_parsed = requests.get(url=tika_url) tika_content = tika_parsed.content.decode("utf-8") es_data = { 'title': filename, 'text': tika_content } # r = requests.post(url=es_url, data=json.dumps(es_data), headers=es_request_header) # only english es_content = json.dumps(es_data, ensure_ascii=False).encode('utf-8') r = requests.post(url=es_url, data=es_content, headers=es_request_header) Log.debug(r) except Exception as e: Log.error(e) raise e try : #: 계약서에 대한 정보 DB에 저장 contract = Contract(user_id, filename_orig, filename, filesize, upload_date ) dao.add(contract) dao.commit() except Exception as e: dao.rollback() Log.error("Upload DB error : " + str(e)) raise e return redirect(url_for('.show_all')) else: return render_template('upload.html', form=form)