๐Ÿ“’ [ TIL ] 2022.05.10_16์ผ์ฐจ # ์ธ์Šคํƒ€ UIํด๋ก (7)

๋ฌธ๋ช…์ฃผยท2022๋…„ 5์›” 10์ผ
0
post-thumbnail

[ 2022-05-10 (ํ™”) ์˜ค๋Š˜์˜ TIL ]

[ Today Project ]

์ธ์Šคํƒ€๊ทธ๋žจ UIํด๋ก  ๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ + ํ”„๋ก ํŠธ ์ถ”๊ฐ€๊ฐœ๋ฐœ
: ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ํŒ€ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

[ Today Learn ]

  • ๊ฐœ์ธํ”„๋กœํ•„ํŽ˜์ด์ง€ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๋กœ๊ทธ์•„์›ƒ๊ธฐ๋Šฅ ๊ตฌํ˜„

โœ๏ธ ๋‚ด๊ฐ€ ๋ฐฐ์šด๊ฒƒ, ์–ป์€๊ฒƒ

  • ์ž„ํฌํŠธ ์ˆœ์„œ์˜ ์ค‘์š”์„ฑ

๋กœ๊ทธ์•„์›ƒ๊ธฐ๋Šฅ์€ ๋กœ๊ทธ์ธํ• ๋•Œ ์ค€ ํ† ํฐ์„ ์ €์žฅํ•œ ์ฟ ํ‚ค๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋กœ๊ทธ์•„์›ƒ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ๋‹ค.

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.py
@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"))
  • detail.html
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 ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค

profile
ํ•˜๋ฃจ ํ•œ๊ฑธ์Œ์”ฉ ๊พธ์ค€ํžˆ ๋‚˜์•„๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž๐Ÿ™†โ€โ™€๏ธ https://github.com/Moonmooj

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 5์›” 11์ผ

๋ช…์ฃผ๋‹˜~ ๊น€์ค€ํƒœ ํŠœํ„ฐ์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ TIL ๋„ˆ๋ฌด ์ข‹์€๋ฐ์š”?.. ใ…‹ใ…‹ใ…‹ใ…‹ ํ•ญ์ƒ ์‘์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

1๊ฐœ์˜ ๋‹ต๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด