회원가입 실패
1. user/views.py의 sign_up_view 메서드 수정
def sign_up_view(request):
if request.method == 'GET':
user = request.user.is_authenticated # is_authenticated : 로그인 되어 있는지 검사
if user:
return redirect('/') # 로그인 한 사용자라면 home.html 이동
else:
return render(request, 'user/signup.html') # 로그인 하지 않은 사용자라면 회원가입 페이지로 이동
elif request.method == 'POST':
# POST 받은 username 저장 없다면 None
username = request.POST.get('username', '')
password = request.POST.get('password', '')
password2 = request.POST.get('password2', '')
bio = request.POST.get('bio', '')
if password != password2:
# 패스워드 확인이 틀릴 경우
return render(request, 'user/signup.html', {'error': '패스워드가 일치하지 않습니다'})
else:
# 사용자 이름과 비밀번호가 비어있을 경우
if username == '' or password == '':
return render(request, 'user/signup.html', {'error': '사용자 이름과 비밀번호는 필수 값 입니다'})
# get_user_model() : 사용자 데이터의 DB 내 존재유무 검사
exist_user = get_user_model().objects.filter(username=username)
if exist_user:
# 중복 사용자 이름일 경우
return render(request, 'user/signup.html', {'error': '이미 존재하는 사용자 이름입니다'})
else:
# django의 auth_user에 존재하는 create_user 사용
UserModel.objects.create_user(username=username, password=password, bio=bio)
return redirect('/sign-in')
2. templates/user/signup.html에서 추가
{% if error %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endif %}
로그인 실패
1. user/views.py의 sign_in_view 메서드 수정
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '')
# 인증 기능 모듈을 먼저 불러온다
# authenticate : 암호화된 비밀번호와 현재 입력된 비밀번호와 일치하는지 그게 사용자와 맞는지까지 확인
me = auth.authenticate(request, username=username, password=password)
if me is not None:
auth.login(request, me) # 세션과 같은 로그인과 관련된 처리들을 django가 해준다
return redirect('/') # tweet/views.py의 home 실행
else:
return render(request, 'user/signin.html', {'error': '잘못된 사용자 이름 또는 비밀번호입니다'})
elif request.method == 'GET':
user = request.user.is_authenticated # is_authenticated : 로그인 되어 있는지 검사
if user:
return redirect('/') # 로그인 한 사용자라면 home.html 이동
else:
return render(request, 'user/signin.html') # 로그인 하지 않은 사용자라면 로그인 페이지로 이동
2. templates/user/signin.html에서 추가
{% if error %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endif %}
빈 글 쓰기 방지
1. tweet/views.py에서 tweet 메서드 수정
def tweet(request):
if request.method == 'GET':
user = request.user.is_authenticated # is_authenticated : 로그인 되어 있는지 검사
if user:
all_tweet = TweetModel.objects.all().order_by('-created_at') # -created_at : created_at 기준 역순 (최신 먼저)
return render(request, 'tweet/home.html', {'tweet': all_tweet}) # 로그인 한 사용자라면 home.html 이동
else:
return redirect('/sign-in') # 로그인 하지 않은 사용자라면 로그인 페이지로 이동
elif request.method == 'POST':
user = request.user # 지금 로그인 되어있는 사용자의 정보 전체를 가져온다
content = request.POST.get('my-content', '')
# 내용이 비어있을 경우
if content == '':
all_tweet = TweetModel.objects.all().order_by('-created_at')
return render(request, 'tweet/home.html', {'error': '내용을 입력해주세요', 'tweet': all_tweet})
else:
my_tweet = TweetModel.objects.create(author=user, content=content)
my_tweet.save()
return redirect('/tweet')
2. templates/tweet/home.html에서 추가
{% if error %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endif %}
네비게이션 바의 '친구' 탭 로그인 시 표시
1.templates/base.html에서 수정
{% if user.is_authenticated %}
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="/user"> 친구 <span class="sr-only"></span></a>
</li>
</ul>
</div>
{% endif %}
'Backend > Django' 카테고리의 다른 글
[파이썬] Django - SNS 기초 실습 8) AWS 서버 구축 (0) | 2022.06.02 |
---|---|
[파이썬] Django - SNS 기초 실습 7) tag (django-taggit) (0) | 2022.05.30 |
[파이썬] Django - SNS 기초 실습 5) Follow (ManyToMany) (0) | 2022.05.30 |
[파이썬] Django - SNS 기초 실습 4) Tweet (조회, 댓글) (0) | 2022.05.27 |
[파이썬] Django - SNS 기초 실습 3) Tweet (게시글) (0) | 2022.05.27 |