2020. 11. 20. 23:21ㆍCoding/Python-Fastcampus
03. View - 03. 로그인 만들기
회원가입과 마찬가지로 FormView를 이용해서 간단하게 구현한다.
1. views.py 에서 LoginView를 만든다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
from django.shortcuts import render
from django.views.generic.edit import FormView
from .forms import RegisterForm, LoginForm
# Create your views here.
def index(request) :
return render(request, 'index.html', { 'email':request.session.get('user') })
class RegisterView(FormView):
template_name = 'register.html'
form_class = RegisterForm
success_url = '/'
class LoginView(FormView):
template_name = 'login.html'
form_class = LoginForm
success_url = '/'
def form_valid(self, form) :
self.request.session['user'] = form.email
return super().form_valid(form)
|
cs |
form_valid 함수는 로그인 이후에 세션에 email을 저장하는 부분인데, 그냥 외워야하는 부분인거같다.
2. login.html을 만든다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
{% extends "base.html" %}
{% block contents %}
<div class="row mt-5">
<div class="col-12 text-center">
<h1>로그인</h1>
</div>
</div>
<div class="row mt-5">
<div class="col-12">
{{ error }}
</div>
</div>
<div class="row mt-5">
<div class="col-12">
<form method="POST" action=".">
{% csrf_token %}
{% for field in form %}
<div class='form-group'>
<label for="{{field.id_for_label}}">{{ field.label }}</label>
<input type="{{ field.field.widget.input_type }}" class="form-control" id="{{ field.id }}" placeholder="{{ field.label }}" name="{{ field.name }}" />
</div>
{% if field.errors %}
<span style="color: red;">{{ field.errors }}</span>
{% endif%}
{% endfor %}
<button type="submit" class="btn btn-primary">로그인</button>
</form>
</div>
</div>
{% endblock %}
|
cs |
이전에 만든 회원가입 부분을 복사해서 만들면된다.
어차피 기본틀이고, for문으로 forms.py의 내용을 출력하는거라 문제없다.
3. forms.py 로그인 폼을 만든다. 이전에 만든 RegisterForm은 생략했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
from django.contrib.auth.hashers import check_password, make_password
class LoginForm(forms.Form) :
email = forms.EmailField(
error_messages = {
"required":"이메일을 입력해주세요."
},
max_length=64,
label='이메일'
)
password = forms.CharField(
error_messages = {
"required":"비밀번호를 입력해주세요."
},
widget=forms.PasswordInput,
label='비밀번호'
)
def clean(self) :
cleaned_data = super().clean()
email = cleaned_data.get('email')
password = cleaned_data.get('password')
if email and password :
try :
fcuser = Fcuser.objects.get(email=email)
except Fcuser.DoesNotExist :
self.add_error('email', 'ID가 없습니다.')
return
if not check_password(password, fcuser.password) :
self.add_error('password', '비밀번호를 틀렸습니다.')
else :
self.email = fcuser.email
|
cs |
이전에 만든 login을 참고하였다.
Fcuser.objects.get(email)을 통해서 해당 유저가 있는지를 확인하고,
check_password()를 통해서 비밀번호를 확인하여 로그인을 승인한다.
4. urls.py에 등록
1
2
3
4
5
6
7
8
9
10
11
|
from django.contrib import admin
from django.urls import path
from fcuser.views import index, RegisterView, LoginView
urlpatterns = [
path('admin/', admin.site.urls),
path('', index),
path('register/', RegisterView.as_view()),
path('login/', LoginView.as_view()),
]
|
cs |
RegisterView.as_view()처럼 class를 등록할때는 .as_view()를 넣어준다.
5. index.html 수정.
1
2
3
4
5
6
7
|
{% extends "base.html" %}
{% block contents %}
Hello!
{{ email }}
{% endblock %}
|
cs |
별건 없고, 단순히, 로그인 이후에 {{ email }}을 통해서 sessioin에 email이 잘 등록되었는지 확인용.
6. views.py에서 index.html로 email 보내는 부분 작성.
1
2
|
def index(request) :
return render(request, 'index.html', { 'email':request.session.get('user') })
|
cs |
session에서 user값(email이 담겨있다.)을 가져와서 email에 넣어 index.html로 보낸다.
7. 결과
06. 함수 - 01. 함수 및 람다(lambda)(1)
다중리턴.
1
2
3
4
5
6
7
8
9
10
|
def fun_mul(x) :
w = x * 100
y = x * 200
z = x * 300
return w,y,z
a,b,c = fun_mul(100)
print(a,b,c)
|
cs |
다중리턴(다중 타입).
1
2
3
4
5
6
7
8
9
10
|
def fun_mul(x) :
w = x * 100
y = "qwer"
z = x * 2.0
return w,y,z
a,b,c = fun_mul(100)
print(a,b,c)
|
cs |
다중 리턴은 신박해서 정리.
다중 타입으로 다중 리턴도 잘 됨.
06. 함수 - 02. 함수 및 람다(lambda)(2)
가변인자.
1
2
3
4
5
6
|
def args_func(*args) :
print(args)
args_func('kim')
args_func('kim', "lee")
args_func('kim', "lee", "park")
|
cs |
Tuple로 넘어온다.
for문으로 활용가능.
*로 표시한다. *args
java에서는 ... String... strs
kotlin에서는 vararg로 표현하는게 있다. vararg numbers:Int
**kwargs
1
2
3
4
5
6
|
def kwargs_func(**kwargs) :
print(kwargs)
kwargs_func(val1='abc', val2='ㄱㄴㄷ')
kwargs_func(val1='abc', val2='ㄱㄴㄷ', val3=123)
kwargs_func(val1='abc', val2='ㄱㄴㄷ', val3=123, val4=3.14)
|
cs |
Dict으로 반환.
갯수 제한없음
for문으로 활용가능.
1
2
3
4
5
6
7
|
def kwargs_func(**kwargs) :
for k,v in kwargs.items() :
print(k,v)
kwargs_func(val1='abc', val2='ㄱㄴㄷ')
kwargs_func(val1='abc', val2='ㄱㄴㄷ', val3=123)
kwargs_func(val1='abc', val2='ㄱㄴㄷ', val3=123, val4=3.14)
|
cs |
'Coding > Python-Fastcampus' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 21 회차 미션 (0) | 2020.11.22 |
---|---|
[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 20 회차 미션 (0) | 2020.11.21 |
[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 18 회차 미션 (0) | 2020.11.19 |
[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 17 회차 미션 (0) | 2020.11.18 |
[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 16 회차 미션 (0) | 2020.11.17 |