티스토리 뷰
django project/쇼핑몰
[django 쇼핑몰] 로그인 로그아웃 (views.py, forms.py, login.html, templates)
지휘리릭 2020. 1. 23. 17:15● 로그인
users/forms.py
- 필드를 설정하고 clean을 통해 유효성을 검사한다는 점에서 RegisterForm과 유사한 방식을 갖는다. 하지만, 로그인 폼에서는 존재하는 이메일인지 확인하는 try 와 존재하지 않는 경우의 예외 처리(Users.DoesNotExist) 코드, check_password 를 사용하여 비밀번호를 확인한다.
class LoginForm(forms.Form):
email = forms.EmailField(
error_messages={'required':'이메일을 입력하세요'},
max_length=64, label = "이메일"
)
password = forms.CharField(
error_messages = {'required' : "비밀번호를 입력하세요"},
max_length = 128, label = "비밀번호", widget = forms.PasswordInput
)
def clean(self):
cleaned_data = super().clean()
email = cleaned_data.get('email')
password = cleaned_data.get('password')
if email and password :
try:
user = Users.objects.get(email = email)
except Users.DoesNotExist:
self.add_error('email', "존재하지 않는 이메일입니다.")
return
if not check_password(password, user.password):
self.add_error('password', '비밀번호가 일치하지 않습니다.')
users/login.html
{% 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">
<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_for_label}}"
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 %}
users/views.py
- LoginForm이 제대로 입력되었다면 세션에 이메일 정보를 저장한다.
class LoginView(FormView):
template_name = 'login.html'
form_class = LoginForm
success_url = '/'
def form_valid(self, form):
self.request.session['user'] = form.data.get('email')
return super().form_valid(form)
로그인 실행 결과
- 제대로 로그인 되어 home 화면으로 이동하고 로그인되어있는 아이디를 출력하는 것까지 볼 수 있다.
● 로그아웃
users/views.py
- 로그아웃은 html도 form도 아무것도 필요없이 세션 정보만 삭제해주면 된다. 로그아웃하고나서 홈화면으로 이동하게 한다.
def logout(request):
if request.session.get('user'):
del(request.session['user'])
return redirect('/')
'django project > 쇼핑몰' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알파벳 카운팅
- pythonanywhere배포방법
- 까만 화면
- iOS 데이터베이스
- cleaned_data
- django clean
- python 웹 배포
- django 게시판
- django tag
- iOS 화면 안나옴
- CellForRowAt Not Called
- ModelForm Form 차이
- django 로그인접근
- 장고 태그달기
- django 개발일지
- 데이터베이스 추천
- 장고 게시판
- iOS 검은 화면
- django 태그
- 실시간 데이터베이스
- Realtime Database
- django pythoneverywhere
- UITableViewController Not Working
- pythonanywhere배포
- Firebase 데이터베이스 추천
- CellForRowAt 호출안됨
- Django
- 웹 배포
- iOS UITableView 출력안됨
- 테이블출력안됨
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함