์ธ์คํ๊ทธ๋จ UIํด๋ก ๋ฐฑ์๋๊ฐ๋ฐ + ํ๋ก ํธ ์ถ๊ฐ๊ฐ๋ฐ
: ์ด๋ฒ ํ๋ก์ ํธ๋ ํํ๋ก์ ํธ๋ก ์์ํฉ๋๋ค.
๋ก๊ทธ์์๊ธฐ๋ฅ์ ๋ก๊ทธ์ธํ ๋ ์ค ํ ํฐ์ ์ ์ฅํ ์ฟ ํค๋ฅผ ์ ๊ฑฐํ์ฌ ๊ตฌํ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ก๊ทธ์์์ฝ๋๋ ์๋์ ๊ฐ์ด ์์ฑํ๋ค.
function logout() {
$.removeCookie('mytoken', {path: '/'});
alert('๋ก๊ทธ์์!')
window.location.href = "/"
}
์ด๋ ค์ด ์ฝ๋๋ ์๋์๊ธฐ๋๋ฌธ์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ์๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง ์์์ง๋ง, ๊ธฐ๋ฅ์ด ์๋๋์ง์์์ ๊ทธ ์ด์ ๋ฅผ ์ฐพ๋๋ผ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ๋ค.
์๊ณ ๋ณด๋ jquery ๋ฅผ ์ํฌํธํ๊ณ ๋ ํ์ jquery.cookie.js๋ฅผ ์ํฌํธํด์ผํ๋๋ฐ, ์ด ์์์ ์ค์์ฑ์ ์์ง ๋ชปํด์ ๊ณ์ ๊ธฐ๋ฅ์ด ์๋ํ์ง ์์๋๊ฒ์ด๋ค.
์๋์ ๊ฐ์ด ์ํฌํธ ์์๋ฅผ ์กฐ์ ํด์ฃผ๋ ์ ์๋ํ์๋ค.
๐งฉ ์ ์ฉ ์์
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
์๋๋ ๊ณ ์ ๋ ๊ฐ์ธํ๋กํ ์ด๋ฏธ์ง์ด๋ค.
์์ด๋๋น ๊ฐ์ธํ๋กํ ์ด๋ฏธ์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด 'ํ๋กํํธ์ง' ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋์ ๋ชจ๋ฌ์ฐฝ์ด ๋จ๊ฒ ๋ง๋ค์๊ณ ํ์ผ์ ํ์ฐฝ๊น์ง ๋จ๋ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค.
์ฝ๋๋ ์๋์ ๊ฐ์ด ์์ฑํ์๋ค.
๐งฉ ์ ์ฉ ์์
@app.route('/update_profile', methods=['POST'])
def save_img():
token_receive = request.cookies.get('mytoken')
try:
payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
username = payload["id"]
new_doc = {}
if 'file_give' in request.files:
file = request.files["file_give"]
filename = secure_filename(file.filename)
extension = filename.split(".")[-1]
file_path = f"profile_pics/{username}.{extension}"
file.save("./static/"+file_path)
new_doc["profile_pic"] = filename
new_doc["profile_pic_real"] = file_path
db.users.update_one({'username': payload['id']}, {'$set': new_doc})
return jsonify({"result": "success", 'msg': 'ํ๋กํ์ ์
๋ฐ์ดํธํ์ต๋๋ค.'})
except (jwt.ExpiredSignatureError, jwt.exceptions.DecodeError):
return redirect(url_for("home"))
function update_profile() {
let name = $('#input-name').val();
let file = $('#input-pic')[0].files[0];
let about = $('#textarea-about').val();
let form_data = new FormData();
form_data.append('file_give', file);
form_data.append('name_give', name);
form_data.append('about_give', about);
console.log(name, file, about, form_data);
$.ajax({
type: 'POST',
url: '/update_profile',
data: form_data,
cache: false,
contentType: false,
processData: false,
success: function (response) {
if (response['result'] == 'success') {
alert(response['msg']);
window.location.reload();
}
},
});
}
ํ์ง๋ง ๋ด ๋ก์ปฌ์์๋ ์ด๋ฏธ์ง ๋ณ๊ฒฝ๊น์ง ๊ตฌํ๋์ง์์๊ณ , ๋ค๋ฅธ ํ์์ ๋ก์ปฌ์์๋ ํ๋กํ์ด๋ฏธ์ง๋ณ๊ฒฝ์ด ์๋ฒฝํ ๊ตฌํ๋์๋ค. ๋ด ๋ก์ปฌ๊ณผ ํ์ ๋ก์ปฌ์ ์ด๋ค ์ฐจ์ด์ ์ผ๋ก ์ธํด์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ํ ์ฐจ์ด๊ฐ ์๋ ๊ฑด์ง ์ ์ ์์๋ค.
์ผ๋จ ์ด๋ค ์ ์ผ๋ก ์ธํด์ ๊ธฐ๋ฅ๊ตฌํ์ด ๋๊ณ ์๋๊ณ ์ ์ฐจ์ด๊ฐ ์๋๊ฑด์ง ํ์ธํด๋ด์ผํ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ๋ค.๐ค
ํญ์ ๋๋ผ๋ ๋ถ๋ถ์ด์ง๋ง, ๊ธฐ๋ฅ ํ๋ํ๋๋ฅผ ๊ตฌํํ ๋๋ง๋ค ๊ณ์ ์์์น ๋ชปํ ์ค๋ฅ๋ค์ ๋ง๋์ ๊ทธ๊ฒ์ ์์ ํ๋๋ผ ์๊ฐ์ด ๋๋ฌด ์ค๋๊ฑธ๋ฆฌ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ์ ๊ธฐํ์ ์ ํด์ ธ์์ผ๋, ๋ ๋ง์ ๊ธฐ๋ฅ์ ํด๋ด๋ ค๊ณ ํ๋ค๋ณด๋ ๋ง์์ด ๊ธํด์ ธ์ ์ฝ๋๋ฅผ ๊ผผ๊ผผํ ํ์ธํ์ง ๋ชปํ๊ฒ ๋๋ ์ ์ด ์๋ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค.
๋ค์๋ถํฐ๋ ๊ธฐ๋ฅ๊ตฌํ ๊ฐฏ์๊ฐ ๋ถ์กฑํ๋๋ผ๋ ๋ฐฐ์ฐ๋ ๊ณผ์ ์ด ๋ ์ค์ํ๋ ๋ ๊ผผ๊ผผํ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ๊ตฌํํ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค.
๐ ์์ธํ ์ฝ๋๋ Moonmoo ์ ๊ฒ์ํ์ต๋๋ค
๋ช ์ฃผ๋~ ๊น์คํ ํํฐ์ ๋๋ค! ์ด๋ฒ TIL ๋๋ฌด ์ข์๋ฐ์?.. ใ ใ ใ ใ ํญ์ ์์ํ๊ณ ์์ต๋๋ค!