Django - MySQL - 빅데이터 - 사용자 관련 연결 추가

회원가입

main.html 수정

{% if request.user.is_authenticated %}
	<h3><a href="logout">({{user.username}})logout</a></h3>
{% else %}
	<h3><a href="login_form">로그인</a></h3>
{% endif%}
  • body에 추가해주기

views.py에 signup_form 추가

# 유저 회원가입 화면 열기 
def signup_form(request):
    return render(request, 'user/signup.html')
  • def home을 최상단으로 올려주고나서 그 밑에 작성

urls.py에 signup_form 추가

    path('', views.home),
    path('signup_form/', views.signup_form),
  • home을 admin 아래로 옮겨줌
  • home 아래에 추가

views.py에 signup 추가

# 회원가입 처리
@csrf_exempt
def signup(request):
    # POST 요청이 맞다면
    if request.method == 'POST':
        # password와 password2가 같다면
        if request.POST['password'] == request.POST['password2']:
            # 유저네임과 패스워드를 받아서
            username = request.POST['username']
            password = request.POST['password']
            email = request.POST['email']
            # user를 생성, User 객체는 장고가 기본적으로 가지고 있음
            user = User.objects.create_user(username, email, password)
            # 로그인 폼으로 이동         
            return redirect('/login_form/')
    return render(request, 'user/signup.html')
  • signup_form 아래에 작성

urls.py에 signup 추가

    path('signup/', views.signup), 
  • signup_form 아래에 추가

signup.html 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
<h1>Sign up!</h1>
<!-- form 태그 POST 방식으로 쓸거면 보안을 위해서 csrf_token을 써주는게 좋음 -->
<!-- 로그인과 같은 정보를 처리할때는 POST 방식으로 처리해줘야 한다. -->
	<form method="POST" action="/signup/">
		<!-- 보안을 위해서 써주는 나수 발생기, csrf 방해를 방어해주는 것 -->
		{% csrf_token %}
		Username : 
		<br><input name="username" type="text" value=""><br>
		Password : 
		<br><input name="password" type="password" value=""><br>
		Confirm Password : 
		<br><input name="password2" type="password" value=""><br>
		Email : 
		<br><input name="email" type="text" value=""><br>
		<br><input class="btn btn-primary" type="submit" value="signup">
	</form>
</body>
</html>

로그인

views.py에 login_form 추가

# 로그인 화면 열기
def login_form(request):
    return render(request, 'user/login.html')
  • signup 아래에 작성

urls.py에 login_form 추가

    path('login_form/', views.login_form),
  • 아래에 signup 추가

views.py에 login 추가

# 로그인 처리
@csrf_exempt
def login(request):
    # POST 요청이 맞다면 
    if request.method == 'POST':
        # username과 password를 가져와서
        username = request.POST['username']
        password = request.POST['password']
        # 등록된 사용자인지 확인함
        user = auth.authenticate(request, username = username, password = password)
        
        # user가 회원이라면     
        if user is not None: 
            # 로그인 시킴
            auth.login(request, user)
            return redirect('/')
        else:
            return render(request, 'user/login.html', {'error':'username or password is incorrect'})
        
    else:
        return render(request, 'user/login.html')
  • login_form 아래에 작성

urls.py에 login 추가


    path('login/', views.login),
  • login_form 아래에 추가

login.html 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<h1>Login!</h1>
<!-- form 태그 POST 방식으로 쓸거면 보안을 위해서 csrf_token을 써주는게 좋음 -->
<!-- 회원가입과 같은 정보를 처리할때는 POST 방식으로 처리해줘야 한다. -->
	<form method="POST" action="/login/" >
		<!-- 보안을 위해서 써주는 나수 발생기, csrf 방해를 방어해주는 것 -->
		{% csrf_token %}
		Username : 
		<br><input name="username" type="text" value=""><br>
		Password : 
		<br><input name="password" type="password" value=""><br>
		<br><input class="btn btn-primary" type="submit" value="login">
		<br><input class="btn btn-primary" type="button" value="signup" onclick="location.href='/signup_form'">
	</form>
</body>
</html>

로그아웃

views.py에 logout 추가

# 로그아웃 처리
def logout(request):
    # user가 로그인된 상태라면
    if request.user.is_authenticated:
        # 로그아웃 시킴
        auth.logout(request)
        return redirect('/')
    return render(request, 'user/login.html')
  • login 아래에 작성

urls.py에 logout 추가

    path('logout/', views.logout),  
  • login 아래에 추가

결과

  • 로그인을 안 할시 게시판 글쓰기 기능 사용 불가

  • 가입하면 DB에 데이터 바로바로 저장됨
  • 정상적으로 작동함

좋은 웹페이지 즐겨찾기