FastAPI 프로젝트 진행(회원가입 기능 구현) - 93

2023. 1. 29. 21:12·Develop/FastAPI
728x90
SMALL

1. auth.py 새로운 API 생성

@router.post("/register", response_class=HTMLResponse)
async def register_user(request: Request, email: str = Form(...), username: str = Form(...),
                        firstname: str = Form(...), lastname: str = Form(...),
                        password: str = Form(...), password2: str = Form(...),
                        db: Session = Depends(get_db)):

    validation1 = db.query(models.Users).filter(models.Users.username == username).first()

    validation2 = db.query(models.Users).filter(models.Users.email == email).first()

    if password != password2 or validation1 is not None or validation2 is not None:
        msg = "Invalid register request"
        return templates.TemplateResponse("register.html", {"request": request, "msg": msg})

    user_model = models.Users()
    user_model.username = username
    user_model.email = email
    user_model.first_name = firstname
    user_model.last_name = lastname
    user_model.hashed_password = get_password_hash(password)
    user_model.is_active = True

    db.add(user_model)
    db.flush()
    db.commit()

    msg = "User Successfully created"
    return templates.TemplateResponse("login.html", {"reuqest": request, "msg": msg})
회원가입 간에 이미 회원가입이 되어있는 사용자를 확인한다
확인 1 = 사용자 이름
확인 2 = 사용자 이메일

패스워드와 확인 패스워드가 같지 않거나 사용자 이름과 이메일이 존재한다면 회원가입불가 => 다시 회원가입
그게 아니라면 Users 테이블에 사용자를 저장하고 로그인 페이지로 이동한다.

 

2. register.html 수정

{% include 'layout.html' %}

<div class="container">
    <div class="card">
       <!--상단타이틀-->
        <div class="card-header">
            Register
        </div>
        <div class="card-body">
           {% if msg %}
           <div class="alert alert-danger" role="alert">
            {{msg}}
           </div>
           {% endif %}

            <form method="POST" action="/auth/register" ...>
            </form>
        </div>

    <div class="card-footer text-muted">
            <a href="/auth">Already have an account?</a>
        </div>
    </div>
</div>

 

3. login.html에 register url 주소 추가

{% include 'layout.html' %}

<div class="container">
    <div class="card">
       <!--상단타이틀-->
        <div class="card-header">
            Login
        </div>
        <div class="card-body">

           {% if msg %}
           {% if msg == 'Logout Successful' or msg == 'User Successfully created' %}
           <div class="alert alert-success" role="alert">
              {{msg}}
           </div>
           {% else %}
           <div class="alert alert-danger" role="alert">
              {{msg}}
           </div>
           {% endif %}
           {% endif %}


            <form method="POST" action="/auth" ...>
        </div>
        
        <div class="card-footer text-muted">
        #추가
            <a href="register"> Register? </a>
        </div>
    </div>
</div>

 

4. 회원가입 해보기

  • 존재하고있는 사용자로 회원가입 시

 

  • 존재하지 않는 사용자로 회원가입시

 

5. 새로운 사용자에 todo 테이블 데이터 추가해 보기

728x90
SMALL
저작자표시 비영리 변경금지 (새창열림)

'Develop > FastAPI' 카테고리의 다른 글

FastAPI 프로젝트 진행(비밀번호 변경, 라우터 추가) - 95  (0) 2023.01.31
FastAPI 프로젝트 진행(코드 정리) - 94  (0) 2023.01.29
FastAPI 프로젝트 진행(로그아웃 기능 구현) - 92  (0) 2023.01.29
FastAPI 프로젝트 진행(로그인 추가, 쿠키 세션) - 91  (0) 2023.01.29
FastAPI 프로젝트 진행(로그인 기능 구현 API) - 90  (0) 2023.01.29
'Develop/FastAPI' 카테고리의 다른 글
  • FastAPI 프로젝트 진행(비밀번호 변경, 라우터 추가) - 95
  • FastAPI 프로젝트 진행(코드 정리) - 94
  • FastAPI 프로젝트 진행(로그아웃 기능 구현) - 92
  • FastAPI 프로젝트 진행(로그인 추가, 쿠키 세션) - 91
동석해요
동석해요
공부하고 싶은게 많은, 사소한 IT 지식들 공유
    250x250
  • 동석해요
    개발로 자기계발
    동석해요
  • 전체
    오늘
    어제
    • 분류 전체보기 (226)
      • Develop (126)
        • 기초지식 (12)
        • FastAPI (102)
        • Django (11)
      • Database & Data (62)
        • 기초지식 (16)
        • MySQL (29)
        • PostgreSQL (8)
        • 데이터 분석 (9)
      • 인공지능 (11)
        • PyTorch (9)
      • Cloud (8)
        • AWS (4)
        • GCP (2)
      • 버그처리 (14)
      • 회고 & 일상 (5)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
동석해요
FastAPI 프로젝트 진행(회원가입 기능 구현) - 93
상단으로

티스토리툴바