A Developing Developer

팀 I-ONE 프로젝트 결과 본문

내일배움캠프 4기/프로젝트

팀 I-ONE 프로젝트 결과

H-JJOO 2022. 12. 9. 11:52

I-ONE

프로젝트 제목 : 나의 소중한 일상 공유 Social Media I-log

00. 프로젝트 구조

  • 팀원이름 담당
    주현진(팀장) 로그인 회원가입 마이페이지
    김형섭 게시판
    유진우 게시판
    장승윤 메인페이지, 게시판
  • API 명세

  • 테이블 NTT관계도

01. SA 작성

와이어프레임 및 SA작성

Flowchart Maker & Online Diagram Software

A-1조_I-ONE_프로젝트S.A(진행중)

 

A-1조_I-ONE_프로젝트S.A(진행중)

1. 프로젝트 제목 : I-ONE 1-1. 프로젝트 간단 설명 : 일상공유 플랫폼 1-2 팀원별 담당 : 이름 담당 주현진 로그인 유진우 회원가입 장승윤 게시판 김형섭 게시판 고예진 마이페이지 2. 와이어 프레임

icepri3535.tistory.com

 

02. 해결하지 못 한 기능

  • Flask mysql 이미지파일업로드requset.file못 다한 기능은 Node.js에서 반드시 구현하겠습니다.
  • 첨부파일페이지와 텍스트를 입력받을 수 있는 페이지를 따로 만들면 이미지파일업로드가 가능했지만 둘이 동시에 진행하면 파일업로드가 되지 않는다.
  • request.form

03. 이 코드가 마음에 들어요!

  • 주현진
upw = request.form['password']

enc_upw = (bcrypt.hashpw(upw.encode('UTF-8'), bcrypt.gensalt())).decode('utf-8')

방법을 찾는데 시간 좀 걸렸지만, 제 기능을 하게해서 뿌듯합니다.

bcrypt 기능을 활용해서 회원 가입 당시 입력한 비밀번호를 암호화하여 db에 저장하였습니다.

  • 김형섭
    @app.route('/write', methods = ['POST'])
    def insertpost():
        db = pymysql.connect(host = 'localhost', user = 'root', db = 'ione',
                             password = 'ione1234', charset = 'utf8')
    
        curs = db.cursor()
        print(session.get("uid"))
    
        if request.method == 'POST':
            title = request.form['title']
            content = request.form['content']
            content_image = request.form['content_image']
            user_id = session.get("uid")
    
            sql = """insert into post (title, content, content_image, user_id)
             values (%s,%s,%s,%s)
            """
            curs.execute(sql, (title, content, content_image, user_id))
    
            db.commit()
            db.close()
    
            return redirect("/")
    
    제가 맡은 게시판 부분에서 db랑 연결이 잘 안되서 데이터를 넣는게 난감했는데 팀원분들이 도와주시고 구현이 되서 좋았습니다. 아무래도 이 부분을 잡고 있는 시간이 조금 길었던 터라 기억에 남습니다.
  • 유진우
    @app.route('/users/<id>', methods = ['GET'])
    def get_users(id):
        if "name" in session:
            db = pymysql.connect(host = 'database-1.cbegjfm38p8o.ap-northeast-2.rds.amazonaws.com', user = 'admin',
                                 db = 'ione',
                                 password = 'ione1234', charset = 'utf8')
    
            
            curs = db.cursor()
    
            sql = '''SELECT user_id, name, gender, email, location, profile_image, intro FROM `user`'''
    
            curs.execute(sql)
    
            rows = curs.fetchall()
    
           
    
            result = {
                "user_id": rows[session['id'] - 1][0],
                "name": rows[session['id'] - 1][1],
                "gender": rows[session['id'] - 1][2],
                "email": rows[session['id'] - 1][3],
                "location": rows[session['id'] - 1][4],
                "profile_image": rows[session['id'] - 1][5],
                "intro": rows[session['id'] - 1][6]
            }
    
            db.commit()
            db.close()
    
            return jsonify({'users': result}), 200
    
    데이터베이스에 저장되어있는 데이터들을 get방식으로 가져오는 이 코드가 마음에 들었습니다.

  • 장승윤
    # login
    @app.route('/users/login', methods = ['GET', 'POST'])
    def login():
        db = pymysql.connect(host='localhost', user='root', db='i_log', password='abc1234', charset='utf8')
        curs = db.cursor()
        if request.method == 'POST':
            uid = request.form['userId']
            upw = request.form['password']
    
            **session['uid'] = request.form['userId']
    
    이부분이 사용자가 로그인시 user 테이블에서 user_id 를 세션으로 잡는 부분입니다.**
    
            # print('Login OKAY!')
            # print(session['password'])
            # print(session)
            # print(session['uid'])
    
            curs.execute("SELECT * FROM user")
    
            user_list = curs.fetchall()
    
            for user in user_list:
    
                if uid == user[1]:
                    if bcrypt.checkpw(upw.encode('utf-8'), user[2].encode('utf-8')):
                        session["name"] = user[3]
                        session["userid"] = user[1]
                        session["id"] = user[0]
                        return redirect("/")
                    else:
                        return '<script>alert("비밀번호가 일치하지 않습니다."); document.location.href="login"; </script>'
            return '<script>alert("존재하지 않는 아이디입니다.."); document.location.href="login"; </script>'
    
            db.commit()
            db.close()
    
        return render_template('login.html')
    
    @app.route('/write')
    def write():
        if "name" not in session:
            # flash("로그인을 하세요!!")
            return render_template("login.html")
        else:
            "name" in session
        return render_template('write.html', id = session.get("uid"), name = session.get        ("name"), login = True)
    
    유저가 로그인시 세션으로 잡을 수 있다는 것을 알 게되었습니다. 로그인한 사람만 글쓰기 , 글 수정 , 글 삭제까지 가능 한 것이 이번프로젝트에서 가장 좋았습니다. 세션은 앞으로 다양한 곳에서 활용될 것 같아서 더욱 깊게 공부해보겠습니다.

04. 프로젝트하면서 느낀 점

  • 주현진
    • 팀장으로서 못한게 많은데, 팀원분들이 잘 해주셔서 잘 마무리한거 같습니다. 더 역량을 키워서 더 많은 도움을 드릴수 있도록 노력하겠습니다.
  • 김형섭
    • 이번 프로젝트를 통해 기능 구현에서 1인분 만이라도 해보자 생각하고 시작했는데 잘 되지 않아서 기초 지식 면에서 더 공부해야 되겠다는 것을 느꼈고, 잘 되지 않고 모르는 부분이 있으면 팀원들과 소통해서 해결해 나가야 하는 것을 느꼈습니다.
    • 제가 부족한 부분에 대해 팀원분들이 도움을 많이 주시고 가르쳐주셔서 너무 감사했습니다.
  • 유진우
    • 팀원 분들께 더 많은 도움을 드리고 싶었는데 그러지 못한 점이 아쉽습니다. 소통하는 것도 익숙하지 않아서 모르는 것들을 바로바로 해결하는 것도 시간이 조금 걸렸습니다. 하지만 저희 팀원 분들은 저를 계속 이해해주고 엄청 챙겨주셔서 덕분에 이번 프로젝트 때 제가 모르는 많은 것들을 배웠습니다. 너무 감사합니다. 저 자신을 좀 더 발전시켜서 다음 프로젝트때는 더 많은 소통을 하며, 수월하게 진행을 하고 싶습니다.
  • 장승윤
    • merge , git stash, conflict 에 대해서 학습할 수 있어서 좋았습니다. 팀원분들과 같이 서로소통하면서 협업할 수 있어서 많이 배울 수 있는 프로젝트 였습니다. 다음 프로젝트때는 모든 기능을 구현할 수 있도록 더욱 기능에 고도화를 시키고 싶고 기능구현에 대해서 더 깊이 공부하고 싶습니다.
    • 팀원분들께서 이번 프로젝트에서 인원이 부족하여 프로젝트 진행에 많이 힘들었지만 끝까지 해주셔서 정말 고생 많으셨습니다. 끝까지 열심히 완주해주셔서 감사합니다.