๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“๐Ÿ’ช/Django

5์ฃผ์ฐจ_1๋ฒˆ์งธ_๊ธฐ๋Šฅ ๋‹ค๋“ฌ๊ธฐ

by ์ˆ˜์จ”์•™ 2022. 9. 25.

1. ํšŒ์›๊ฐ€์ž… ๋นˆ์นธ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ์ด์œ  ์•Œ๋ ค์ฃผ๊ธฐ

2. ๋กœ๊ทธ์ธ ๋นˆ์นธ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ์ด์œ  ์•Œ๋ ค์ฃผ๊ธฐ

3. ๋นˆ ๊ธ€์“ฐ๊ธฐ ๋ฐฉ์ง€

4. ์นœ๊ตฌ ํƒญ ๋กœ๊ทธ์ธ์‹œ์—๋งŒ ๋ณด์ด๊ฒŒ ํ•˜๊ธฐ


1. ํšŒ์›๊ฐ€์ž… ๋นˆ์นธ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ์ด์œ  ์•Œ๋ ค์ฃผ๊ธฐ

 

ํšŒ์›๊ฐ€์ž…์—์„œ ๋นˆ์นธ์œผ๋กœ ๋กœ๊ทธ์ธ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

 

์ด๋Ÿฐ ํ™”๋ฉด์ด ๋œฌ๋‹ค

ValueError๋Š” ์ž…๋ ฅ๊ฐ’์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!

The given username must be set ์ด๋ผ๊ณ  ๋‚˜์˜ค๋Š”๋ฐ user/views.py์—์„œ ํ™•์ธํ•ด๋ณด์ž

 

ํšŒ์›๊ฐ€์ž…์ด๋‹ˆ sign_up_view๋ฅผ ๋ณด์ž

elif request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        password2 = request.POST.get('password2', None)
        bio = request.POST.get('bio', None)

 

์ด ๋ถ€๋ถ„์„ ๋ณด๋ฉด ์ž…๋ ฅ๊ฐ’์ด ์—†๋‹ค๋ฉด None์„ ๋ณด๋‚ด๊ณ  ์žˆ๋‹ค. None ๋ง๊ณ  ''์„ ๋ณด๋‚ด์ฃผ์ž

elif request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        password2 = request.POST.get('password2', '')
        bio = request.POST.get('bio', '')

 

๊ทธ๋ฆฌ๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ ํŽ˜์ด์ง€์— ์•Œ๋ ค์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค.

ํŒจ์Šค์›Œ๋“œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ํŒจ์Šค์›Œ๋“œ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค, ๋นˆ์นธ์ด๋ฉด ํ•„์ˆ˜๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” ์™€ ๊ฐ™์ด!

 

def sign_up_view(request):
    if request.method == 'GET':
        user = request.user.is_authenticated
        if user:
            return redirect('/')
        else:
            return render(request, 'user/signup.html')
    elif request.method == 'POST':
        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':'์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํ•„์ˆ˜๊ฐ’ ์ž…๋‹ˆ๋‹ค'})
            
            exist_user = get_user_model().objects.filter(username=username)
            if exist_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 ์ˆ˜์ •ํ•ด์ฃผ์ž

<hr> ์œ„์— ์•„๋ž˜ ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋Š”๋ฐ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ๋„์›Œ์ค€๋‹ค๋Š” ๊ฒƒ!


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

 

์ด์ œ ๋”์ด์ƒ ์—๋Ÿฌ๊ฐ€ ์•ˆ๋‚˜๊ณ  ๋ฉ”์„ธ์ง€๊ฐ€ ๋œฌ๋‹ค!


2. ๋กœ๊ทธ์ธ ๋นˆ์นธ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ์ด์œ  ์•Œ๋ ค์ฃผ๊ธฐ

 

user/view.py์˜ sign_in_view๋ฅผ ๋ณด์ž

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ None์„ ''์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ๋ณด๋‚ด์ฃผ์ž

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

        me = auth.authenticate(request, username=username, password=password) 
        if me is not None:  # ์ €์žฅ๋œ ์‚ฌ์šฉ์ž์˜ ํŒจ์Šค์›Œ๋“œ์™€ ์ž…๋ ฅ๋ฐ›์€ ํŒจ์Šค์›Œ๋“œ ๋น„๊ต
            auth.login(request, me)
            return redirect('/')
        else: # ๋กœ๊ทธ์ธ ์‹คํŒจ ์‹œ
            return render(request, 'user/signin.html',{'error':'์‚ฌ์šฉ์ž์ด๋ฆ„ ํ˜น์€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ™•์ธ ํ•ด ์ฃผ์„ธ์š”'})
    elif request.method == 'GET':
        user = request.user.is_authenticated
        if user:
            return redirect('/')
        else:
            return render(request, 'user/signin.html')

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—๋Ÿฌํ™”๋ฉด ๋„์›Œ์ฃผ์ž

templates/user/signin.html

<hr> ํƒœ๊ทธ ์œ„์— ๋„ฃ์–ด์ฃผ์ž

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

 

๊ทธ๋ฆฌ๊ณ  ์ž˜๋ชป๋œ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ–ˆ๋”๋‹ˆ

 

์ด๋ ‡๊ฒŒ ์ž˜ ๋‚˜์˜จ๋‹ค!! 

 

 


3. ๋นˆ ๊ธ€์“ฐ๊ธฐ ๋ฐฉ์ง€

 

์ง€๊ธˆ์€ ๋นˆ ๊ธ€์„ ์จ๋„ ๊ธ€์ด ์˜ฌ๋ผ๊ฐ„๋‹ค! ๋นˆ ๊ธ€์€ ์—…๋กœ๋“œ ๋ชปํ•˜๊ฒŒ ๋ฐ”๊ฟ”๋ณด์ž!

 

tweet/views.py ํ™•์ธํ•ด๋ณด์ž

    elif request.method == 'POST':  # ์š”์ฒญ ๋ฐฉ์‹์ด POST ์ผ๋•Œ
        user = request.user  # ํ˜„์žฌ ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
        my_tweet = TweetModel()  # ๊ธ€์“ฐ๊ธฐ ๋ชจ๋ธ ๊ฐ€์ ธ์˜ค๊ธฐ
        my_tweet.author = user  # ๋ชจ๋ธ์— ์‚ฌ์šฉ์ž ์ €์žฅ
        my_tweet.content = request.POST.get('my-content', '')  # ๋ชจ๋ธ์— ๊ธ€ ์ €์žฅ
        my_tweet.save()
        return redirect('/tweet')

 

์ด ์ฝ”๋“œ๋ฅผ ์•„๋ž˜ ์ฝ”๋“œ๋กœ ์ˆ˜์ •ํ•ด์ฃผ์ž

    elif request.method == 'POST':  # ์š”์ฒญ ๋ฐฉ์‹์ด 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')

 

์ด์ œ ํ™”๋ฉด์— ๋ณด์—ฌ์ค˜์•ผ๋œ๋‹ค

templates/tweet/home.html์— ์ฝ”๋“œ ์ถ”๊ฐ€ํ•ด์ฃผ์ž

<!-- 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>


...์ƒ๋žต

 

๊ทธ๋žฌ๋”๋‹ˆ ๊ณต๋ฐฑ์œผ๋กœ ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด

 

์ด๋ ‡๊ฒŒ ์ž˜ ๋œฌ๋‹ค!

 


4. ์นœ๊ตฌ ํƒญ ๋กœ๊ทธ์ธ์‹œ์—๋งŒ ๋ณด์ด๊ฒŒ ํ•˜๊ธฐ

 

templates/base.html์— ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•ด์ฃผ์ž

<!-- templates/base.html -->
{% if  user.is_authenticated %}
<div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
        <li class="nav-item">
            <a class="nav-link" href="/user"> ์นœ๊ตฌ <span class="sr-only"></span></a>
        </li>
    </ul>
</div>
{% endif %}

 

๊ทธ๋Ÿฌ๋ฉด ๋กœ๊ทธ์ธ ํ•˜๊ธฐ์ „์—๋Š” '์นœ๊ตฌ'๊ฐ€ ์•ˆ๋ณด์ด๋‹ค๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ๋ณด์ด๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

 

728x90

๋Œ“๊ธ€