본문 바로가기
Django/Django Vanila

13. 서비스 수정

by S.T.Lee 2022. 5. 30.

1. 로그인/회원가입 - 로그인을 했을시 왜 로그인이 잘 안되는지 알려주기

1) 회원가입

#user/views.py
def sign_up_view(request):
    ''''''
    elif request.method == 'POST': #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': '사용자 이름과 비밀번호는 필수 값 입니다.'})
            old_user = auth.get_user_model().objects.filter(username=username)
            if old_user:
                return render(request, 'user/signup.html', {'error': '이미 존재하는 사용자 이름입니다.'})
            else:
                UserModel.objects.create_user(
                    username=username,
                    password=password,
                    bio=bio
                )
                return redirect('/sign-in')

이후 templates/user/signup.html을 수정한다.

<input type="text" class="form-control" id="bio" name="bio">
</div>

{% if error %}
    <div class="alert alert-danger" role="alert">
        {{ error }}
    </div>
{% endif %}

<hr>
<div style="float: right">
    <button type="submit" class="btn btn-primary">회원가입</button>
    <a href="/sign-in" class="btn btn-secondary">로그인 페이지로</a>
</div>

정상적으로 작동한다.

 

2) 로그인

마찬가지로

#user/views.py
def sign_in_view(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')

    	''''''
        else:
            return render(request, 'user/signin.html', {'error':'유저이름 혹은 패스워드를 확인 해 주세요'})

바꿔주는데 기존 redirect에서 render로 바꿔줘서 error메시지를 출력할 수 있게끔 해준다.

이후 templates/user/signin.html에서 하단의 내용을 수정해준다.

<hr>
{% if error %}
    <div class="alert alert-danger" role="alert">
        {{ error }}
    </div>
{% endif %}
<div style="float: right">
    <button type="submit" class="btn btn-primary">로그인</button>
    <a href="/sign-up" class="btn btn-secondary">회원가입 페이지로</a>
</div>

정상 작동한다.

 

2. 글쓰기 빈칸 방지

tweet/views.py
def tweet(request):
    ''''''
    elif request.method == 'POST':
        user = request.user
        my_tweet = Tweet()
        my_tweet.author = user
        my_tweet.content = request.POST.get('my-content', '')
        my_tweet.save()
        return redirect('/tweet')

를 하단과 같이 바꿔준다.

elif request.method == 'POST':
    user = request.user
    content = request.POST.get('my-content', '')
    if content == '':
        all_tweet = Tweet.objects.all().order_by('created_at')
        return render(request, 'tweet/home.html', {'tweet': all_tweet, 'error':'글은 공백일 수 없습니다.'})
    else:
        my_tweet = Tweet.objects.create(author=user, content=content)
        my_tweet.save()
    return redirect('/tweet')

templates/tweet/home.html

<form action="/tweet/" method="post">
  {% csrf_token %}
  {% if error %}
      <div class="alert alert-danger" role="alert">
          {{ error }}
      </div>
  {% endif %}
  <div class="form-group mb-2">
      <textarea class="form-control" style="resize: none" name='my-content' id="my-content"></textarea>

정상 작동한다.

 

3. 로그아웃 상태에서도 '친구' 링크가 보이는것

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 %}

사라졌다!