장고 거북이반 강의 복습하면서 놓치기 쉬워 다시 한 번 검토가 필요한 내용들 중심으로 정리해보았습니다.
1. template 파일에서
<form method="POST" action="{% url 'user:login' %}">
여기서 user는 자동으로 user 앱을 인식하는 것이 아니라 urls.py에서 app_name = user를 명시해야 인식한다.
2. template 파일에서
다음과 같은 input 이 있을 때
<input
type="text",
name="username",
placeholder="username",
id="username",
class="username"
/>
거의 모든 변수값을 username으로 지정하여 좀 헷갈릴 수도 있는데
type은 input할 변수의 특징을 지정, name은 명칭, placeholder는 힌트와 같은 텍스트 표시, id와 class는 CSS와 JS 구현 시 필요하다.
"여기서, 백엔드 서버 데이터에 표기되는 정보는 name이다."
2-1. template 파일과 views.py를 연결
그렇기 때문에, 로그인 정보를 POST 할 때 user/views.py에서, username = request.POST.get('username')
"위 html의 input에 의해 입력된 데이터의 name에 해당하는 username을 get 해온 후 POST한다" 라고 보면 된다.
from django.contrib.auth import authenticate, login as loginsession
...(생략)...
def login(request):
if request.method=='GET':
return render(request, 'login.html')
elif request.method =='POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = auth.authenticate(request, username=username, password=password)
print(username, password)
if user is not None:
loginsession(request, user)
return redirect('/')
else:
return render(request, 'login.html', {'error': '아이디와 비밀번호를 확인해 주세요!'})
위에서 auth의 login을 호출했기 때문에 if user is not None 에서 보통 login(request, user) 을 적용하지만 위에서 이미 자체적으로 login 함수를 define 했기 때문에 서버 입장에서는 다소 혼선이 있을 수 있다. 따라서 login 대신 loginsession을 호출한 후 loginsession(request, user)을 사용하면 혹시 모를 충돌을 방지할 수 있다.
3. request 관련
def user(request):
print(request.user)
return HttpResponse("로그인 성공")
보통, request 는 뒤에 .method나 method의 일종인 .POST, .GET을 붙여 표기하기 마련인데 print의 request.user라고 표시된 것은 다소 생소한데, 장고가 편리하게 request에서 쿠기검사해서 쿠키 내 세션 아이디와 동일하면 그 user 값 보여주는 것이라고 보면 된다.
# 예시
print(request.user.date_joined) # 계정 생성 날짜 기록
print(request.user.last_login) # 마지막으로 로그인한 시간 기록
위와 같이 user뒤에 추가로 적어줄 수도 있다.
3. url에 사용자명을 표기하고 싶을때,
# users/urls.py
app_name = 'users'
urlpattern = [
path("signup/", views.signup, name="signup"),
path("login/", views.login, name="login"),
path("user/", views.user, name="user"),
path("<str:username>/", views.profile, name="profile")
]
# user/views.py
...(생략)...
def profile(request, username):
print(username)
return(HttpResponse(username)
다음과 같이 표기하면, http://127.0.0.1:8000/ (username) 으로 url 입력하면 (username)이 프린트된다.
'스파르타코딩 AI웹개발 3기' 카테고리의 다른 글
| 내일배움캠프_TIL_2022.10.27 (0) | 2022.10.28 |
|---|---|
| 내일배움캠프_TIL_2022.10.26 (0) | 2022.10.26 |
| 내일배움캠프_WIL_2022.10.23 (0) | 2022.10.23 |
| 내일배움캠프_TIL_2022.10.21 (0) | 2022.10.21 |
| 내일배움캠프_TIL_2022.10.20 (0) | 2022.10.21 |