미니 프로젝트

Merong·2022년 9월 22일
0

항해99

목록 보기
1/1

맛집 방범대


4일 이라는 짧은 시간동안 본인 포함 3명의 인원이
각자 로그인 페이지, 메인 페이지, 개인 페이지를 만들어

오늘 22년 9월 22일 배포를 했다

로그인 페이지와 포스트 삭제 기능을 맡았고
배운 내용을 가지고 복사 붙혀넣기를 하며
어찌저찌 완성은 할수 있었다

처음보는 jwt 토큰 사용 방식과 머리 아프게 많은 POST, GET 함수들을 보니
머리가 깨질것 같았지만 다행이 깨지진 않은 모양이다

로그인 회원가입

from pymongo import MongoClient
import jwt
import datetime
import hashlib
import os
from flask import Flask, render_template, jsonify, request, redirect, url_for
from werkzeug.utils import secure_filename
from datetime import datetime, timedelta


app = Flask(__name__)
app.config["TEMPLATES_AUTO_RELOAD"] = True
app.config['UPLOAD_FOLDER'] = "./static/profile_pics"

SECRET_KEY = 'SPARTA'

client = MongoClient('3.39.22.91', 27017, username="test", password="test")
db = client.dbsparta


@app.route('/')
def home():
    token_receive = request.cookies.get('mytoken')
    try:
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
        user_info = db.users.find_one({"username": payload["id"]})
        return render_template('index.html', user_info=user_info)
    except jwt.ExpiredSignatureError:
        return redirect(url_for("login", msg="로그인 시간이 만료되었습니다."))
    except jwt.exceptions.DecodeError:
        return redirect(url_for("login", msg="로그인 정보가 존재하지 않습니다."))


@app.route('/login')
def login():
    msg = request.args.get("msg")
    return render_template('login.html', msg=msg)


@app.route('/user/<username>')
def user(username):
    # 각 사용자의 프로필과 글을 모아볼 수 있는 공간
    token_receive = request.cookies.get('mytoken')
    try:
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
        status = (username == payload["id"])  # 내 프로필이면 True, 다른 사람 프로필 페이지면 False

        user_info = db.users.find_one({"username": username}, {"_id": False})
        return render_template('user.html', user_info=user_info, status=status)
    except (jwt.ExpiredSignatureError, jwt.exceptions.DecodeError):
        return redirect(url_for("home"))


@app.route('/sign_in', methods=['POST'])
def sign_in():
    # 로그인
    username_receive = request.form['username_give']
    password_receive = request.form['password_give']

    pw_hash = hashlib.sha256(password_receive.encode('utf-8')).hexdigest()
    result = db.users.find_one({'username': username_receive, 'password': pw_hash})

    if result is not None:
        payload = {
         'id': username_receive,
         'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)  # 로그인 24시간 유지
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
        # .decode('utf-8')
        return jsonify({'result': 'success', 'token': token})
    # 찾지 못하면
    else:
        return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})


@app.route('/sign_up/save', methods=['POST'])
def sign_up():
    username_receive = request.form['username_give']
    password_receive = request.form['password_give']
    password_hash = hashlib.sha256(password_receive.encode('utf-8')).hexdigest()
    doc = {
        "username": username_receive,
        "password": password_hash,
        "profile_name": username_receive,
        "profile_pic": "",
        "profile_pic_real": "profile_pics/profile_placeholder.png",
        "profile_info": ""
    }
    db.users.insert_one(doc)
    return jsonify({'result': 'success'})


@app.route('/sign_up/check_dup', methods=['POST'])
def check_dup():
    username_receive = request.form['username_give']
    exists = bool(db.users.find_one({"username": username_receive}))
    # print(value_receive, type_receive, exists)
    return jsonify({'result': 'success', 'exists': exists})

포스트 삭제

@app.route("/comment/del", methods=["POST"])
def comment_del():
    num_receive = request.form['num_give']

    db.diary.update_one({'num': int(num_receive)}, {'$set': {'done': 1}})
    db.diary.delete_one({'done': 1})
    return jsonify({'msg': '삭제 완료'})

모두 내가 구성하고 짠 코드는 아니다
거의 남의거나 다름없다
아직 배운기간이 1달도 되지 않는다
이걸 스스로 짤 실력은 안된다

그래도 어느 방식으로 돌아가는지 이해하려 하면서 옮겼고
파일을 팀원에게 넘겨준 뒤로는
만들면서 배운 변수, 함수, 매개변수 등등
단어나 문법을 조금씩 찾아봤다
그래도 이해가 되지않고 머리속에 들어오진 않지만
계속 보면서 눈에 익히고 외울거다

천천희 배워가 나중엔 복붙의 수도 줄이고 코드를 이해하고 스스로 짤수있는 내가 돼있으면 좋을것 같다

0개의 댓글