---
title: "LikeLion KKU 두 번째 Review"
date: 2019-10-04 00:00:00 -0400
categories: jekyll update
---
# 두 번째 복습 시간 리뷰
### 글쓰기와 사용자를 관리하며 생긴 오류와 궁금증
- 회원가입시 동일한 아이디가 있을 경우에 대하여
기존 classlion 강의를 보며 작성한 코드를 보면
```
def signup(request):
if request.method == 'POST':
if request.POST['password1'] == request.POST['password2']:
user = User.objects.create_user(
request.POST['username'], password=request.POST['password1'])
auth.login(request, user)
return redirect('home')
return render(request, 'signup.html')
```
이렇게 되어있다.
이렇게 할 경우의 문제점이
```
1. 비밀번호를 입력 안 해도 회원가입이 된다.
2. 에러가 나서 signup로 리턴하게 될 경우 사용자는 무엇이 잘못되었는지 모른다.
3. 중복된 아이디를 체크할 수 없다.
```
이러한 문제점이 발생한다. (물론 더 있을 수 있다.)
오류를 고치기 전에 request 받는 값을 간편하게 적기 위하여 코드를 변경해 주었다.
```
def signup(request):
if request.method == 'POST':
username = request.POST['username']
password1 = request.POST['password1']
password2 = request.POST['password2']
if password1 == password2:
user = User.objects.create_user(username, password=password1)
auth.login(request, user)
return redirect('home')
return render(request, 'signup.html')
```
코드를 쓸 때마다 `request.POST['username']`를 적어주는 것이 번거로워
위에 선언을 해주었다. username란 변수에 request.POST['username']값을 담고 이와 같이 password도 담아주었다
그 후 request.POST['password1']는 password1로 바뀌게 됨으로 request 값들을 선언해준 변수로 바꾸어 주었다.
이제 2번째 오류를 고쳐보자
```from django.contrib import auth, messages```
`django.contrib` 에서 `messages`를 추가해 주자.
messages를 추가하여 상황이 발생하였을 때 messages를 출력할 수 있다.
이를 출력하기 위하여 `signup.html` 에 아래의 함수
여기는 이상하게 안 나옴 ㅠ.ㅠ---
```
{% if messages %}
{% for message in messages %}
{{ message.tags }}
{{ message.message }}
{% endfor %}
{% endif %}
```
---여기까지
를 넣어주자
이 코드는 해당 html에서 함수가 실행되었을 때 해당 `messages`를 출력하여준다.
이제 1번째 오류를 가보자 1번째 오류는
먼저 값이 입력이 안됐을 경우의 상황을 만들어 주면 된다.
이는 python에서 `is None` 이라는 코드를 입력하면 된다.
```if username and password1 is not None:```
만약에 username과 password1의 값이 있을 경우
`is not None` 을 붙여주어 값이 있을 때만 회원가입을 진행하게 해 주었고
```
if username and password1 is not None:
if password1 == password2:
user = User.objects.create_user(username, password=password1)
auth.login(request, user)
return redirect('home')
else:
messages.info(request, '비밀번호가 다릅니다.')
return render(request, 'signup.html')
else:
messages.info(request, '값을 입력해주세요')
return render(request, 'signup.html')
```
값이 비어있을 경우에는 signup로 돌아가게 해 주었다.
또한 여기서 오류 메시지를 출력하기 위하여
해당 페이지로 `return` 하기 전 `messages` 함수를 사용하여 원하는 문구의 오류를 출력하여 준다.
이렇게 1번째 오류와 2번째 오류를 수정하였다.
[messages] 참고자료
[messages]: https://ssungkang.tistory.com/entry/Djangomessage-framework-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
---
## 최종 수정
```
def signup(request):
if request.method == 'POST':
username = request.POST['username']
password1 = request.POST['password1']
password2 = request.POST['password2']
if not username:
messages.info(request, '아이디를 입력해 주세요')
return render(request, 'signup.html')
if not password1:
messages.info(request, '비번을 입력해 주세요')
return render(request, 'signup.html')
if password1 == password2:
if User.objects.filter(username=username).exists():
messages.info(request, '아이디가 중복됩니다.')
return render(request, 'signup.html')
else:
user = User.objects.create_user(username, password=password1)
auth.login(request, user)
return redirect('home')
else:
messages.info(request, '비밀번호가 다릅니다.')
return render(request, 'signup.html')
return render(request, 'signup.html')
```
# 로그아웃 방식은 `post` ? `get` ?
- 참고자료 [get과 post], [get과 post2]
찾아보고 정리하자면
사용자 세션의 상태에 영향을 주는 것은 결코 행동을 취하지 않아야 한다고 한다.
2010년도를 생각하면 get방식도 상관이 없었으며 post방식은 과잉 방식이지 않나 생각할 수 있었겠지만
2013년도를 지나 인터넷 브라우저도 진화하면서 브라우저가 할 수 있는 게 늘어남에 따라
위험성의 증가와 인증되지 않은 get방식으로 정보를 해킹당하거나 사용자가 원치 않아도 로그아웃이 될 수 있기 때문이다.
[get과 post]: https://code-examples.net/ko/q/35bb0a
[get과 post2]: https://codeday.me/ko/qa/20190405/244363.html
'코딩공부 > Python Django' 카테고리의 다른 글
KKU likelion django project (4) (0) | 2020.01.02 |
---|---|
KKU likelion django project (3) (0) | 2020.01.02 |
KKU likelion django project (1) (0) | 2020.01.02 |
KKU likelion rest project (4) (0) | 2019.10.28 |
KKU likelion rest project (3) (1) | 2019.10.28 |