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 %}
๊ทธ๋ฌ๋ฉด ๋ก๊ทธ์ธ ํ๊ธฐ์ ์๋ '์น๊ตฌ'๊ฐ ์๋ณด์ด๋ค๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ๋ณด์ด๋๊ฑธ ํ์ธํ ์ ์๋ค!
'๐๐ช > Django' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
5์ฃผ์ฐจ_3๋ฒ์งธ_GitHub์ ์ฌ๋ฆฌ๊ธฐ (0) | 2022.09.25 |
---|---|
5์ฃผ์ฐจ_2๋ฒ์งธ_django taggit(ํ๊ทธ๋ฌ๊ธฐ) (0) | 2022.09.25 |
4์ฃผ์ฐจ_3๋ฒ์งธ_์น๊ตฌ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ (0) | 2022.09.25 |
4์ฃผ์ฐจ_2๋ฒ์งธ django shell (0) | 2022.09.24 |
4์ฃผ์ฐจ_1๋ฒ์งธ_๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๊ณ, Many -to - Many ๋ชจ๋ธ ๋ฑ๋ก (0) | 2022.09.24 |
๋๊ธ